Update "Roadmap"
parent
cbd3549caf
commit
9923b48fb8
164
Roadmap.md
164
Roadmap.md
@ -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 |
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user