habitat nav integration (habinav) - #4011
Merged
Merged
Conversation
…ints Runs photorealistic scanned indoor scenes (HM3D) as a dimos robot: Twist in, RGB-D + pose + a registered scan out. Enough to exercise mapping, planning and following against real building geometry without a robot. habitat-sim publishes python 3.9 conda builds only, so it cannot share the dimos interpreter. It runs as a NativeModule subprocess and speaks dimos over zenoh via dimos_lcm, the standalone message package -- no dimos import on that side, which a test enforces. The LCM runtime is deliberately not installed: we publish over zenoh, and building it needs a CMake/JDK toolchain the shell does not have. nix/install.sh is the build_command. It creates the conda env, installs the deps, fetches the annotated HM3D example scene and writes the wrapper whose existence NativeModule uses as the build sentinel, so a fresh checkout builds on first run. The wrapper is needed because CLI args are appended after the executable, leaving no place for a script path. Blueprints layer so a failure can be bisected by dropping a level: habitat-teleop sim + streams, drive it with the viewer keys habitat-raycaster + RayTracingVoxelMap on a sensor-frame scan habitat-nav + MLSPlannerNative + BasicPathFollower, goal by clicking habitat-voxel VoxelGridMapper alternative on a pre-registered scan The two mappers want the scan in different frames, so habitat-voxel is an alternative rather than a layer: VoxelGridMapper assumes world-frame clouds, while RayTracingVoxelMap raytraces from the sensor origin and registers the cloud itself through tf. No MovementManager. Its arbitration is real-robot safety behaviour that fights the viewer: releasing a movement key publishes a zero twist, which latches teleop, cancels the active goal with a NaN and blocks nav_cmd_vel for a cooldown. Viewer teleop and the follower both publish onto cmd_vel instead, and the viewer's clicked point is already a PointStamped, so it needs no translation to reach the planner's goal. frames.py owns the habitat(y-up) to dimos(z-up) conversion, tested against basis vectors and a quaternion recorded from the live simulator. The camera hangs off a camera_optical frame: a pinhole points down its own +z, which in the body frame is straight up.
leshy
requested review from
Dreamsorcerer,
aclauer,
mustafab0,
paul-nechifor and
spomichter
as code owners
September 8, 2026 21:08
The aihabitat conda channel has no aarch64 habitat-sim, so advertising aarch64-linux in the flake only turned a clear "unsupported" into a confusing conda solve failure on Jetson. The build path was verified cold: env, data and wrapper moved aside, the exact build_command re-run from the four committed files, and the result driven through NativeModule to ready. No compiler step in the log.
…it from the index
❌ 7 Tests Failed:
View the top 1 failed test(s) by shortest run time
View the full list of 7 ❄️ flaky test(s)
To view more test analytics, go to the Test Analytics Dashboard |
Habitat is the first robot-agnostic entry; the go2 workflows keep their own table.
Contributor
- env, data and wrapper build under target/habitat: built files inside dimos/ leaked two numba classes into all_blueprints.py - zenoh session applies the full settings NativeModule sends, and exits when handed none (an LCM-transport launch) - every layer pins transport=zenoh - cmd_vel zeroes when stale (0.2 s), like the real connections - scene download resumes via --no-replace instead of a dir check that marked an interrupted download complete - loop integrates measured elapsed time on an anchored schedule - drop the camera_info override: the bridge already pairs the pinhole to every image in the frame, and the override was starving depth_image - pin eclipse-zenoh and dimos-lcm to uv.lock: a version skew makes SHM payloads arrive as unreadable handles - world/depth_image hidden in the 3D view
aclauer
approved these changes
Sep 8, 2026
aclauer
approved these changes
Sep 9, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.