Skip to content

feat(cockpit): map click-to-goal, path overlay and cancel button - #4183

Merged
leshy merged 3 commits into
mainfrom
paul/feat/map-click-goal
Sep 16, 2026
Merged

leshy merged 3 commits into
mainfrom
paul/feat/map-click-goal

Conversation

@paul-nechifor

@paul-nechifor paul-nechifor commented Sep 16, 2026

Copy link
Copy Markdown
Contributor

Closes DIM-1172

Problem

  • No way to navigate from the MapPanel

Solution

  • Clicking on the MapPanel navigates to that point.
  • Display paths in the MapPanel
  • When navigating, display a "cancel" button to stop the movement

Map2D(path=, click=, stop=) binds three opt-in streams; the go2 cockpit
blueprints opt in. A click on the drawn costmap maps through the fitted
transform and publishes {x, y} on a point.json.v1 channel, decoded to a
PointStamped on a generated clicked_point port (the rerun viewer's route).
path: In[Path] is encoded as path.json.v1 ([[x, y], ...]) and drawn under
the pose; a floating cancel button, shown while the path is non-empty,
publishes a Bool on stop_movement (the planner's cancel input).

The path channel is paced and replayed on subscribe: the planner emits an
empty path then the real one within milliseconds on every plan, so the
sampling gate would drop the second frame. Both flags move onto Channel
(rx-only); ChannelRequest.paced goes. The new channel ids ride the panel
params, so the map2d manifest slots and fixtures are unchanged.
@codecov

codecov Bot commented Sep 16, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 75.24430% with 76 lines in your changes missing coverage. Please review.
✅ All tests successful. No failed tests found.

Files with missing lines Patch % Lines
dimos/e2e_tests/test_map_click_browser.py 17.64% 70 Missing ⚠️
dimos/teleop/hosted/go2_command.py 66.66% 1 Missing and 1 partial ⚠️
dimos/web/cockpit.py 95.00% 1 Missing and 1 partial ⚠️
dimos/robot/galaxea/r1pro/connection.py 0.00% 1 Missing ⚠️
dimos/teleop/hosted/arm_command.py 66.66% 1 Missing ⚠️
@@            Coverage Diff             @@
##             main    #4183      +/-   ##
==========================================
- Coverage   79.13%   79.13%   -0.01%     
==========================================
  Files        1469     1471       +2     
  Lines      139244   139520     +276     
  Branches    11976    11988      +12     
==========================================
+ Hits       110194   110403     +209     
- Misses      25647    25713      +66     
- Partials     3403     3404       +1     
Components Coverage Δ
Tests 94.91% <69.16%> (-0.12%) ⬇️
Flag Coverage Δ
OS-ubuntu-24.04-arm 75.10% <75.24%> (+<0.01%) ⬆️
OS-ubuntu-latest 75.80% <75.24%> (-0.01%) ⬇️
Py-3.10 75.57% <75.24%> (-0.01%) ⬇️
Py-3.11 75.78% <75.24%> (-0.01%) ⬇️
Py-3.12 75.78% <75.24%> (-0.01%) ⬇️
SelfHosted-Large 30.73% <28.33%> (-0.01%) ⬇️
SelfHosted-Linux 36.16% <28.33%> (-0.02%) ⬇️
SelfHosted-macOS 35.49% <28.33%> (-0.02%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
dimos/navigation/basic_path_follower/module.py 48.59% <100.00%> (ø)
dimos/navigation/dannav/holonomic_tc/module.py 83.95% <100.00%> (ø)
...ation/dannav/holonomic_tc/test_dan_holonomic_tc.py 99.14% <100.00%> (ø)
...os/navigation/movement_manager/movement_manager.py 89.61% <100.00%> (ø)
.../blueprints/agentic/unitree_go2_agentic_cockpit.py 100.00% <ø> (ø)
...nitree/go2/blueprints/smart/unitree_go2_cockpit.py 100.00% <ø> (ø)
dimos/teleop/hosted/test_go2_command.py 99.53% <100.00%> (+0.01%) ⬆️
dimos/utils/generic.py 62.06% <100.00%> (+3.57%) ⬆️
dimos/utils/test_generic.py 100.00% <100.00%> (ø)
dimos/web/relay_bridge/builtin_codecs.py 94.59% <100.00%> (+1.73%) ⬆️
... and 9 more

... and 3 files with indirect coverage changes

🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@greptile-apps

greptile-apps Bot commented Sep 16, 2026

Copy link
Copy Markdown
Contributor

RetriggerConfidence Score: 4/5

Not safe to merge until map clicks outside the displayed occupancy grid are rejected. The keyboard-accessibility concern is non-blocking but should be addressed so operators can use the new feature without a mouse.

Findings

  1. P1 Reject outside-grid clicks
  2. P2 Map goals require mouse

Summary

This change adds map click-to-goal controls, path rendering, cancellation controls, bridge message bindings, and Go2 blueprint wiring.

One map interaction can send a goal derived from blank canvas space outside the transformed occupancy grid, which can replace the operator's intended goal with an unreachable destination. The new map-goal flow also has no keyboard-operable equivalent, preventing keyboard-only operators from selecting a goal.

T-Rex validation blocked

The focused rendered check for outside-grid clicks could not complete because its authored browser harness failed before rendering the map. The saved output records the syntax error and failed execution.

Reviews (1) · Last reviewed commit: "feat(cockpit): map click-to-goal, path o..."

Comment thread web/cockpit/src/panels/MapPanel.tsx
Comment thread web/cockpit/src/panels/MapPanel.tsx
@github-actions github-actions Bot added the ready-to-merge Required CI checks have passed on this PR label Sep 16, 2026
@leshy
leshy enabled auto-merge September 16, 2026 08:47
@leshy
leshy added this pull request to the merge queue Sep 16, 2026
Merged via the queue into main with commit 5021ce2 Sep 16, 2026
31 of 33 checks passed
@leshy
leshy deleted the paul/feat/map-click-goal branch September 16, 2026 09:16
@github-actions

Copy link
Copy Markdown
Contributor

Successfully created backport PR for release/0.0.14:

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

Labels

backport release/0.0.14 ready-to-merge Required CI checks have passed on this PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants