Skip to content

WIP release

Paul Nechifor edited this page Jun 24, 2026 · 7 revisions
banner_bordered_trimmed
The Agentive Operating System for Physical Space

Highlights

This is the Go2 Relocalization release.

160 commits, 17 contributors, 969 files changed.

A Go2 can now build a clean, loop-closed global map from its own recordings and relocalize against it on later runs. A new Rust voxel ray-tracing mapper with per-voxel normals stops moving objects and grazing rays from corrupting the map, so floors, stairs, and slopes stay dense and stable. PGO loop closure reconstructs a full global map in seconds from a sampled slice of memory2 recordings, and a dimos map tool builds, inspects, and exports the relocalization pointclouds. At runtime the robot loads a saved map, publishes the map -> world transform, and plans on the global costmap, with low-confidence matches filtered out and AprilTag/ArUco markers flowing through the same 3D pipeline as anchors.

⚠️ Breaking Changes

  • Foxglove viewer support removed (~15k lines); Rerun is the sole viewer backend. (#2122)
  • RPyC removed as a transport and dependency. (#2094)
  • Docker modules have been removed. (#2224)
  • Robot catalogue (RobotConfig) removed. Hardware metadata now comes from a _hardware.py factory. (#2550)
  • Manipulation viz config: visualization_backend / visualization_options replaced by a single visualization block (none / meshcat / viser). (#2475)

✨ New Features

Navigation

  • Per-platform nav blueprints: unitree-g1-nav-simple raytracing nav for the G1 (#2327), the i2rt FlowBase base from WASD teleop to full MID-360 + FastLio2 + click-to-drive (#2090), and alfred-nav for the new Alfred wheeled base (#2100). by @jeff-hykin, @mustafab0
  • 3D multi-level-surface (MLS) path planner that places nodes on map surfaces and plans over a cached graph, plus a path-planner-eval blueprint to score any planner against synthetic and mesh-derived scenarios. (#2310, #2302) by @aclauer
  • vis_throttle works out of the box and nav logging is much quieter (FastLIO, PGO, A*). (#2108, #2095) by @jeff-hykin

Mapping, SLAM & relocalization

  • Rust voxel ray-tracing mapper that clears stale voxels along rays so global maps handle moving objects (dimos run mid360-fastlio-ray-trace); per-voxel normals and a recency gate keep grazing rays from eroding floors, stairs, and slopes. (#2163, #2462, #2275) by @aclauer
  • Publishes a local_map slice of the global map around the robot for downstream nav. (#2257) by @aclauer
  • Pose-graph loop closure and global map reconstruction, plus a dimos map tool to visualize mem2 maps, run offline loop closure, and export relocalization pointclouds. (#2242, #2241, #2306) by @leshy
  • Go2 relocalization against a prebuilt map: load a saved map, publish map->world, and plan on the global costmap. (#2160) by @arkluc
  • Point-LIO native module as an alternative to FAST-LIO, plus a Virtual Mid-360 that records and replays Livox pcaps offline; FAST-LIO supports the same pcap record/replay. (#2486, #2498) by @jeff-hykin
  • PyO3 Python bindings and a mem2 transform pipeline for the Rust ray-tracer and 3D planner. (#2351, #2368) by @aclauer

Robot support

  • A-750 arm: initial support with a keyboard-teleop-a750 blueprint and gripper bindings. (#1911) by @adob
  • G1 GR00T whole-body walking policy as a first-class coordinator task (unitree-g1-groot-wbc); --simulation selects 500 Hz hardware vs 50 Hz Mujoco, and Twists on /g1/cmd_vel drive it. (#2300, #2239) by @Nabla7
  • Go2 move() now sends calibrated SPORT Move velocities (real m/s and rad/s) instead of raw joystick deflections. (#2567) by @mustafab0
  • Support for current Unitree firmware (G1 >= 1.5.1, Go2 >= 1.1.15) via an optional aes_128_key; connect() now fails fast with an actionable error instead of hanging. (#2476) by @KrishnaH96

Manipulation

  • Viser visualizer with a MoveIt-style plan/preview/execute UI; the loose viz options collapse into one validated visualization config. (#2475) by @TomCC7
  • Pink IK backend (kinematics_name=pink) for faster IK, and a visualization protocol routed through WorldMonitor with trajectory-timed preview playback. (#2481, #2460) by @TomCC7
  • Skills return a structured SkillResult (success, message, error_code, duration) with domain error enums, exposed to the LLM as JSON for structured retries; all 18 skills migrated. (#2091) by @mustafab0
  • xArm teleop syncs to the robot's real joint state at startup and moves to a default pose on activate/deactivate. (#2425) by @TomCC7

Teleoperation

  • Hosted teleoperation over WebRTC via a Cloudflare Realtime SFU: a HostedTeleopModule (cmd/state datachannels + camera video) that drops into existing blueprints, with recording and latency/jitter/loss stats (dimos run teleop-hosted-go2 teleop-recorder). (#2411) by @ruthwikdasyam
  • Stream a robot or sim camera (MuJoCo, RealSense, Go2) into the Quest VR headset during teleop. (#2198) by @ruthwikdasyam

Perception & fiducials

  • AprilTag 3D detector plus a camera-calibration CLI that generates camera_info.yaml, with a desk-marker-tf blueprint; calibration also works with the Go2 (live topic source, fisheye model). (#2107, #2123) by @bogwi, @leshy
  • dimos apriltag generates print-ready ArUco/AprilTag PDFs with packing and a size ruler. (#2037) by @leshy
  • ArUco detections emit standard vision_msgs/Detection3DArray, so markers flow through filtering, tracking, spatial memory, TF frames, and Rerun. (#2278) by @bogwi

memory2 & recording

  • MCAP/DDS as a memory2 store, so Go2 DDS recordings query like any mem2 stream and render to .rrd. (#2314) by @leshy
  • Time windowing on Stream (from_time/to_time, from_timestamp/to_timestamp). (#2315) by @leshy
  • Recorder overwrite modes (overwrite/backup/error, default backup) so re-recording no longer silently clobbers prior runs. (#2248) by @arkluc

Core, modules & tooling

  • Rust module API reworked with proc macros (declare inputs/outputs/setup/teardown as attributes) and a faster runtime; crates renamed to dimos-module / dimos-module-macros. (#2080) by @aclauer
  • native_config macro and a ModuleConfig validation trait cut native-module config boilerplate; native modules honor real log levels and Rust modules use tracing driven by the dimos log level. (#2503, #2325, #2235) by @aclauer
  • Exclusive capabilities for agent skills: @skill(uses=[...]) plus a capability registry so the MCP server refuses or briefly waits on conflicting skills (e.g. two movement commands at once). (#2279) by @paul-nechifor
  • dedicated_worker lets a heavy module claim an exclusive worker instead of sharing one. (#2185) by @paul-nechifor
  • robot_id in GlobalConfig (--robot-id / ROBOT_ID) so multiple robots can share one API key for hosted teleop. (#2490) by @spomichter
  • TF lookups can wait for not-yet-available transforms via forward_tolerance. (#2229) by @arkluc
  • New lightweight dimsim simulator selectable with --simulation=dimsim. (#1735) by @paul-nechifor

🐛 Bug Fixes

  • FAST-LIO Mid-360 scan voxel default lowered to 0.1 m to stop Go2 odometry divergence (notably on stairs). (#2466) by @jeff-hykin
  • Global mapper VRAM leak fixed by releasing Open3D's CUDA cache per frame. (#2031) by @leshy
  • RealSense color-only mode (enable_depth=False) no longer crashes; falls back to an identity color TF. (#2561) by @ruthwikdasyam
  • Native module builds fixed on Linux, and native modules now compile during the build step before replay starts. (#2459, #2207) by @jeff-hykin
  • LCM segfault fixed via a patched lcm-dimos-fork; dropped LCM packets now surface as warnings with larger default buffers for high lidar throughput. (#2343, #2200) by @paul-nechifor, @jeff-hykin
  • Packaging: runtime data files (yaml/json/urdf/...) reliably shipped in the wheel, and a wrongly-dropped dependency restored. (#2104, #2551) by @paul-nechifor
  • --simulation flag restored and backwards compatible (bare, or =mujoco / =dimsim). (#2103) by @paul-nechifor
  • RealSense switched to realsense-extended with Jetson wheels, fixing RealSense on the G1's Jetson. (#2322) by @jeff-hykin
  • Drone agentic blueprint startup fixed (DroneTrackingModule / OsmSkill accept wiring kwargs). (#2345) by @knikou01
  • CUDA-only security demo removed from the Go2 agentic flow that was breaking it everywhere. (#2251) by @spomichter
  • Manipulation tears down cleanly when planning init fails; keyboard teleop accepts LfsPath/Path model paths. (#2520, #2186) by @TomCC7, @mustafab0

⚡ Performance

  • 3D MLS planner builds its graph artifact in ~200 ms on a 2M-voxel map and plans in ~0.28 ms. (#2310) by @aclauer
  • Rust module runtime sped up via separate publish/receive tokio tasks and constant-time routing. (#2080) by @aclauer
  • Removed ~1 GB of unused Python dependencies. (#2539) by @paul-nechifor

🔒 Security

  • Upgrade vulnerable dependencies flagged by Dependabot. (#2040) by @paul-nechifor
  • Enable uv cooldown to avoid immediately-published package versions (supply-chain protection). (#2115) by @Dreamsorcerer

👥 New Contributors

Full Changelog: https://github.com/dimensionalOS/dimos/compare/v0.0.12...v0.0.13

Clone this wiki locally