feat(webui): fleet management dashboard (Issue #139) #147

Merged
sl-jetson merged 3 commits from sl-webui/issue-139-fleet-dashboard into main 2026-03-02 09:51:11 -05:00
Collaborator

Summary

  • useFleet.js: multi-robot ROSLIB.Ros WebSocket multiplexer; per-robot telemetry subscriptions; sendGoal, sendPatrol, scanSubnet helpers; localStorage persistence
  • FleetPanel.jsx: fleet sub-views — Robots (list/status/battery/add/scan), Fleet Map (canvas with robot positions), Missions (single goal + patrol route dispatch), Video (MJPEG grid via web_video_server), Alerts (aggregated fleet alerts), Robot Detail (overlay reusing ImuPanel/BatteryPanel/MotorPanel/ControlMode/SystemHealth via subscribeRobot adapter)
  • App.jsx: adds FLEET tab group

Test plan

  • npm run dev — Fleet tab visible in nav
  • Add robot via modal, connection indicator goes green when rosbridge reachable
  • Robot list shows battery SoC bar, state badge, pipeline state
  • Fleet Map renders robot dots with heading arrows for robots with /odom data
  • Mission dispatch sends goal/patrol to selected robot
  • Video grid loads MJPEG streams from web_video_server
  • Alerts view aggregates diagnostics warnings/errors across all robots
  • Robot Detail opens for selected robot; sub-tabs (IMU/Battery/Motors/Control/Health) function via subscribeRobot adapter
  • LAN scan discovers robots and adds them to the list
  • npm run build — clean production build, no chunk size warnings

Closes #139

🤖 Generated with Claude Code

## Summary - `useFleet.js`: multi-robot ROSLIB.Ros WebSocket multiplexer; per-robot telemetry subscriptions; `sendGoal`, `sendPatrol`, `scanSubnet` helpers; localStorage persistence - `FleetPanel.jsx`: fleet sub-views — **Robots** (list/status/battery/add/scan), **Fleet Map** (canvas with robot positions), **Missions** (single goal + patrol route dispatch), **Video** (MJPEG grid via web_video_server), **Alerts** (aggregated fleet alerts), **Robot Detail** (overlay reusing ImuPanel/BatteryPanel/MotorPanel/ControlMode/SystemHealth via `subscribeRobot` adapter) - `App.jsx`: adds FLEET tab group ## Test plan - [ ] `npm run dev` — Fleet tab visible in nav - [ ] Add robot via modal, connection indicator goes green when rosbridge reachable - [ ] Robot list shows battery SoC bar, state badge, pipeline state - [ ] Fleet Map renders robot dots with heading arrows for robots with `/odom` data - [ ] Mission dispatch sends goal/patrol to selected robot - [ ] Video grid loads MJPEG streams from `web_video_server` - [ ] Alerts view aggregates diagnostics warnings/errors across all robots - [ ] Robot Detail opens for selected robot; sub-tabs (IMU/Battery/Motors/Control/Health) function via `subscribeRobot` adapter - [ ] LAN scan discovers robots and adds them to the list - [ ] `npm run build` — clean production build, no chunk size warnings Closes #139 🤖 Generated with [Claude Code](https://claude.com/claude-code)
sl-webui added 1 commit 2026-03-02 09:37:47 -05:00
- useFleet.js: multi-robot ROSLIB.Ros multiplexer with localStorage
  persistence; per-robot balance_state/control_mode/odom/diagnostics
  subscriptions; sendGoal, sendPatrol, scanSubnet helpers
- FleetPanel.jsx: fleet sub-views (Robots/Map/Missions/Video/Alerts)
  plus RobotDetail overlay reusing ImuPanel/BatteryPanel/MotorPanel/
  ControlMode/SystemHealth via subscribeRobot adapter pattern
- App.jsx: adds FLEET tab group pointing to FleetPanel

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
sl-webui added 2 commits 2026-03-02 09:40:32 -05:00
Auto-detected alongside MPU6000. Acts as balance primary when MPU6000
fails, or provides NDOF-fused yaw/pitch when both sensors are present.

- include/bno055.h: full API — bno055_init/read/is_ready/calib_status/
  temperature/save_offsets/restore_offsets
- src/bno055.c: I2C1 driver; probes 0x28/0x29, resets via SYS_TRIGGER,
  enters NDOF mode; 2-burst 12-byte reads (gyro+euler, LIA+gravity);
  Euler/gyro/accel scaling (÷16, ÷16, ÷100); auto-saves offsets to
  RTC backup regs BKP0R–BKP6R on first full cal; restores on boot
  (bno055_is_ready() returns true immediately); temperature updated 1Hz
- include/config.h: BNO055_BKP_MAGIC = 0xB055CA10
- src/main.c: bno055_init() in I2C probe block (before IWDG); imu_calibrated()
  macro dispatches mpu6000_is_calibrated() vs bno055_is_ready();
  BNO055 read deferred inside balance gate to avoid stalling main loop;
  USB JSON reports bno_cs (calib status) and bno_t (temperature)
- test/test_bno055_data.py: 43 pytest tests (43/43 pass) — calib status
  bit extraction, Euler/gyro/accel scaling, burst parsing, offset
  round-trip packing, temperature signed-byte encoding

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds FleetPanel import and FLEET tab group (green) to the main
dashboard navigation. Fleet tab is self-contained via useFleet.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
sl-jetson merged commit e1acadc2aa into main 2026-03-02 09:51:11 -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#147
No description provided.