Changelog
Sentinel release notes — runtime versions and platform updates.
sentinel enroll— enrollment is its own command.sentinel enrollprompts for the license key;sentinel enroll <key>runs without prompts for scripted setups; re-enrolling an already-enrolled robot shows the current identity and asks for confirmation.- Breaking:
sentinel startno longer enrolls and no longer takes--license-key— it fails with a pointer tosentinel enrollwhen the robot is not enrolled. The deprecatedsentinel upalias is removed. Update any provisioning scripts. sentinel statusnow surfaces authentication failures instead of reporting a rejected device asenrolled, moves full error text to anerrors:section below the summary, and colorizes state words on terminals.- Fixed runtime-container logs and metrics being dropped: the shared telemetry spool was not writable by the container's producers on some installs.
Upgrade by re-running the installer: curl -fsSL https://sentinel.avearobotics.com/install.sh | bash
- Webhooks — subscribe an HTTPS endpoint to episode lifecycle events (
episode.finalized,episode.synced,episode.verified,episode.failed,episode.pruned) instead of polling. Deliveries are HMAC-signed, secrets rotate with a 24-hour grace window, and dead-lettered deliveries can be inspected and redelivered. See Webhooks. - Dataset cloud sync — finalized episodes sync from robots to your storage through per-episode grants. Configure destinations and routing rules; optional retention prunes the local copy after every destination verifies. See Cloud sync.
- Grant providers — run an endpoint that issues presigned upload URLs and robots upload directly to your storage; Avea relays the URLs and never has access to the data. A conformance check (
POST /v1/destinations/{id}/check) grades your implementation in CI. See Build a grant provider. - Episode responses include
replicas— per-destination sync state — andGET /v1/episodesfilters onsync_state. GET /v1/sync-health/robotsreports per-robot sync backlog for alerting.- POST endpoints accept an
Idempotency-Keyheader; retries with the same key return the stored response for 24 hours.
- Subtasks for operators — step through a task's subtasks from the controller; ordered subtask context and outcomes are recorded with each episode.
- Immersive stereo neck view — a ZED X Mini stereo camera renders as the headset's immersive view.
- Dynamixel neck backend — necks support Dynamixel XC330 servos alongside Feetech (
backend: feetech | dynamixel). - Smoother fine arm motion on YAM — corrected gravity model, end-effector mass override, and stiction compensation reduce overshoot and stick-slip in small motions.
- PiPER X arms can hold position on shutdown (
adapter.hold_on_shutdown) instead of dropping — the arms have no brakes. - Neck reliability — motion profiles are re-applied after a motor reboot (no more full-speed snaps), goals track across the encoder boundary, and end-of-travel jitter is fixed.
- ZED cameras recover automatically after a driver restart or GMSL link drop.
- Recording fixes — commanded joint and gripper actions are recorded so episodes are train-ready, and the gripper state topic records correctly.
- Fixed episode discard handling.
- UFACTORY xArm7 support — native Ethernet adapter with gripper support, e-stop handling, and fault recovery on re-arm.
- Anvil devbox support for OpenArm v1/v2, including an optional Cartesian mode that drives Anvil's on-devbox IK as a config switch.
- OpenArm reliability — CAN fault detection with motor deadman and bus self-healing, safe first-power-on behavior, and per-chain torque limits.
- More responsive teleop — velocity feedforward in trajectory smoothing removes command lag; bench-tuned profiles ship for OpenArm.
- Absolute (shoulder-relative) posturing mode (
retargeting.absolute) closes the start-of-session pose gap. - Haptics route to the correct side on bimanual systems.
- The generic ROS 2 bridge can emit
Float64MultiArraycommand streams (manipulator.command.outputs). - Episodes carry task and operator names plus robot hardware and firmware metadata (
robot_platform, per-arm hardware info) inmetadata.yamland the platform API. - Fixed a silent adapter failure that blocked re-arming until a full stack restart; fixed connection-status reporting on the new WebRTC transport.
- Software H.264 (x264) encoder included in the runtime image.
- Native H.264 encoding — NVENC on discrete GPU and Jetson, with correct profile/level signaling.
- New WebRTC transport with custom congestion control for smoother video under changing network conditions.
- Torso recentering safety measure — the waist recenters slowly and recentering is gated so it can't fire during active teleop.
- Dataset labeling and task selection for operators, plus more reliable episode reporting.
- Advanced logging — runtime logs and telemetry ship to our cloud for faster support and diagnostics.
- API to transition robot states remotely (arm, disarm, e-stop).
- OpenArm (Enactic) support.
- Almond Axol support.
- RealMan RMC-DA (dual-arm wheeled) support.
- Bug fixes.
- Humanoid torso control — joystick-driven waist yaw and tilt.
- Generic ROS 2 adapter — bridge Sentinel to your own robot over standard ROS 2 topics. See Connect with ROS 2.
image_transportcamera adapter for existing ROS 2 camera streams.- Network diagnostics on the operator dashboard.
- Logs and metrics are tagged with the container build version.
- Fixed MCAP file-name suffixes.
- PTZ camera control — toggle between locomotion and PTZ mode to aim PTZ cameras with the joysticks.
- AgileX PiperX support.
- Independent left/right arm control via per-arm grip gating.
- E-stop handling and disarm support, including software e-stop recovery without restarting the runtime.
- Fixed the multi-chain deadman system.
- Connection reliability improvements.
-
Configs can change camera panel placement and size in pass-through mode.
- Panels sit in a 3×3 grid:
{top,middle,bottom}_{left,center,right}. - Sizes are fractional values in
[0.25, 4.0].
xr: coordinate_system: "webxr" video: enabled: true mode: "pre_encoded" cameras: - {id: "neck", panel_position: "middle_left", panel_size: 2.0} - {id: "chest", panel_position: "middle_right"} - {id: "left_wrist", panel_position: "bottom_left"} - {id: "right_wrist", panel_position: "bottom_right", panel_size: 0.25} resolution: [1920, 1080] fps: 30 max_latency_ms: 100 - Panels sit in a 3×3 grid:
-
Improved connection and retry logic for more robust, reliable connections.
-
Fixed a bug where turning your head too far in one direction caused neck commands to roll around the other way.
- New platform:
- Website backend revamped — better render performance and graphics.
- New web client at Sentinel XR Teleoperation.
- Accompanying Avea Robotics dashboard.
- Support for non-CUDA computers:
amd64— x86_64arm64— arm64amd64-cu13— x86_64 CPU with discrete NVIDIA GPU (CUDA Toolkit 13)jp6.2— Jetson family running JetPack 6.2.x (CUDA Toolkit 12.6)
- New transport backend — faster connection times, more stable streams.
- Added LimX Dynamics Oli robot: arm retargeting, neck movement, head and chest camera access, locomotion, Inspire gripper, BrainCo dex-hand (pre-programmed grasps + open/close).
- Dataset recording changes:
- Episodes are written to
session_<ts>/episode-###.in_progress/while recording, then atomically renamed to*.finalized/on stop. NAS sync, sqlite ledgers, and downstream tooling can rely on the suffix to tell unfinalized data apart. - Session rollover —
episodes_per_sessionrotates session folders automatically. - Two new services —
discard_episode(hard delete; counter rolls back so there are no gaps) andfail_episode(markoutcome=failureand let policy decide: keep, delete, or mark-and-archive).
- Episodes are written to
- Fixed inconsistent "A" button behavior for dual-arm robots.
- Added "success"/"failure" labeling with the
fail_episodeservice.
- Added support for UR robots.
- Added support for the Robotiq gripper.
- Fixed a bug in the
cycle_wrist_camhandler for RGB-only or heatmap-only encoder setups.
- Haptics when control error crosses a configured threshold, with a matching visual indicator in the UI.
- Added depth encoders to cameras: PNG encoder for lossless
16UC1depth, and a heatmap + H.264 encoder for visualizing depth in the Quest. - Fixed a track-labeling bug.
- Added the
cycle_wrist_cambutton handler. - Auto-stop tracks from being sent when not displayed in the UI.
- Support for up to 5 videos in the UI.
- Added depth-image collection from ZED and RealSense cameras.
- Permissions fixes.
- Bumped ZED SDK to 5.2 on all platforms.
- Formal support for JetPack 6.2.2 (
l4t 36.5).
- Added analog control of velocity scale for arm retargeting.
- Refactored the button system — all buttons and analog sources are remappable; analog sources can act as virtual buttons with rising/falling edge events.
- Added 6-DoF neck support.
- Web client UI improvements: unified HUD, episode start/stop, system state indicator, network quality indicator, RTT indicator.
- Reduced dependency footprint.
- Added Trossen WXAI support.
- Added XLeRobot neck support.
- Standard Bots and YAM support.
- ZED, ZED X, RealSense, and UVC camera support.
- JetPack 6.2 and amd64 support.
- Multi-host runtime.
- Dataset recording.