Skip to content

feat(viewer): click-robot teleop, Ctrl+click nav, overlay UX#15

Open
spomichter wants to merge 1 commit intomainfrom
feat/viewer-interaction-fixes
Open

feat(viewer): click-robot teleop, Ctrl+click nav, overlay UX#15
spomichter wants to merge 1 commit intomainfrom
feat/viewer-interaction-fixes

Conversation

@spomichter
Copy link

Summary

Three interaction fixes for dimos-viewer, based on current main.

Changes

1. Ctrl+click → nav goal (was: any click)

  • Before: Every left-click in 3D view published PointStamped LCM → unintended navigation when selecting robot for teleop
  • After: Plain click = normal Rerun selection. Ctrl+click (Cmd+click on macOS) publishes nav goal
  • Implementation: Rc<Cell<bool>> shared between DimosApp.ui() (writes ctrl state) and on_event callback (reads it before publishing)

2. Overlay position + idle styling

  • Shifted from (12,12) to (280,12) — clears Rerun's left panel (Blueprint/Selection)
  • Greyed out when idle: low alpha background (100 vs 220), dimmed keys (80 vs 180), faded text
  • Bright when any WASD key active or e-stop flashes

3. Multi-robot teleop

  • KeyboardHandler.set_active_robot(Some("/world/go2")) → publishes to /world/go2/cmd_vel
  • Sends stop command to previous robot before switching
  • None = default /cmd_vel channel
  • Overlay title shows active robot name (last path segment)

Testing

28/28 unit tests pass. Visual testing on Xvfb confirmed:

  • Overlay renders at correct position (280,12)
  • W key highlights green when pressed
  • W+A simultaneous key detection works
  • Idle/active styling difference visible
cargo build -p dimos-viewer --release
cargo test -p dimos-viewer --lib --release

Breaking Changes

  • Clicks no longer publish nav goals without Ctrl held — users must Ctrl+click to set navigation targets

@spomichter spomichter force-pushed the feat/viewer-interaction-fixes branch 2 times, most recently from 404bd6e to 0d657eb Compare March 15, 2026 07:09
@spomichter spomichter changed the title feat(viewer): Ctrl+click nav goals, multi-robot teleop, overlay UX feat(viewer): click-robot teleop, Ctrl+click nav, overlay UX Mar 16, 2026
- Click robot entity in 3D → engages teleop for that robot
  (WASD publishes to <robot>/cmd_vel). Click non-robot → disengages.
  Robot detection via entity path prefix matching (go2/g1/robot).

- Ctrl+click non-robot entity with position → nav goal
  (PointStamped LCM on /clicked_point). Plain click = Rerun selection.

- Overlay at (260,12), greyed out when disengaged with
  'click robot' hint. Bright when engaged, shows robot name.

- KeyboardHandler shared via Rc<RefCell<>> between DimosApp and
  on_event callback for robot selection state.

- Multi-robot infrastructure: set_active_robot() + set_engaged()
  for future per-robot channel switching.
@spomichter spomichter force-pushed the feat/viewer-interaction-fixes branch from 0d657eb to b1c7e1c Compare March 16, 2026 11:55
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.

1 participant