Skip to content

Add Antim Labs sim integration module (dimsim)#1387

Open
Viswa4599 wants to merge 14 commits intodevfrom
antim/sim-integration
Open

Add Antim Labs sim integration module (dimsim)#1387
Viswa4599 wants to merge 14 commits intodevfrom
antim/sim-integration

Conversation

@Viswa4599
Copy link
Collaborator

Summary

  • Add native DimSim bridge (NativeModule) and nav blueprint for browser-based 3D simulation with LCM transport
  • Uses globally installed dimsim CLI (jsr:@antim/dimsim)
  • DimSimBridge manages the dimsim subprocess, DimSimTF publishes transform tree from odom
  • sim-nav blueprint wires bridge + TF + voxel mapping + costmap + A* planner + frontier exploration

Usage

deno install -gAf --unstable-net jsr:@antim/dimsim
dimsim setup && dimsim scene install apt
sudo route add -net 224.0.0.0/4 -interface lo0  # macOS multicast
dimos run sim-nav --viewer-backend rerun

TODO

  • General eval workflow integration
  • Test headless integration

spomichter and others added 14 commits January 23, 2026 07:34
… Unitree Go2 Navigation & Exploration Beta

Pre-Release v0.0.8: Unitree Go2 Navigation & Exploration Beta, Transport Updates, Documentation updates, Rerun fixes, Person follow, Readme updates

## What's Changed
* Small docs clarification about stream getters by @leshy in #1043
* Fix split view on wide monitors by @jeff-hykin in #1048
* Docs: Install & Develop  by @jeff-hykin in #1022
* Add uv to nix and fix resulting problems by @jeff-hykin in #1021
* v0.0.8 by @paul-nechifor in #1050
* Style changes in docs by @paul-nechifor in #1051
* Revert "Add uv to nix and fix resulting problems" by @leshy in #1053
* Transport benchmarks + Raw ros transport by @leshy in #1038
* feat: default to rerun-web and auto-open browser on startup (browser … by @Nabla7 in #1019
* bbox detections visual check by @leshy in #1017
* fix: only auto-open browser for rerun-web viewer backend by @Nabla7 in #1066
* move slow tests to integration by @paul-nechifor in #1063
* Streamline transport start/stop methods by @Kaweees in #1062
* Person follow skill with EdgeTAM by @paul-nechifor in #1042
* fix: increase costmap floor z_offset to avoid z-fighting by @Nabla7 in #1073
* Fixed issue #1074 by @alexlin2 in #1075
* ROS transports initial by @leshy in #1057
* Fix System Config Values for LCM on MacOS and Refactor by @jeff-hykin in #1065
* SHM Transport basic fixes by @leshy in #1041
* commented out Mem Transport test case by @leshy in #1077
* Docs/advanced streams update 2 by @leshy in #1078
* Fix more tests by @paul-nechifor in #1071
* feat: navigation docker updates from bona_local_dev by @baishibona in #1081
* Fix missing dependencies by @Kaweees in #1085
* Release readme fixes by @spomichter in #1076

## New Contributors
* @baishibona made their first contribution in #1081

**Full Changelog**: v0.0.7...v0.0.8
…HTTPS from SSH, get_data change, LFS changes

v0.0.9 Release Patch: Git clone change to HTTPS from SSH, get_data change, LFS changes
Release v0.0.10: Manipulation Stack, MuJoCo Simulation, DDS Transport, Web and Native Visualization via Rerun


## Highlights

88+ commits, 20 contributors, 700+ files changed.

The TLDR: **a complete manipulation stack**, **MuJoCo simulation**, **DDS transport**, and **a rewritten visualization pipeline**. Agents are no longer bolted on top — they're refactored as native modules with direct stream access. The entire ROS message dependency has been removed from core DimOS, and we've added VR, phone, and arm teleoperation stacks. You can now vibecode a pick-and-place task from natural language to motor commands. Installation has been significantly streamlined — no more direnv, simpler setup, and the web viewer is now the default.

---

## 🚀 New Features

### Simulation
- **MuJoCo simulation module** — Run any DimOS blueprint in simulation with no hardware. Supports xArm and Unitree embodiments, parses MJCF/URDF for robot properties, monotonic clock timing (no `time.sleep`). `dimos --simulation run unitree-go2` ([#1035](#1035)) by @jca0
- **Simulation teleop blueprints** — Added simulation teleop blueprints for Piper, xArm6, and xArm7. ([#1308](#1308)) by @mustafab0

### Manipulation
- **Modular manipulation stack** — Full planning stack with Drake: FK/IK solvers (Jacobian + Drake optimization), RRT path planning, world model with obstacle monitoring, multi-robot management. xArm6/7 and Piper support. ([#1079](#1079)) by @mustafab0
- **Joint servo and cartesian controllers** — Joint position/velocity controllers and cartesian IK task with Pinocchio solver. PoseStamped stream input for real-time control. ([#1116](#1116)) by @mustafab0
- **GraspGen integration** — Grasp generation via Docker-hosted GPU model. Lazy container startup, thread-safe init, RPC `generate_grasps()` returns ranked PoseArray. ([#1119](#1119), [#1234](#1234)) by @JalajShuklaSS
- **Gripper control** — Gripper RPC methods on control coordinator, exposed adapter property for custom implementations. ([#1213](#1213)) by @mustafab0
- **Detection3D and Object support** — Object input topics, TF support on manipulation module, pointcloud-to-convex-hull for Drake imports. ([#1236](#1236)) by @mustafab0
- **Agentic pick and place** — Reimplemented manipulation skills for agent-driven pick-and-place workflows. ([#1237](#1237)) by @mustafab0

### Teleoperation
- **Quest VR teleoperation** — Full WebXR + Deno bridge stack. Quest controller data (pose, trigger, grip) streamed to DimOS modules. Monitor-style locking for control loops. ([#1215](#1215)) by @ruthwikdasyam
- **Phone teleoperation** — Control Go2 from your phone with a web-based teleop interface. ([#1280](#1280)) by @ruthwikdasyam
- **Arm teleop with Pinocchio IK** — Single and dual arm teleoperation using Pinocchio inverse kinematics. Blueprints for xArm, Piper, and dual configurations. ([#1246](#1246)) by @ruthwikdasyam

### Transports & Infrastructure
- **DDS transport protocol** — CycloneDDS transport with configurable QoS (high-throughput and reliable profiles). Optional install, benchmark integration. ([#1174](#1174)) by @Kaweees
- **Pubsub pattern subscriptions** — Glob and regex pattern matching for topic subscriptions. `subscribe_all()` for bridge-style consumers. Topic type encoding in channel strings (`/topic#module.ClassName`). ([#1114](#1114)) by @leshy
- **LCM raw bytes passthrough** — Skip `lcm_encode()` when message is already bytes. ([#1223](#1223)) by @leshy
- **Unified TimeSeriesStore** — Pluggable backends (InMemory, SQLite, Pickle, PostgreSQL) with SortedKeyList for O(log n) operations. Replaces the old replay system and TimestampedCollection. Collection API with slice, range, and streaming methods. ([#1080](#1080)) by @leshy
- **DimosROS benchmark tests** — Benchmark suite for ROS transport performance. ([#1087](#1087)) by @leshy

### Navigation
- **FASTLIO2 support** — Hardware-verified localization with arm64 support. Docker deployment with FAR Planner, terrain analysis, and bagfile playback mode. Builds or-tools from source on arm64. ([#1149](#1149)) by @baishibona
- **Native Livox + FASTLIO2 module** — First-class DimOS native module for Livox Mid-360 lidar with FASTLIO2 localization. ([#1235](#1235)) by @leshy

### Visualization
- **RerunBridge module and CLI** — New bridge that subscribes to all LCM messages and logs those with `to_rerun()` to Rerun viewer. GlobalConfig singleton, web viewer support. Replaces the old rerun initialization system. ([#1154](#1154)) by @leshy
- **Webcam rerun visualization** — Camera module logs to Rerun with pinhole projection for 3D visualization. ([#1117](#1117)) by @ruthwikdasyam
- **Default viewer switched to rerun-web** — Browser-based viewer is now the default for broader compatibility. No native viewer install needed. ([#1324](#1324)) by @spomichter

### Agents
- **Agent refactor** — Restructured agent module with cleaner imports and global config integration. ([#1211](#1211)) by @paul-nechifor
- **Timestamp knowledge** — Agents now have timestamp awareness in prompts for temporal reasoning. ([#1093](#1093)) by @ClaireBookworm
- **Observe skill** — Go2 can now observe (capture and describe) its environment via agent skill. ([#1109](#1109)) by @paul-nechifor

### Platform & Hardware
- **G1 without ROS** — Unitree G1 blueprints decoupled from ROS dependency. Lazy imports for fast startup. ([#1221](#1221)) by @jeff-hykin
- **ARM (aarch64) support** — DimOS runs on ARM hardware. Platform-conditional dependencies, open3d source builds for arm64. ([#1229](#1229)) by @jeff-hykin
- **Universal joint/hardware schema** — `HardwareComponent` dataclass with `JointState`, `JointName` type aliases. Backend registry with auto-discovery for SDK adapters. ([#1040](#1040), [#1067](#1067)) by @mustafab0

---

## 🔧 Improvements

- **Optional Dask** — Start without Dask using `--no-dask` flag. Startup time reduced from ~60s to ~45s. ([#1111](#1111), [#1232](#1232)) by @paul-nechifor
- **RPC rework** — Renamed `ModuleBlueprint` → `_BlueprintAtom`, `ModuleBlueprintSet` → `Blueprint`, `ModuleConnection` → `Stream`. Added `ModuleRef`, improved type hints throughout. ([#1143](#1143)) by @jeff-hykin
- **Image class simplification** — Rewritten as pure NumPy dataclass. Removed CUDA backend, unused methods (solve_pnp, csrt_tracker), and image_impls/ directory. ([#1161](#1161)) by @leshy
- **Odometry message cleanup** — Simplified Odometry message type. ([#1256](#1256)) by @leshy
- **Remove all ROS message dependencies** — Purged ROS message types from core DimOS. Refactored rosnav to use ROSTransport. Removed dead ROS bridge code. ([#1230](#1230)) by @alexlin2
- **Removed bad function serialization** — Eliminated unnecessary serialization of Python functions. ([#1121](#1121)) by @paul-nechifor
- **Benchmark IEC units** — Switched bandwidth benchmarks from SI to IEC units for accuracy. ([#1147](#1147)) by @leshy
- **Pubsub typing improvements** — Thread-safety locks on `subscribe_new_topics` and `subscribe_all`. Proper type params across pubsub stack. ([#1153](#1153)) by @leshy
- **Autogenerated blueprint list** — Blueprints are now auto-discovered and listed. ([#1100](#1100)) by @paul-nechifor
- **Generic Buttons message** — Renamed `QuestButtons` to `Buttons` with generic field names for cross-platform teleop. ([#1261](#1261)) by @ruthwikdasyam
- **Dev container uses ros-dev image** — `./bin/dev` now runs the ROS-enabled dev image. ([#1170](#1170)) by @leshy
- **LSP support** — Added python-lsp-server and python-lsp-ruff to dev dependencies. ([#1169](#1169)) by @leshy
- **Lazy-load pyrealsense2** — RealSense camera module uses lazy imports to avoid errors in simulation environments without the SDK. ([#1309](#1309)) by @spomichter
- **Removed unused mmcv and mmengine** — Dead Detic dependencies removed, eliminating slow source builds from install. ([#1319](#1319)) by @spomichter
- **Simplified installation** — Removed direnv requirement, streamlined install instructions across all platforms. ([#1315](#1315)) by @spomichter
- **DDS extra excluded from --all-extras** — `cyclonedds` requires a source build, so `dds` is now excluded from `uv sync --all-extras` by default. ([#1318](#1318)) by @spomichter
- **Nix pre-commit skip** — Skip pre-commit install if hooks already exist. ([#1162](#1162)) by @leshy
- **Removed base-requirements** — Consolidated dependency management. ([#1098](#1098)) by @paul-nechifor
- **Removed old graspnet** — Cleaned up deprecated graspnet version. ([#1248](#1248)) by @paul-nechifor
- **Code cleanup** — Removed `tofix` markers ([#1216](#1216)), fixed ruff issues ([#1112](#1112)), removed old README_installation.md ([#1101](#1101)) by @paul-nechifor

---

## 🐛 Bug Fixes

- Fix LFS updating (move from .local to venv) ([#1090](#1090)) by @jeff-hykin
- Launch hotfixes: git clone HTTPS, get_data main branch ([#1091](#1091)) by @spomichter
- Fix camera demo not showing in Rerun ([#1148](#1148)) by @jeff-hykin
- Default to rerun native viewer ([#1099](#1099)) by @Nabla7
- Fix exploration blocking agent loop ([#1258](#1258)) by @paul-nechifor
- Fix person-follow blocking agent loop ([#1278](#1278)) by @paul-nechifor
- Skip metric3d tests on unsupported xformers GPUs (Blackwell compute capability >9.0) ([#1225](#1225)) by @leshy
- Fix manipulation tests ([#1218](#1218), [#1247](#1247)) by @jeff-hykin, @paul-nechifor
- Fix control coordinator e2e test ([#1212](#1212)) by @mustafab0
- Fix xarm7-sim broken e2e tests ([#1294](#1294)) by @paul-nechifor
- Pin langchain to restore supported providers ([#1241](#1241)) by @spomichter
- Fix missing library dependencies in Nix flake ([#1240](#1240)) by @Kaweees
- Fix discord invite link ([#1122](#1122)) by @spomichter
- macOS edgecase fix ([#1096](#1096)) by @jeff-hykin
- Fix second N in logo ([#1250](#1250)) by @jeff-hykin
- Fix Unitree Go2 minor issues ([#1307](#1307)) by @paul-nechifor
- Fix broken tests ([#1305](#1305)) by @ruthwikdasyam
- Fix `uv sync` for some macOS systems ([#1322](#1322)) by @jeff-hykin
- Fix mmcv install ([#1313](#1313)) by @paul-nechifor
- Fix mypy issues ([#1150](#1150), [#1167](#1167), [#1257](#1257)) by @leshy, @paul-nechifor, @jeff-hykin
- Fix Nix install uv pip extras ([#1321](#1321)) by @spomichter

---

## 📚 Documentation

- **Major docs overhaul** — New README with feature grid, hardware table, quickstart. Navigation, transports, data streams, and agent docs. ([#1295](#1295)) by @leshy
- **Day 1 docs** — Comprehensive getting started guide, development docs, contributing guide, architecture overview. Executable blueprint docs via md-babel-py. ([#1064](#1064)) by @jeff-hykin
- **Arm integration guide** — How-to for integrating new robotic arms with DimOS. ([#1238](#1238)) by @mustafab0
- **MCP documentation update** — Updated MCP install and usage instructions. ([#1251](#1251)) by @Kaweees
- **Docker docs** — First pass on Docker deployment documentation. ([#1151](#1151)) by @leshy
- **Transports documentation** — Encode/decode mixins, SHM examples, ROS/DDS transport docs. ([#1107](#1107)) by @leshy
- **Rerun API examples** — Updated examples for the new RerunBridge API. ([#1262](#1262)) by @jeff-hykin
- **PR template** added ([#1172](#1172)) by @christiefhyang
- **Simplified install instructions** — Removed direnv, streamlined across all platforms. ([#1315](#1315)) by @spomichter
- **Python example restored** — Added back the Python usage example. ([#1317](#1317)) by @jeff-hykin
- **Nix install updated** — Replaced uv with pip for Nix compatibility. ([#1326](#1326)) by @ruthwikdasyam
- **README improvements** ([#1311](#1311)) by @paul-nechifor
- **Simplified writing docs** — Consolidated writing_docs to a single markdown file. ([#1254](#1254)) by @jeff-hykin

---

## 🏗️ CI & Build

- **ci-complete gate** — Dynamic branch protection via single aggregated status check. MD-only PRs no longer blocked. ([#1279](#1279)) by @spomichter
- **Path-based test filtering** — Test jobs fully skip (no container spin-up) when no relevant code changed. ([#1284](#1284), [#1286](#1286)) by @spomichter
- **Navigation docker build workflow** — CI builds for the ROS navigation stack. ([#1259](#1259)) by @spomichter
- **CUDA test marker** — `@pytest.mark.cuda` for GPU-dependent tests. ([#1220](#1220)) by @jeff-hykin
- **e2e test marker** — Marked end-to-end tests for selective CI runs. ([#1110](#1110)) by @paul-nechifor
- **pytest stdin fix** — Added `-s` to default addopts for LCM autoconf compatibility. ([#1320](#1320)) by @spomichter

---

## ⚠️ Breaking Changes

- **RPC renames**: `ModuleBlueprint` → `_BlueprintAtom`, `ModuleBlueprintSet` → `Blueprint`, `ModuleConnection` → `Stream` ([#1143](#1143))
- **Image class rewrite**: `CudaImage` and `NumpyImage` removed. Image is now a pure NumPy dataclass. Methods like `solve_pnp`, `csrt_tracker`, `from_depth`, `to_depth_meters` removed. ([#1161](#1161))
- **ROS messages removed from core**: All `to_ros`/`from_ros` conversion methods removed. Use `ROSTransport` instead. ([#1230](#1230))
- **QuestButtons → Buttons**: Renamed with generic field names. ([#1261](#1261))
- **RerunBridge replaces old rerun init**: `dimos.dashboard.rerun_init` removed. Use `RerunBridgeModule` or the `rerun-bridge` CLI. ([#1154](#1154))
- **Unitree directory restructuring**: `unitree_go2` → `unitree/go2`, `unitree_g1` → `unitree/g1`. Blueprint names updated. ([#1221](#1221))
- **Default viewer is now rerun-web**: Use `--viewer-backend rerun` to restore native viewer. ([#1324](#1324))

---

## Quickstart

```bash
# Install
uv pip install dimos[base,unitree]

# Try it (no hardware needed)
# NOTE: First run downloads ~2.4 GB from LFS
dimos --replay run unitree-go2

# Simulate
uv pip install dimos[base,unitree,sim]
dimos --simulation run unitree-go2
```

---

## New Contributors 🎉

- @ruthwikdasyam — Quest VR teleoperation, phone teleop, arm teleop, webcam rerun viz
- @JalajShuklaSS — GraspGen integration
- @jca0 — MuJoCo simulation module
- @christiefhyang — PR template

---

**Full Changelog**: [v0.0.9...v0.0.10](v0.0.9...v0.0.10)
docs(go2): add getting started guide (#1339)
…sts (#1350)

Busy-wait loops with no timeout could hang forever. Use threading.Event
for efficient blocking with 1s timeouts that fail clearly on expiry.
* added twist base protocol spec

* created mock twist base adapter

* added twistbase ConnectedHardware type

* updated coordinator to support twist messages

* added flowbase adapter

* added blueprint and test script for testing

* mypy test fixes

* fix  validates the adapter/hardware-type pairing upfront with a clear error

* fixed redundant blueprint assignments

* fixed mypy type ignore flags

* added thread locks to velocity read write for flowbase adapter

* fix mypy errors: portal import-untyped and adapter property override

* added echo cmd vel script back for testing will be deprecated

* removed echo_cmd_vel test script
…ntegration (#1351)

Move adding_a_custom_arm.md from docs/development/ to
docs/capabilities/manipulation/ where it belongs. Remove the outdated
depth_camera_integration.md and fix resulting broken links.
* Moving towards deprecating `Agent`. It has been efectivelly split between `McpClient` and `McpServer`.
* McpServer exposes all the `@skill` functions as MCP tools.
* McpClient starts a langchain agent which coordinates calling tools from McpServer.
* McpClient is not strictly necessary. You can register the MCP server in claude code and make it call tools.
* McpClient also listens to `/human_input` so it can be used through the `humancli` like `Agent` can.
* added go2 preflight checklist

* typo

---------

Co-authored-by: Paul Nechifor <paul@nechifor.net>
- Add docs/platforms/humanoid/g1/index.md with full G1 guide
- Update README.md to link G1 to new docs instead of todo.md
- Covers: installation, simulation, real robot, agentic control,
  arm gestures, movement modes, keyboard teleop, all blueprints

Closes DIM-576
…1348)

* feat(doclinks): validate and resolve .md links, fix broken doc links

Add Pattern 3 to doclinks that validates existing .md links in docs:
- Resolves relative .md paths to absolute links
- Validates absolute .md links exist on disk
- Falls back to doc_index search for broken links with disambiguation
- Handles index.md files by searching parent dir name
- Scores candidates by directory overlap + filename match

Delete duplicate docs/usage/transports.md (identical to transports/index.md).

Fixes 5 broken links across docs/ (agents/docs/index.md, capabilities/
navigation/readme.md, usage/lcm.md).

* refactor
Add native DimSim bridge and nav blueprint for browser-based 3D
simulation with LCM transport. Uses globally installed dimsim
CLI (https://jsr.io/@antim/dimsim).

- DimSimBridge (NativeModule) manages the dimsim subprocess
- DimSimTF publishes transform tree from odom
- sim-nav blueprint wires bridge + TF + voxel mapping + A* + frontier exploration

Usage: dimos run sim-nav

TODO:
- General eval workflow integration
- Test headless integration
result = await handle_request(body, request.app.state.skills, request.app.state.rpc_calls)
if result is None:
return Response(status_code=204)
return JSONResponse(result)

Check warning

Code scanning / CodeQL

Information exposure through an exception Medium

Stack trace information
flows to this location and may be exposed to an external user.

Copilot Autofix

AI 1 day ago

In general, to fix this issue, the server should avoid returning raw exception information (e) to the client. Instead, it should log detailed error information on the server and send a generic, non-sensitive message in the JSON-RPC response. This preserves debuggability via logs while preventing exposure of internal state, stack traces, or implementation details to external users.

The single best fix here is to modify the _handle_tools_call error handling so that the user-facing message does not include e. We keep the logger.exception("Error running tool", tool_name=name, exc_info=True) call, which already logs the stack trace, and change the returned text to a generic message such as Error running tool '<name>' or a fully generic “An internal error occurred while running the tool.” This change is localized to the except block in _handle_tools_call and does not alter any other functionality, JSON-RPC structure, or control flow.

Concretely:

  • In dimos/agents/mcp/mcp_server.py, within _handle_tools_call, replace the line:
    • return _jsonrpc_result_text(req_id, f"Error running tool '{name}': {e}")
  • With a version that omits e, e.g.:
    • return _jsonrpc_result_text(req_id, f"Error running tool '{name}'.")
      or a similarly generic phrasing.
  • No new imports, methods, or definitions are needed; the existing logging and helper functions (_jsonrpc_result_text) are reused.
Suggested changeset 1
dimos/agents/mcp/mcp_server.py

Autofix patch

Autofix patch
Run the following command in your local git repository to apply this patch
cat << 'EOF' | git apply
diff --git a/dimos/agents/mcp/mcp_server.py b/dimos/agents/mcp/mcp_server.py
--- a/dimos/agents/mcp/mcp_server.py
+++ b/dimos/agents/mcp/mcp_server.py
@@ -102,7 +102,7 @@
         result = await asyncio.get_event_loop().run_in_executor(None, lambda: rpc_call(**args))
     except Exception as e:
         logger.exception("Error running tool", tool_name=name, exc_info=True)
-        return _jsonrpc_result_text(req_id, f"Error running tool '{name}': {e}")
+        return _jsonrpc_result_text(req_id, f"Error running tool '{name}'.")
 
     if result is None:
         return _jsonrpc_result_text(req_id, "It has started. You will be updated later.")
EOF
@@ -102,7 +102,7 @@
result = await asyncio.get_event_loop().run_in_executor(None, lambda: rpc_call(**args))
except Exception as e:
logger.exception("Error running tool", tool_name=name, exc_info=True)
return _jsonrpc_result_text(req_id, f"Error running tool '{name}': {e}")
return _jsonrpc_result_text(req_id, f"Error running tool '{name}'.")

if result is None:
return _jsonrpc_result_text(req_id, "It has started. You will be updated later.")
Copilot is powered by AI and may make mistakes. Always verify output.
@greptile-apps
Copy link
Contributor

greptile-apps bot commented Mar 1, 2026

Greptile Summary

This PR adds DimSim browser-based 3D simulation integration with LCM transport, but also bundles several unrelated changes that should be in separate PRs.

DimSim Integration (main feature):

  • New DimSimBridge NativeModule manages dimsim subprocess lifecycle, publishes sensor data (odom, lidar, images) directly to LCM
  • New DimSimTF module consumes odometry and publishes transform tree (world → base_link → camera/lidar frames) plus camera intrinsics
  • Two blueprints: sim-basic (commented out) and sim-nav (registered) that wire bridge + TF + mapping + navigation
  • Requires globally installed dimsim CLI or falls back to local development setup

Unrelated changes bundled in this PR:

  • MCP refactoring: Moved dimos/protocol/mcp/ to dimos/agents/mcp/ with new client/server implementations (+250, +197 lines) and comprehensive tests
  • Drive train adapters: New FlowBase adapter (+206 lines) and mock twist base adapter (+137 lines) with control coordinator integration
  • File deletions: Removed environment.py (-178), metric3d.py (-187), metric3d ONNX file, and depth camera integration docs (-147)
  • Documentation tooling: Enhanced doclinks.py with better path matching (+205 lines) and new test suite (+255 lines)

Key issues:

  • Hardcoded path depth in bridge.py:34 using .parents[4] is fragile and will break if file moves
  • Timestamp comparison in tf_module.py:120 uses <= which incorrectly drops messages with identical timestamps (not just out-of-order)
  • sim-basic blueprint and some sim modules commented out in all_blueprints.py - unclear if intentional

Confidence Score: 3/5

  • PR mixes multiple unrelated features and has logic issues that need fixing before merge
  • Score reduced due to: (1) PR scope issue - bundles DimSim integration with unrelated MCP refactoring, drive train adapters, and file deletions, making review difficult and increasing merge risk; (2) two logic bugs in core sim code that will cause runtime issues; (3) commented-out code in registry suggests incomplete integration
  • Pay close attention to dimos/robot/sim/bridge.py and dimos/robot/sim/tf_module.py - both have logic issues that need fixing

Important Files Changed

Filename Overview
dimos/robot/sim/bridge.py New DimSim bridge module with subprocess lifecycle management; hardcoded path depth at line 34 is fragile
dimos/robot/sim/tf_module.py New TF publisher for DimSim with odometry handling; timestamp comparison at line 120 may incorrectly drop valid messages
dimos/robot/sim/blueprints/nav/sim_nav.py Simple blueprint composition wiring sim_basic with mapping and navigation components
dimos/agents/mcp/mcp_client.py New MCP client implementation moved from protocol package to agents package
dimos/hardware/drive_trains/flowbase/adapter.py New FlowBase adapter for holonomic base control via Portal RPC
dimos/control/blueprints.py Added twist base and mobile manipulation blueprints

Sequence Diagram

sequenceDiagram
    participant User
    participant DimSimBridge
    participant Deno/dimsim CLI
    participant LCM
    participant DimSimTF
    participant Navigation

    User->>DimSimBridge: start() blueprint
    DimSimBridge->>DimSimBridge: _resolve_paths()
    DimSimBridge->>Deno/dimsim CLI: spawn subprocess
    
    loop Simulation Loop
        Deno/dimsim CLI->>LCM: publish odom, lidar, images
        LCM->>DimSimTF: receive odom
        DimSimTF->>DimSimTF: _on_odom() - check timestamp
        DimSimTF->>LCM: publish TF transforms
        DimSimTF->>LCM: publish camera_info (1 Hz)
        
        Navigation->>LCM: publish cmd_vel
        LCM->>Deno/dimsim CLI: receive cmd_vel
    end
    
    User->>DimSimBridge: stop()
    DimSimBridge->>Deno/dimsim CLI: terminate subprocess
Loading

Last reviewed commit: c3d3b59

Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

76 files reviewed, 3 comments

Edit Code Review Agent Settings | Greptile


from dataclasses import dataclass, field
from pathlib import Path
import shutil
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hardcoded path depth .parents[4] is fragile - if this file moves or the directory structure changes, this breaks

Suggested change
import shutil
repo_root = Path(__file__).resolve()
while repo_root.parent != repo_root:
if (repo_root / ".git").exists() or (repo_root / "pyproject.toml").exists():
break
repo_root = repo_root.parent

Comment on lines +120 to +121
ts=odom.ts,
)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

using <= will drop messages with identical timestamps, not just out-of-order ones - if two messages arrive with the same timestamp (e.g., due to clock precision), the second will be incorrectly dropped

Suggested change
ts=odom.ts,
)
# Drop out-of-order messages (UDP multicast doesn't guarantee ordering)
if pose.ts < self._odom_last_ts:

Comment on lines +60 to +61
# "sim-basic": "dimos.robot.sim.blueprints.basic.sim_basic:sim_basic",
"sim-nav": "dimos.robot.sim.blueprints.nav.sim_nav:sim_nav",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

clarify whether sim-basic blueprint and sim modules being commented out is intentional or work-in-progress

@spomichter spomichter changed the base branch from main to dev March 1, 2026 14:05
@spomichter
Copy link
Contributor

@Viswa4599 Mind rebasing to fix the diff

@leshy
Copy link
Contributor

leshy commented Mar 1, 2026

@Viswa4599 Mind rebasing to fix the diff

did it here #1390

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants