Update "Roadmap"

sl-jetson 2026-03-01 00:37:04 -05:00
parent cbd3549caf
commit 9923b48fb8

@ -1,6 +1,6 @@
# SaltyBot Roadmap # SaltyBot Roadmap
**Last updated:** 2026-02-28 by max (PM) **Last updated:** 2026-03-01 by max (PM)
**Project:** Self-balancing two-wheeled robot → autonomous navigation platform **Project:** Self-balancing two-wheeled robot → autonomous navigation platform
**Repo:** https://gitea.vayrette.com/seb/saltylab-firmware **Repo:** https://gitea.vayrette.com/seb/saltylab-firmware
@ -33,64 +33,85 @@ Goal: Robot stands upright on two wheels using PID control.
| Gyro boot calibration (eliminates yaw drift) | ✅ MERGED | #25 | sl-controls | | Gyro boot calibration (eliminates yaw drift) | ✅ MERGED | #25 | sl-controls |
| Status LEDs (solid=OK, blink=error) | ✅ MERGED | #26 | sl-firmware | | Status LEDs (solid=OK, blink=error) | ✅ MERGED | #26 | sl-firmware |
| Magnetometer + barometer auto-detect | ✅ MERGED | #27 | sl-firmware | | Magnetometer + barometer auto-detect | ✅ MERGED | #27 | sl-firmware |
| BME280 full readout (temp/humidity/pressure) | ✅ MERGED | #31 | sl-firmware |
| CW270 IMU axis mapping for MAMBA F722S | ✅ MERGED | #20 | sl-firmware | | CW270 IMU axis mapping for MAMBA F722S | ✅ MERGED | #20 | sl-firmware |
**Next step:** Flash firmware to real hardware and test balance on the robot.
--- ---
## Phase 1.5: Mechanical + Platform — IN PROGRESS 🔧 ## Phase 1.5: Mechanical + Platform — COMPLETE ✅
Goal: Physical chassis and compute platform ready for testing. Goal: Physical chassis and compute platform ready for testing.
| Feature | Status | PR | Agent | | Feature | Status | PR | Agent |
|---------|--------|----|-------| |---------|--------|----|-------|
| Parametric chassis frame (OpenSCAD) | ✅ MERGED | #7 | sl-mechanical | | Parametric chassis frame (OpenSCAD) | ✅ MERGED | #7 | sl-mechanical |
| Prototype base plate (real hub motor measurements) | ✅ MERGED | #11 | sl-mechanical | | Prototype base plate (270×240mm) + vertical stem + battery carousel | ✅ MERGED | #11 | sl-mechanical |
| Vertical stem + battery carousel (2-4 packs) | ✅ MERGED | #11 | sl-mechanical | | Multi-variant branch strategy | ✅ MERGED | #29 | sl-firmware |
| Base plate dimensions fix (270x240mm) | ⏳ Salty reviewing | #11 | sl-mechanical |
| Jetson Nano Docker env (JetPack 4.6 + ROS2 Humble) | ✅ MERGED | #8 | sl-jetson | | Jetson Nano Docker env (JetPack 4.6 + ROS2 Humble) | ✅ MERGED | #8 | sl-jetson |
| STM32-to-Jetson ROS2 serial bridge | ✅ MERGED | #16 | sl-jetson | | STM32-to-Jetson ROS2 serial bridge | ✅ MERGED | #16 | sl-jetson |
| SLAM setup technical plan | ✅ MERGED | #1 | sl-perception | | SLAM setup technical plan | ✅ MERGED | #1 | sl-perception |
| RealSense + RPLIDAR ROS2 driver integration | ✅ MERGED | #17 | sl-perception | | RealSense + RPLIDAR ROS2 driver integration | ✅ MERGED | #17 | sl-perception |
| Multi-variant branch strategy | ⏳ Salty reviewing | #29 | sl-firmware |
### Physical Build Checklist
- [ ] Laser-cut / 3D-print base plate (270x240mm)
- [ ] Machine dropout clamps for D-cut axles (16.11mm base, 13mm flat)
- [ ] Mount hub motors to base plate
- [ ] Weld/assemble vertical stem (80-120cm)
- [ ] Print battery carousel clamp
- [ ] Mount FC (MAMBA F722S) with M3 standoffs
- [ ] Wire ESC → motors, battery → ESC
- [ ] Flash firmware and test USB CDC connection
- [ ] First balance test (tethered)
--- ---
## Phase 2: Autonomous Navigation — PLANNED 🗺️ ## Phase 2: Autonomous Navigation — NEARLY COMPLETE 🗺️
Goal: Indoor SLAM, mapping, obstacle avoidance, person following. Goal: Indoor SLAM, mapping, obstacle avoidance, person following, outdoor prep.
**Prerequisites:** Phase 1 hardware-tested on real robot, Jetson mounted, sensors calibrated. ### Phase 2a: RC + Core Integration — COMPLETE ✅
| Feature | Priority | Agent | Notes | | Feature | Status | PR | Agent |
|---------|----------|-------|-------| |---------|--------|----|-------|
| CRSF RC integration (ELRS) | P1 | sl-firmware | BetaFPV 2.4GHz TX/RX for manual control | | CRSF/ELRS RC integration (420kbaud UART4 DMA) | ✅ MERGED | #35 | sl-firmware |
| Autonomous/RC mode switch | P1 | sl-controls | RC override with smooth handoff to autonomous | | Autonomous/RC mode switch (CH6, 500ms blend ramp) | ✅ MERGED | #33 | sl-controls |
| Jetson → STM32 command protocol | P1 | sl-jetson | Speed/steer from Nav2 → serial → STM32 | | Jetson → STM32 command protocol | ✅ MERGED | #34 | sl-jetson |
| RTAB-Map SLAM integration | P2 | sl-perception | Primary: RTAB-Map. Fallback: ORB-SLAM3 | | Gyro recalibration button + IWDG fix | ✅ MERGED | #39 | sl-firmware |
| Nav2 path planning | P2 | sl-perception | Occupancy grid → Nav2 planner | | Yaw inversion fix | ✅ MERGED | #40 | sl-firmware |
| Obstacle avoidance | P2 | sl-perception | RPLIDAR + depth camera costmaps | | SaltyBot 3D model in web UI | ✅ MERGED | #41 | sl-firmware |
| Person detection + following | P3 | sl-jetson | RealSense + CUDA inference on Nano | | Web UI overhaul — HUD dashboard | ✅ MERGED | #45 | sl-firmware |
| Outdoor waypoint navigation | P3 | sl-perception | GPS if needed | | Modern web UI dashboard | ✅ MERGED | #47 | sl-webui |
### SLAM Architecture (from sl-perception's plan) ### Phase 2b: SLAM + Navigation — COMPLETE ✅
| Feature | Status | PR | Agent |
|---------|--------|----|-------|
| RTAB-Map SLAM (Orin Nano Super, JetPack 6) | ✅ MERGED | #36 | sl-perception |
| URDF robot description + static TF | ✅ MERGED | #50 | sl-firmware |
| Nav2 path planning + obstacle avoidance (DWB+NavFn) | ✅ MERGED | #49 | sl-perception |
| Nav2 cmd_vel → STM32 velocity bridge (37 tests) | ✅ MERGED | #46 | sl-controls |
| Rosbridge WebSocket (ROS2 ↔ browser, port 9090) | ✅ MERGED | #53 | sl-firmware |
### Phase 2c: Sensors + Person Following — COMPLETE ✅
| Feature | Status | PR | Agent |
|---------|--------|----|-------|
| Orin Nano Super platform + 4× IMX219 CSI cameras | ✅ MERGED | #51 | sl-jetson |
| 4× IMX219 surround vision + Nav2 costmap layer | ✅ MERGED | #52 | sl-perception |
| Person detection + tracking (YOLOv8n TensorRT, 26 tests) | ✅ MERGED | #54 | sl-jetson |
| Person-following control loop (53 tests) | ✅ MERGED | #55 | sl-controls |
| Sensor head mounts (RPLIDAR, RealSense, 4× IMX219) | ✅ MERGED | #48 | sl-mechanical |
| Bumper + frame protection (roll cage, base bumper, stem guards) | ✅ MERGED | #56 | sl-mechanical |
### Phase 2d/2e: Outdoor + UWB + Cellular — IN PROGRESS 🔧
| Feature | Status | Issue | Agent |
|---------|--------|-------|-------|
| UWB follow-me system (3× MaUWB ESP32-S3 DW3000) | 🔧 In progress | #57 | sl-jetson |
| SIM7600X 4G cellular + GPS | 🔧 In progress | #58 | sl-controls |
| Outdoor nav — OSM routing + geofence + RTK GPS plan | 🔧 In progress | #59 | sl-perception |
| UWB tag enclosure + anchor mounts | 🔧 In progress | #57 | sl-mechanical |
| Remote e-stop over 4G MQTT | 🔧 In progress | #60 | sl-firmware |
| UWB + outdoor + e-stop dashboard panels | 🔧 In progress | — | sl-webui |
### Architecture
``` ```
RPLIDAR A1M8 ──→ rplidar_ros ──→┐ RPLIDAR A1M8 ──→ rplidar_ros ──→┐
├──→ rtabmap_ros ──→ Nav2 ├──→ rtabmap_ros ──→ Nav2
RealSense D435i ──→ realsense2 ─┘ ↑ RealSense D435i ──→ realsense2 ─┘ ↑
slam_toolbox (fallback) 4× IMX219 ──→ surround_costmap ──→ Nav2 costmap
UWB anchors ──→ saltybot_uwb ──→ person_follower
SIM7600X ──→ gpsd ──→ /gps/fix ──→ outdoor_nav
└──→ MQTT bridge ──→ remote telemetry + e-stop
``` ```
--- ---
@ -112,16 +133,19 @@ RealSense D435i ──→ realsense2 ─┘ ↑
| Component | Specs | | Component | Specs |
|-----------|-------| |-----------|-------|
| **FC** | MAMBA F722S (STM32F722RET6, MPU6000, CW270 mount) | | **FC** | MAMBA F722S (STM32F722RET6, MPU6000, CW270 mount) |
| **Motors** | 2x 8" pneumatic hoverboard hub motors (10x2.125, 35 PSI) | | **Motors** | 2× 8" pneumatic hoverboard hub motors (10×2.125, 35 PSI) |
| **Axle** | Stepped D-cut: 16.11mm base, 15.95mm shaft, 13mm flat, 65.5mm total protrusion | | **Axle** | Stepped D-cut: 16.11mm base, 15.95mm shaft, 13mm flat, 65.5mm total protrusion |
| **ESC** | Hoverboard ESC (EFeru FOC firmware) | | **ESC** | Hoverboard ESC (EFeru FOC firmware) |
| **Batteries** | 420x88x56mm packs, 2-4 mounted vertically on central stem | | **Batteries** | 420×88×56mm packs, 2-4 mounted vertically on central stem |
| **Base Plate** | 270mm wide × 240mm deep, wheels extend beyond edges | | **Base Plate** | 270mm wide × 240mm deep, wheels extend beyond edges |
| **Total Height** | 80-120cm (ground to top of stem) | | **Total Height** | 80-120cm (ground to top of stem) |
| **RC** | BetaFPV ELRS 2.4GHz TX + RX | | **RC** | BetaFPV ELRS 2.4GHz TX + RX |
| **AI Brain** | Jetson Nano 4GB + Noctua fan | | **AI Brain** | NVIDIA Jetson Orin Nano Super (67 TOPS, 8GB, JetPack 6, NVMe) |
| **Depth Camera** | Intel RealSense D435i (stereo depth 0.1-10m, 848×480@90fps, BMI055 IMU) | | **Depth Camera** | Intel RealSense D435i (stereo depth 0.1-10m, 848×480@30fps, BMI055 IMU) |
| **Surround Vision** | 4× IMX219 160° CSI cameras (90° intervals, 640×480@30fps each) |
| **LIDAR** | RPLIDAR A1M8 (360°, 12m range, 8000 samples/s, ~5.5Hz) | | **LIDAR** | RPLIDAR A1M8 (360°, 12m range, 8000 samples/s, ~5.5Hz) |
| **UWB** | 3× MaUWB ESP32-S3 DW3000 (500m range, ±10cm, 100Hz) — 2 anchors + 1 tag |
| **Cellular** | Waveshare SIM7600X 4G HAT (LTE Cat-4, GPS/GLONASS/BeiDou/Galileo) |
| **Spare IMUs** | BNO055, MPU6050 | | **Spare IMUs** | BNO055, MPU6050 |
--- ---
@ -130,11 +154,12 @@ RealSense D435i ──→ realsense2 ─┘ ↑
| Agent | Role | Specialty | | Agent | Role | Specialty |
|-------|------|-----------| |-------|------|-----------|
| **sl-firmware** | Embedded lead | STM32 HAL, USB, peripheral drivers, I2C sensors | | **sl-firmware** | Embedded lead | STM32 HAL, USB, peripheral drivers, I2C sensors, rosbridge |
| **sl-controls** | Control systems | PID, sensor fusion, motor control, safety | | **sl-controls** | Control systems | PID, sensor fusion, motor control, safety, cmd_vel bridge |
| **sl-perception** | SLAM/perception | ROS2, RTAB-Map, sensor integration, Nav2 | | **sl-perception** | SLAM/perception | ROS2, RTAB-Map, Nav2, surround vision, outdoor nav |
| **sl-mechanical** | 3D design | OpenSCAD, chassis, mechanical design | | **sl-mechanical** | 3D design | OpenSCAD, chassis, sensor mounts, bumpers, enclosures |
| **sl-jetson** | Jetson platform | Docker, ROS2, serial bridge, CUDA inference | | **sl-jetson** | Jetson/AI platform | Docker, ROS2, serial bridge, CUDA/TensorRT inference, UWB |
| **sl-webui** | Web UI | Dashboard, telemetry display, Three.js, Tailwind, roslibjs |
| **max** | PM (Opus) | Orchestrates via iTerm + MQTT, doesn't write code | | **max** | PM (Opus) | Orchestrates via iTerm + MQTT, doesn't write code |
--- ---
@ -148,7 +173,60 @@ RealSense D435i ──→ realsense2 ─┘ ↑
| #12 | Roll displays as pitch in web UI | sl-firmware | #14 | | #12 | Roll displays as pitch in web UI | sl-firmware | #14 |
| #13 | No yaw in telemetry | sl-firmware | #14 | | #13 | No yaw in telemetry | sl-firmware | #14 |
| #15 | 3D model axes wrong (CW270) | sl-firmware | #20 | | #15 | 3D model axes wrong (CW270) | sl-firmware | #20 |
| #18 | Base plate dimensions wrong | sl-mechanical | #11 |
| #21 | Yaw drifts when stationary | sl-controls | #25 | | #21 | Yaw drifts when stationary | sl-controls | #25 |
| #22 | Status LEDs blink too much | sl-firmware | #26 | | #22 | Status LEDs blink too much | sl-firmware | #26 |
| #23 | Gyro bias calibration needed | sl-controls | #25 | | #23 | Gyro bias calibration needed | sl-controls | #25 |
| #24 | Magnetometer + barometer support | sl-firmware | #27 | | #24 | Magnetometer + barometer support | sl-firmware | #27 |
| #28 | Multi-variant branch strategy | sl-firmware | #29 |
| #32 | Gyro recalibration button | sl-firmware | #39 |
| #37 | 3D robot model | sl-firmware | #41 |
| #38 | Yaw inversion in web UI | sl-firmware | #40 |
| #42 | Gyro cal USB disconnect (IWDG) | sl-firmware | #39 |
| #43 | Web UI overhaul | sl-webui | #47 |
| #44 | sl-webui agent credentials | max | Created agent |
---
## All Merged PRs
| PR | Title | Agent |
|----|-------|-------|
| #1 | SLAM setup technical plan | sl-perception |
| #2 | MPU6000 sensor fusion | sl-controls |
| #3 | Runtime PID tuning via USB | sl-controls |
| #4 | Safety systems (watchdog, interlock, tilt) | sl-controls |
| #6 | USB CDC TX fix (first pass) | sl-firmware |
| #7 | Parametric chassis frame | sl-mechanical |
| #8 | Jetson Nano platform setup | sl-jetson |
| #10 | USB CDC DCache fix (MPU non-cacheable) | sl-firmware |
| #11 | Base plate + stem + battery carousel | sl-mechanical |
| #14 | Roll axis + yaw telemetry | sl-firmware |
| #16 | STM32 serial bridge | sl-jetson |
| #17 | RealSense + RPLIDAR drivers | sl-perception |
| #19 | Motor driver (differential drive) | sl-controls |
| #20 | CW270 axis mapping | sl-firmware |
| #25 | Gyro boot calibration | sl-controls |
| #26 | Status LEDs | sl-firmware |
| #27 | Magnetometer + barometer auto-detect | sl-firmware |
| #29 | Multi-variant branch strategy | sl-firmware |
| #31 | BME280 full readout | sl-firmware |
| #33 | Autonomous/RC mode switch | sl-controls |
| #34 | Jetson → STM32 command protocol | sl-jetson |
| #35 | CRSF/ELRS RC integration | sl-firmware |
| #36 | SLAM Orin Nano Super update | sl-perception |
| #39 | Gyro recal button + IWDG fix | sl-firmware |
| #40 | Yaw inversion fix | sl-firmware |
| #41 | SaltyBot 3D model | sl-firmware |
| #45 | Web UI HUD dashboard | sl-firmware |
| #46 | Nav2 cmd_vel → STM32 bridge | sl-controls |
| #47 | Modern web UI dashboard | sl-webui |
| #48 | Sensor head mounts | sl-mechanical |
| #49 | Nav2 path planning + obstacle avoidance | sl-perception |
| #50 | URDF robot description + static TF | sl-firmware |
| #51 | Orin Nano platform + 4× IMX219 cameras | sl-jetson |
| #52 | 4× IMX219 surround vision + Nav2 costmap | sl-perception |
| #53 | Rosbridge WebSocket | sl-firmware |
| #54 | Person detection (YOLOv8n TensorRT) | sl-jetson |
| #55 | Person-following control loop | sl-controls |
| #56 | Bumper + frame protection | sl-mechanical |