Skip to content

Comments

Release v0.0.10: Manipulation Stack, MuJoCo Simulation, DDS Transport, Web and Native Visualization via Rerun#1336

Merged
spomichter merged 105 commits intomainfrom
dev
Feb 21, 2026
Merged

Release v0.0.10: Manipulation Stack, MuJoCo Simulation, DDS Transport, Web and Native Visualization via Rerun#1336
spomichter merged 105 commits intomainfrom
dev

Conversation

@spomichter
Copy link
Contributor

@spomichter spomichter commented Feb 21, 2026

Dimensional

Release v0.0.10

The Agentive Operating System for Generalist Robotics

Discord


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) by @jca0
  • Simulation teleop blueprints — Added simulation teleop blueprints for Piper, xArm6, and xArm7. (#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) 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) by @mustafab0
  • GraspGen integration — Grasp generation via Docker-hosted GPU model. Lazy container startup, thread-safe init, RPC generate_grasps() returns ranked PoseArray. (#1119, #1234) by @JalajShuklaSS
  • Gripper control — Gripper RPC methods on control coordinator, exposed adapter property for custom implementations. (#1213) by @mustafab0
  • Detection3D and Object support — Object input topics, TF support on manipulation module, pointcloud-to-convex-hull for Drake imports. (#1236) by @mustafab0
  • Agentic pick and place — Reimplemented manipulation skills for agent-driven pick-and-place workflows. (#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) by @ruthwikdasyam
  • Phone teleoperation — Control Go2 from your phone with a web-based teleop interface. (#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) by @ruthwikdasyam

Transports & Infrastructure

  • DDS transport protocol — CycloneDDS transport with configurable QoS (high-throughput and reliable profiles). Optional install, benchmark integration. (#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) by @leshy
  • LCM raw bytes passthrough — Skip lcm_encode() when message is already bytes. (#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) by @leshy
  • DimosROS benchmark tests — Benchmark suite for ROS transport performance. (#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) by @baishibona
  • Native Livox + FASTLIO2 module — First-class DimOS native module for Livox Mid-360 lidar with FASTLIO2 localization. (#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) by @leshy
  • Webcam rerun visualization — Camera module logs to Rerun with pinhole projection for 3D visualization. (#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) by @spomichter

Agents

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

Platform & Hardware

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

🔧 Improvements

  • Optional Dask — Start without Dask using --no-dask flag. Startup time reduced from ~60s to ~45s. (#1111, #1232) by @paul-nechifor
  • RPC rework — Renamed ModuleBlueprint_BlueprintAtom, ModuleBlueprintSetBlueprint, ModuleConnectionStream. Added ModuleRef, improved type hints throughout. (#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) by @leshy
  • Odometry message cleanup — Simplified Odometry message type. (#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) by @alexlin2
  • Removed bad function serialization — Eliminated unnecessary serialization of Python functions. (#1121) by @paul-nechifor
  • Benchmark IEC units — Switched bandwidth benchmarks from SI to IEC units for accuracy. (#1147) by @leshy
  • Pubsub typing improvements — Thread-safety locks on subscribe_new_topics and subscribe_all. Proper type params across pubsub stack. (#1153) by @leshy
  • Autogenerated blueprint list — Blueprints are now auto-discovered and listed. (#1100) by @paul-nechifor
  • Generic Buttons message — Renamed QuestButtons to Buttons with generic field names for cross-platform teleop. (#1261) by @ruthwikdasyam
  • Dev container uses ros-dev image./bin/dev now runs the ROS-enabled dev image. (#1170) by @leshy
  • LSP support — Added python-lsp-server and python-lsp-ruff to dev dependencies. (#1169) by @leshy
  • Lazy-load pyrealsense2 — RealSense camera module uses lazy imports to avoid errors in simulation environments without the SDK. (#1309) by @spomichter
  • Removed unused mmcv and mmengine — Dead Detic dependencies removed, eliminating slow source builds from install. (#1319) by @spomichter
  • Simplified installation — Removed direnv requirement, streamlined install instructions across all platforms. (#1315) by @spomichter
  • DDS extra excluded from --all-extrascyclonedds requires a source build, so dds is now excluded from uv sync --all-extras by default. (#1318) by @spomichter
  • Nix pre-commit skip — Skip pre-commit install if hooks already exist. (#1162) by @leshy
  • Removed base-requirements — Consolidated dependency management. (#1098) by @paul-nechifor
  • Removed old graspnet — Cleaned up deprecated graspnet version. (#1248) by @paul-nechifor
  • Code cleanup — Removed tofix markers (#1216), fixed ruff issues (#1112), removed old README_installation.md (#1101) by @paul-nechifor

🐛 Bug Fixes


📚 Documentation

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

🏗️ CI & Build

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

⚠️ Breaking Changes

  • RPC renames: ModuleBlueprint_BlueprintAtom, ModuleBlueprintSetBlueprint, ModuleConnectionStream (#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)
  • ROS messages removed from core: All to_ros/from_ros conversion methods removed. Use ROSTransport instead. (#1230)
  • QuestButtons → Buttons: Renamed with generic field names. (#1261)
  • RerunBridge replaces old rerun init: dimos.dashboard.rerun_init removed. Use RerunBridgeModule or the rerun-bridge CLI. (#1154)
  • Unitree directory restructuring: unitree_go2unitree/go2, unitree_g1unitree/g1. Blueprint names updated. (#1221)
  • Default viewer is now rerun-web: Use --viewer-backend rerun to restore native viewer. (#1324)

Quickstart

# 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 🎉


Full Changelog: v0.0.9...v0.0.10

ClaireBookworm and others added 30 commits January 23, 2026 13:08
* adding timestamp knowledge to agent prompt and info

* Update dimos/perception/experimental/temporal_memory/temporal_utils/graph_utils.py
* added HardwareComponent defining universal schema fo robot type and joint type classes

* removed simple HardwareConfig and replaced with new HardwareComponent dataclass

* updated blueprints and test files

* added JointState dataclass and JointName str alias for better readability

* renamed control orchestrator to control coordinator as its easier to say

* Fix typo in component schema docstring

* added explicit type alias for JointName in ControlTask

* added Type Checking import
* add readme
* remove unneeded pip install commands
* add feedback
* add warning
* fix exmaples link
* enhance message about humancli, add crash warning
* add dev/contributing docs
* add license
* add uvx run
* consolidate package usage into readme.md
* consolidate and finish development docs
* remove redundant doc
* docs reorganization pt1
* remove probably outdated docs, consolidate remaining
* standardize naming
* typo and linking
* linking fix
* cleanup todo's
* move viz docs
* add note to dimos run
* alignment
* rename main dev docs
* disable dev container until fixed
* minor naming
* add links to concepts
* fix broken link
* shorten readme
* fix links
* remove --single-branch to avoid problems with checkout
* add debugging
* extend architecture
* reorganize docs
* minimal edit
* rice the readme
* grammar
* formatting
* fix examples
* change links to reduce change count
* improve wording
* wording
* remove acknowledgements
* improve the humancli example
* formatting
* Update README.md
* Update README.md
* Update README.md
* Update README.md
* Update README.md
* Update README.md
* Update README.md
* Update README.md
* Update README.md
* remove print that never runs
* wording
* example of getting module inputs/outputs
* Update README.md
* Update README.md
* Update README.md
* Update README.md
* Update README.md
* Update README.md
* Update README.md
* Update README.md
* Update README.md
* Update README.md
* Update README.md
* Update README.md
* Update README.md
* Update README.md
* Update README.md
* Update README.md
* Update README.md
* Update README.md
* Update README.md
* Update README.md
* switch to dev branch for development
* fixup linked files
* add blueprints back
* fix typo
* get Paul's blueprints docs closer to runnable by adding imports
* add rpc call and skill examples
* better docs for skills
* improve contributing
* changes for paul
* Update README.md
* Update README.md
* fix broken link
* update broken link
* Readme changes
* readme reorg
* rename so that it renders on github
* break up writing documentation
* add minimal API overview
* add table of contents to concepts
* add actual doclinks command so the doclinks docs make sense
* remove stuff stash didn't like
* hide TODO in a comment
* add a link to blueprints
* minor change
* use different examples in readme
* revert using different examples
* update diagram docs
* rename back
* fix diagrams
* add instruction
* revert revert
* fix link
* improve link
* fix link
* fix link
* remove all but the "Simple DimOS Application"
* lots of minor fixes
* make docs consistent
* add back lcmspy (accidental removal)
* better wording
* improve REPO_ROOT
* simplify
* wording
* should be fully runnable in theory, test next
* add doclinks command
* Revert "add doclinks command"
* improve syntax
* make blueprints.md executable (tested)
* neutralize edits
* Revert "neutralize edits"
* remove unused name
* test against blueprints.md instead of development.md

---------

Co-authored-by: Paul Nechifor <paul@nechifor.net>
Co-authored-by: stash <pomichterstash@gmail.com>
* autogenerate list of blueprints

* swtich order
Add benchmark test cases for DimosROS pubsub, which uses dimos message
types with automatic conversion. This complements existing RawROS tests
and allows measuring the dimos↔ROS conversion overhead.
* docs: update transports documentation with encode/decode mixins and module examples

- Add encode/decode mixins section with PickleEncoderMixin, LCMEncoderMixin, JpegEncoderMixin
- Add working example of deploying modules with shared memory transport
- Add ROS and DDS to available transports table
- Add doclinks CLI entry point to pyproject.toml
- Fix webcam.py to import CameraInfo from dimos.msgs (has with_ts method) instead of dimos_lcm

* transports work, blueprints moved, data moved

* more transport wording changes

* doc simplification

* linking go2_basic svg correctly

* abstraction layer map

* alt transport doc

* transports.md wrap

* blueprints pulled from dev

* reintroduced missing data flow svg

* fixed broken link

* titles fix

* ci: run pre-commit on all pushes and PRs
* fix: default to rerun native viewer

* Update dimos/dashboard/rerun_init.py

Co-authored-by: Paul Nechifor <paul@nechifor.net>

* Change default comment

---------

Co-authored-by: Paul Nechifor <paul@nechifor.net>
Co-authored-by: stash <pomichterstash@gmail.com>
* Still uses Dask by default.

* Start without Dask with:

```bash
uv run dimos --no-dask  --simulation run unitree-go2-agentic
```

* Startup time improvement so far: 60 seconds before, 45 seconds now. (This is measured from running the command till I can instruct it to "start exploring" and it starts moving).
* There are a lot of potential improvements we can do. This is the first step.
…1067)

* added HardwareComponent defining universal schema fo robot type and joint type classes

* removed simple HardwareConfig and replaced with new HardwareComponent dataclass

* updated blueprints and test files

* added JointState dataclass and JointName str alias for better readability

* renamed control orchestrator to control coordinator as its easier to say

* Fix typo in component schema docstring

* added explicit type alias for JointName in ControlTask

* updated sdk backends to have unit conversion constants at the top.

Every backend must implement its own conversion based on the sdk.

* added registry to auto detect backends and then import

* added gripper constants and parameters

* changed logger from debug to info for unavailable sdk wrappers

* made naming more consistent - chagned from ambiguous 'backend' name for sdk adapter to 'adapter'

* updated readmes

* fixed ManipulatorAdapter import after rebase

* float type annotation for gripper pos

* clean up

* remove the caching flag so discover() can be called multiple times
* make camera demo actually show up in rerun

* ruff
* fix more ruff issues

* fix mypy
* Feat: Adding rerun to camera module

* Fix: module name + topic_str

* CI code cleanup

* Fix: rerun_enabled as local variable, not property

* Feat: Added pinhole logging to viz in 3d with robot

* Feat/fix: Added tf_rerun and fixed camera height

* Fix: camera_link wrt base_link transform

* Fix: pre-comit errors

* CI code cleanup

* commit to Trigger CI
* use iec instead of SI units for bandwidth measurement

* Nicer (and IEC) unit calculations for benchmarks

* converter cleanup

* nicer table
…pnet (#1150)

These third-party libraries are installed but missing py.typed markers,
causing mypy to raise import-untyped errors in addition to import-not-found.
* refactor(pubsub): reorganize module structure and extract encoders

- Move implementations to impl/ subdirectory (lcmpubsub, memory, shmpubsub, etc.)
- Extract encoder mixins to encoders.py (PubSubEncoderMixin, PickleEncoderMixin, LCMEncoderMixin, JpegEncoderMixin)
- Add AllPubSub and DiscoveryPubSub mixins with complementary default implementations
- Add GlobPubSub and RegexPubSub marker classes with docstring examples
- Update imports across codebase
- Add CLAUDE.md to .gitignore

* small fix to pass CI tests

* fix: update shmpubsub import path after impl/ reorganization

* lcm class cleanup

* encoder typing fixes

* feat: add Glob and regex pattern support to LCM Topic subscriptions

- Add Glob class for glob-style pattern matching (*, **, ?)
- Topic now accepts str, re.Pattern, or Glob for flexible subscription patterns
- Pattern subscriptions return the actual matched channel in callback
- Remove duplicate LCMMsg and Topic from lcmservice.py (use DimosMsg)
- Add PubSubProtocol for structural typing
- Add tests for regex and glob pattern subscriptions

* feat: add subscribe_all and Topic.from_channel_str for typed pattern subscriptions

- Add subscribe_all() method to LCMPubSubBase for subscribing to all topics
- Add Topic.from_channel_str() factory method to parse channel strings with embedded type info
- Channel format: /topic#module.ClassName enables automatic type extraction
- Add test for subscribe_all with typed message decoding

* refactor: extract resolve_msg_type to dimos.msgs.helpers

Move message type resolution logic to a dedicated helper module with
lru_cache for performance. Supports fallback to dimos_lcm module path.

* lcm pattern sub test rename

* pattern sub tests and docs

* bridge type spec

* fix: bridge.py type annotations and missing subscribe_topic param

- Fix AllPubSub type parameter order (TopicFrom, MsgFrom not MsgFrom, TopicFrom)
- Fix pass_msg callback signature to match spec (MsgFrom, TopicFrom)
- Pass subscribe_topic config to bridge() function

* fix: resolve mypy type errors across pubsub modules

- helpers.py: Add type: ignore for getattr Any return
- lcmpubsub.py: Add type: ignore for callback type variance and mixin incompatibility
- shmpubsub.py: Add type: ignore for mixin incompatibility
- transport.py: Add arg-type to existing type: ignore

* pattern sub test fix

* pattern tests fixed

* fix: add import-untyped to mypy ignore comments for cupy/contact_graspnet

These third-party libraries are installed but missing py.typed markers,
causing mypy to raise import-untyped errors in addition to import-not-found.

* fix: add DecodingError and LCM_SELF_TEST filtering to pubsub encoders

- Add DecodingError exception for skipping messages in decode()
- Add LCMTopicProto protocol for type-safe LCM topic handling
- Filter LCM_SELF_TEST topic in both encoders and lcmpubsub handler
- Fix type annotations in shmpubsub and ros_bridge

* fix: resolve ruff warnings for explicit re-exports and loop variable binding

- Use explicit re-export syntax in impl/__init__.py
- Bind loop variable in lambda default argument to fix B023
* fix: LCMPubSubBase.subscribe accepts Topic only, not Topic | str

* fix: add thread-safety locks to subscribe_new_topics and subscribe_all

* fix: improve type safety in pubsub and skill comms

- LCMCommsConfig now uses LCMTopic with default_factory
- Add proper type params to PubSubComms and LCMSkillComms
- Fix SkillMsg type annotations with MsgType param
- Add explicit re-exports in protocol/service/__init__.py
- Wrap string topic in LCMTopic in pLCMTransport

* fix: remove type ignores from PubSubBaseMixin

- Add subscribe method declaration to mixin
- Fix _Subscription type to use PubSubBaseMixin
* switch to create pattern

* rename ModuleBlueprint to _BlueprintAtom, and ModuleBlueprintSet to Blueprint to be consistent with docs

* add protocol helpers

* fix lingering name changes

* add get_protocol_method_signatures

* rename ModuleConnection to Stream to align with docs

* add ModuleRef to _BlueprintAtomic, and name StreamRef for consistency

* organize rerun within build

* add missing type hints for RPCClient

* remove completely unused variable

* add missing type hints

* fix arg

* improve type hinting for RPCClient

* avoid using builtin name as variable name

* fixup ModuleProxy

* add _connect_module_refs

* formatting

* fix typing of static methods and args

* use stable python interfaces

* fix annotation-protocol in the pytoml

* fix type annotations

* fix test

* update tests

* one char test fix

* fixup typing

* backport changes that were made in future branches

* fix start/stop test

* fix naming

* get module refs working!

* fix test

* fix basic tests

* fixup typing

* CI code cleanup

* fix mypy

* fix mypy

* fix class checks

* fix weird merge issues

* rename "connections" to "streams"

* fix isclass check

* update docs, rename example

* ignore typing issues

* fix

* add is_module check for test

---------

Co-authored-by: jeff-hykin <17692058+jeff-hykin@users.noreply.github.com>
…#1079)

* added robot_description folders to data/ folder with lfs tracking

* Base types: RobotModelConfig, Obstacle, Protocol specs for defining  manipulation scenes

* Mesh conversion utils for converting any urdf to drake compatible mesh files

* DrakeWorld implementation that maintains all objects, robots in the scene and owns the scene graph

* Monitor system keeps the world model (drake planning world) in synb with real world. manages obstacle lifecycle and more

* FK and IK solver implementation with drake

* RRT path planner using default drake planner

* factory for building implementation of the different world, viz, planner etc specs

* utils for ik solver and path planning

* manipulation module manages the world monitor, planner, kinematics planner and interfaces with other modules

* added blueprints and manipulation client for testing

* added unit test, e2e tests and readme

* general cleanup

* added multi robot management  and control to the manipulation module

* refactored planning stack

* Refactored manipulation planning stack: seperated planners from world implementation,  split kinematics into JacobianIK and DrakeOptimizationIK

* updated README

* Address greptile comments:
manipulation_blueprint - Added optional add_gripper: bool = True to make xarm6 ans xarm7 config consistent.
world_obstacle_monitor - Added warning log when obstacle not found during cleanup
manipulation_client - Removed unused numpy impor
path_utils - Added explicit tolerances atol=1e-6, rtol=0 to np.allclose() for stricter joint-space duplicate detection
jacobian_ik - Added division-by-zero protection for velocity limits using nonzero_mask to skip zero-valued limits
drake_world.py - added more specific exception handling (avoids hiding bugs)
mesh_utils - regex fixes

* fix mypy import error with manipulation interface (file is deprecated)

* protocol now only requires solve() method.

* moved to using standard  LCM data types and added type alias for readability

* updated all coordinator references

* fixed all bluepirnts order

* updated paths to use Path object instead of str

* mypy type fixes

* all public api boundaries use standard message types, sim specific internal storage/helpers still use NDArrays in some places

* removed unused import

* removed manipulation history reference

* added a Jacobian typealias

* fixed mypy errors

* updated manipulation dependencies in pyproject.toml
* old numpy forced old version of rerun

* fix other mypy issues
paul-nechifor and others added 25 commits February 19, 2026 23:31
* fix(unitree-go2): minor issues

* fix(unitree-go2): minor issues

* fix stand down/up

* fix mypy
- Remove direnv install section and wget .envrc pattern from ubuntu/osx/nix guides
- Use plain 'source .venv/bin/activate' everywhere
- Condense library usage to 4 lines: mkdir, venv, activate, install
- Keep nix.md's nix-specific setup (nix develop) but drop direnv from it too
* initial commit

* lazyloader to defer heavy imports

* Increase test timeout to prevent flaky failures

* Fix lcmspy global totals test flaking from LCM discovery packets

* Timeout to 15s

* lazy imports not necessary

* added manipulation to docker/python/

* Fix: default timeout is 30s

* lcmspy test to filter per-topic

* Fix: skip pydrake type stubs in mypy

* Fix: delete .pyi files that breaks mypy on 3.10 in CI

* Fix: find all .pyi and delete them

* adding pydrake to the ignore_missing_imports override

* follow_imports skip for pydrake
…tructions

docs(install): remove direnv, simplify installation instructions
…lation (#1309)

* fix(realsense): lazy-load pyrealsense2 to avoid import errors in simulation

pyrealsense2 is a system-level dependency that requires hardware libraries.
Importing it eagerly in camera.py caused ModuleNotFoundError when loading
any blueprint from manipulation_blueprints.py, even simulation blueprints
that don't use RealSense cameras.

- Use __getattr__ in realsense/__init__.py for lazy package exports
- Defer pyrealsense2 import to runtime methods (start, _build_camera_info,
  _intrinsics_to_camera_info, _get_extrinsics) via local imports
- Use TYPE_CHECKING guard + from __future__ import annotations for type hints

Python's module cache makes repeated local imports effectively free.

* fix(data): add pre-generated xarm7.urdf to xarm_description LFS archive (#1312)

The keyboard-teleop-xarm7 blueprint references xarm7.urdf via LfsPath,
but only xarm7.urdf.xacro existed. CartesianIKTask/PinocchioIK need a
plain URDF — they don't process xacro. xarm6.urdf was already pre-generated;
xarm7 was missed.

Generated from xarm_device.urdf.xacro with dof=7, limited=true using
DimOS's own xacro processor (with package_paths resolution).

* fix(zed): add zed_camera stub when SDK is not installed

The else branch (no pyzed) was missing a zed_camera stub, causing
ImportError when blueprints tried to import it. Added a stub that
raises ModuleNotFoundError with name='pyzed' so the integration
test skips gracefully. Also added pyzed to OPTIONAL_DEPENDENCIES
in test_all_blueprints.py.

* fix(zed): add type annotations to zed_camera stub
cyclonedds requires a source build with CYCLONEDDS_HOME set, which
fails on standard dev machines. Updated install docs to use
`uv sync --all-extras --no-extra dds` and added a note to the dds
extra in pyproject.toml.
Both were leftovers from the dead Detic integration (import commented
out, directory excluded from mypy). Zero imports of either package
anywhere in the codebase. Removing them eliminates slow source builds
and 3 transitive packages from uv sync.
LCM autoconf prompts for system configuration during test collection,
which fails without -s since pytest captures stdin by default.
* handle universal binary on macos

* add MacOS support for drake
Switch default viewer_backend from 'rerun' (native) to 'rerun-web'
for broader compatibility without a native viewer install.
* add venv setup to dev install docs

* nix - both uses .venv
* docs(readme): restore banner image from main

* docs(readme): remove duplicate SVG banners
* rerun config g1

* fix: fillmode warning
* fix: invisible due to background colors

* default value
* fix(g1): add video stream and camera_info to G1SimConnection

G1SimConnection was missing color_image and camera_info outputs,
so MuJoCo-rendered frames never reached the rerun bridge. Mirrors
the Go2 connection pattern: subscribes to video_stream(), publishes
camera_info in a background thread, and adds camera_optical TF frame.

* fix(g1): remove /g1/ topic prefix to match Go2 and rerun overrides

The rerun visual_overrides from #1334 used world/camera_info and
world/color_image (matching Go2), but the G1 transports used /g1/
prefixed topics. This mismatch meant the rerun bridge never applied
the camera_info pinhole overlay.

Remove the /g1/ prefix from color_image and camera_info transports
in the primitive blueprint and the SHM blueprint. Now matches Go2
convention and the rerun overrides work correctly.

* fix(g1): skip webcam camera_module in simulation mode

In sim, G1SimConnection now provides video from MuJoCo. The webcam
camera_module in the primitive was also publishing to color_image,
causing interleaved webcam + MuJoCo frames. Conditionally skip
camera_module when global_config.simulation is True.

* fix(g1): use correct MuJoCo camera intrinsics and add thread exit condition

- Replace hardcoded 1280x720 Go2 intrinsics with computed values from
  MuJoCo constants (320x240, FOV=45°) matching MujocoConnection pattern
- Add _stop_event to camera_info loop for clean shutdown

* fix(sim): increase MuJoCo video render resolution to 1280x720

* fix(g1): revert MuJoCo resolution, use Go2 camera intrinsics for rerun

MuJoCo framebuffer can't exceed 640 width without XML config. Reverted
render resolution to 320x240. Use the same 1280x720 camera intrinsics
as Go2 for rerun display scaling (matches Go2 sim behavior exactly).

* fix(sim): increase MuJoCo render resolution to 1280x720

Set offscreen framebuffer size in model XML to support the higher
resolution. Previously failed because MuJoCo's default offscreen
buffer is only 640 wide.

* Revert "fix(sim): increase MuJoCo render resolution to 1280x720"

This reverts commit f21d37b.
@greptile-apps
Copy link
Contributor

greptile-apps bot commented Feb 21, 2026

Too many files changed for review. (694 files found, 100 file limit)

@spomichter spomichter changed the title Release v0.0.10 Release v0.0.10: Manipulation Stack, MuJoCo Simulation, DDS Transport, Web and Native Visualization via Rerun Feb 21, 2026
Copy link
Contributor

@leshy leshy left a comment

Choose a reason for hiding this comment

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

🥳

@spomichter spomichter merged commit 8e0f31a into main Feb 21, 2026
34 checks passed
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.