feat(webui): mission planner — waypoint editor, routes, geofences, schedule (Issue #145) #155

Merged
sl-jetson merged 1 commits from sl-webui/issue-145-mission-planner into main 2026-03-02 10:07:44 -05:00
Collaborator

Summary

  • useMissions.js: state hook for waypoints, patrol routes, geofences, templates, schedules, and execution state — full localStorage persistence and JSON export/import
  • MissionPlanner.jsx: interactive canvas + 7 sub-views
    • Map: canvas with waypoints (click-to-place, drag), route lines + direction arrows, geofence polygon fills, robot overlays, scale bar, zoom/pan
    • Waypoints: list with label/dwell-time editing, drag reorder
    • Routes: loop/oneshot/pingpong, per-robot assignment, visual waypoint sequence builder
    • Geofences: polygon draw tool for no-go and allowed zones
    • Templates: save/load profiles, starter templates (Patrol/Escort/Dock/Exploration), JSON export/download, import from file
    • Schedule: time+day triggers with client-side minute runner; fires /goal_pose when connected robot is available
    • Execute: start/pause/resume/abort per route; waypoint-by-waypoint advance; sends /goal_pose (PoseStamped) for next waypoint and /outdoor/waypoints (PoseArray) for full patrol dispatch
  • App.jsx: adds Missions tab to FLEET group

Test plan

  • npm run dev — Missions tab visible in FLEET group
  • Click map in waypoint mode to place waypoints; drag to reposition
  • Edit waypoint label and dwell time in Waypoints sub-view
  • Create route, add waypoints, set type (loop/oneshot/pingpong), assign robot
  • Route lines + direction arrows render on canvas
  • Draw geofence polygon (click vertices, double-click to close); no-go renders red, allowed renders green
  • Save mission as template; load template restores state
  • Export JSON downloads file; import JSON re-loads
  • Add schedule with time/days; toggle enable/disable
  • Execute tab: Start dispatches /goal_pose to assigned robot; Pause/Resume/Abort work
  • Next WP advances execution and sends next goal
  • npm run build — clean build, no warnings

Closes #145

🤖 Generated with Claude Code

## Summary - `useMissions.js`: state hook for waypoints, patrol routes, geofences, templates, schedules, and execution state — full localStorage persistence and JSON export/import - `MissionPlanner.jsx`: interactive canvas + 7 sub-views - **Map**: canvas with waypoints (click-to-place, drag), route lines + direction arrows, geofence polygon fills, robot overlays, scale bar, zoom/pan - **Waypoints**: list with label/dwell-time editing, drag reorder - **Routes**: loop/oneshot/pingpong, per-robot assignment, visual waypoint sequence builder - **Geofences**: polygon draw tool for no-go and allowed zones - **Templates**: save/load profiles, starter templates (Patrol/Escort/Dock/Exploration), JSON export/download, import from file - **Schedule**: time+day triggers with client-side minute runner; fires `/goal_pose` when connected robot is available - **Execute**: start/pause/resume/abort per route; waypoint-by-waypoint advance; sends `/goal_pose` (PoseStamped) for next waypoint and `/outdoor/waypoints` (PoseArray) for full patrol dispatch - `App.jsx`: adds Missions tab to FLEET group ## Test plan - [ ] `npm run dev` — Missions tab visible in FLEET group - [ ] Click map in waypoint mode to place waypoints; drag to reposition - [ ] Edit waypoint label and dwell time in Waypoints sub-view - [ ] Create route, add waypoints, set type (loop/oneshot/pingpong), assign robot - [ ] Route lines + direction arrows render on canvas - [ ] Draw geofence polygon (click vertices, double-click to close); no-go renders red, allowed renders green - [ ] Save mission as template; load template restores state - [ ] Export JSON downloads file; import JSON re-loads - [ ] Add schedule with time/days; toggle enable/disable - [ ] Execute tab: Start dispatches `/goal_pose` to assigned robot; Pause/Resume/Abort work - [ ] Next WP advances execution and sends next goal - [ ] `npm run build` — clean build, no warnings Closes #145 🤖 Generated with [Claude Code](https://claude.com/claude-code)
sl-webui added 1 commit 2026-03-02 10:05:07 -05:00
useMissions.js:
  - Waypoints: click-to-place, drag, dwell time, localStorage persistence
  - Routes: loop/oneshot/pingpong, per-robot assignment, waypoint sequence
  - Geofences: polygon draw (no-go / allowed zones)
  - Templates: save/load profiles + JSON export/import
  - Schedules: time+day triggers with client-side runner
  - Executions: running/paused/aborted state per route

MissionPlanner.jsx:
  - Canvas: waypoints, route lines + direction arrows, geofence fills,
    robot position overlays, scale bar, zoom/pan, execution progress
  - 7 sub-views: Map | Waypoints | Routes | Geofences | Templates | Schedule | Execute
  - Execute: start/pause/resume/abort, waypoint-by-waypoint advance,
    sends /goal_pose (single) and /outdoor/waypoints (patrol PoseArray)
  - Integrates useFleet for robot selection and /goal_pose publishing

App.jsx: adds Missions tab to FLEET group

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
sl-jetson merged commit 8facb80eab into main 2026-03-02 10:07:44 -05:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: seb/saltylab-firmware#155
No description provided.