feat(evals): Habitat navigation benchmark: text-only arms, planner arm, video, parallel cases - #4216
Draft
spomichter wants to merge 1 commit into
Draft
spomichter wants to merge 1 commit into
spomichter wants to merge 1 commit into
Conversation
…m, video, parallel cases One launch (`habitat-nav mcp-server demo-objects nav-skills`) serves every arm of a go-to-object benchmark on Habitat scenes: the planner alone, the TypeSafe reactive agent, coding agents with dimOS (`go_to` / `stop_navigation` / `finish` tools) and without it (`world_state`, `cmd_vel`, `finished` over the raw bridge). - Habitat native publishes `odom` (PoseStamped) and a body-frame `lidar` scan, so TypeSafe and the raw bridge autoconnect without relays or remaps. - `nav-skills`: point-goal tools over the planner's `goal` / `goal_reached` topics; goals carry the robot's floor z (multi-level scenes snap a z=0 goal onto furniture). - `TopicAgent`: evaluate whatever is already running by sending the instruction on one topic and waiting on another; trajectory from a module's `set_trace_dir` trace. - Raw bridge `topics` allowlist plus `world_state/json` (the TypeSafe builder) and `finished/json`; ROBOT.md lists only the served topics. - `HabitatEnvironment`: navmesh `tour` driven before the task so the planner has a map, `task_start_ts`, `record_topics`, `latest_pose` from `odom`. - `nav_metrics`: reached, time to object, facing, bumps, path length, straightness, turn reversals. - `Sim`: `raw_topics`, `extra_env`, `--rerun-open none`, opt-in `rrd`, `video` capture on Xvfb. - `--case`, `--parallel`, `--container`, `--repeat`: one `dimos evals run` per case, in a container when given; `docker/eval/Dockerfile`. - Suite `habitat_nav` with an example HM3D scene file (boxes, cases, tour).
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.
Contribution path
Draft. Stacked on
feat/typesafe-agent(the TypeSafe module this benchmark evaluates), so the diff is the benchmark only. The TypeSafe v2 rewrite is #4212; the eval needs onlyset_trace_dir,world_stateandagent_idlefrom the module and rebases onto whichever lands. Spec:engineering/typesafe-nav-benchmark/spec.mdin the agents repo.Problem
Compare the TypeSafe reactive agent, dimOS's planner, and coding agents with and without dimOS on long-horizon go-to-object navigation in real Habitat scenes, on an even text-only footing, with navigation-quality metrics, per-case video, and parallel execution.
Solution
One launch serves every arm:
habitat-nav mcp-server demo-objects nav-skills, plus the agent's own modules.odom(PoseStamped) and a body-framelidarscan, sotype-safe-agentandraw-robot-bridgeautoconnect by name. No relays, no remap blueprints.nav-skills:go_to(x, y, wait_s),stop_navigation,finishover the planner'sgoal/goal_reached/stop_movementtopics. Goals carry the robot's floor z: HM3D houses are multi-level and a z=0 goal snaps onto furniture.TopicAgent(dimos/evals/agents/topic.py): evaluate whatever is already running. Publishes the instruction (text, or its(x, y)as aPointStamped) on one topic and returns when another goes truthy; trajectory from a module'sset_trace_dirtrace. The planner arm and the TypeSafe arm are two configurations of it.topicsallowlist,world_state/json(the same builder TypeSafe reads) andfinished/json; ROBOT.md lists only the served topics.HabitatEnvironment: a navmeshtourfrom the scene file is driven before the task so the planner has a map (it plans only over observed surface, likedimsim_houseexplores first);task_start_ts;record_topics.nav_metrics: reached, time to object (run duration when never reached), facing, bumps (held command without displacement), path length, straightness, turn reversals; written asnav_metrics.jsonbeside the recording.Sim:raw_topics,extra_env,--rerun-open none, opt-inrrd,video(Xvfb + dimos-viewer + ffmpeg, viewer window only).dimos evals run --case --parallel --container --repeat: onedimos evals runper case, in a container when given;docker/eval/Dockerfile.dimos.evals.suites.habitat_navwith an example HM3D scene file (furniture-sized boxes, 4 cases, tour). The scene file layout is thedetection3d_array_to_dictone from Ruthwik/feat/dimsim object annotations #4208 pluscasesandtour.How to Test
Verified on the example scene, chair case (score 0.8 each): planner reached in 10.9 s; Pi + Astra without dimOS wrote a Zenoh observer and navigator and reached in 34 s; dimcode + Astra with dimOS reached in 16 s with one
go_to.viewer.mp4captured headless. 285 unit tests, ruff, mypy and pre-commit pass.Not yet run: the TypeSafe arm (no key on the box) and the container path of
--parallel(Docker registry unreachable on the box; job command unit-tested).Checklist