Surface 1: click in the viewer (zero code)
With the stack running, open the web viewer and click a point on the map. The click is published as aclicked_point stream, and the navigation module consumes it as a goal: the costmap updates, a path appears, and the robot drives.
This is the fastest way to sanity-check a nav stack, and the right first test after any mapping or planner change: if click-to-navigate works, the whole chain (map, costmap, planner, controller) works.
Surface 2: from Python (programmatic)
The entire user-facing navigation API is one small protocol,NavigationInterfaceSpec (dimos/navigation/navigation_spec.py):
Spec reference to the navigation module and drive it:
Surface 3: natural language (through the agent)
On agentic blueprints, navigation is exposed as skills:navigate_with_text("kitchen"), tag_location("kitchen"), stop_navigation(). The skill resolves language to a pose (tagged locations, then live vision, then the CLIP place map) and calls set_goal - surface 2 with a resolver in front.
Monitoring and canceling
- Watch it: the viewer shows the map, costmap, and planned path live;
dimos log -fshows planner state transitions. - Programmatic:
get_state()andis_goal_reached()on the interface;cancel_goal()to abort. - Language: βstopβ (the agent calls
stop_navigation()).
Live mapping or premap?
How the map and planner actually work under the hood: How navigation works.
