Add "Roadmap"

sl-jetson 2026-02-28 18:58:42 -05:00
parent 5cf7dec267
commit e9bff172e5

154
Roadmap.md Normal file

@ -0,0 +1,154 @@
# SaltyBot Roadmap
**Last updated:** 2026-02-28 by max (PM)
**Project:** Self-balancing two-wheeled robot → autonomous navigation platform
**Repo:** https://gitea.vayrette.com/seb/saltylab-firmware
---
## Variants
| Variant | Description | Branch (stable) | Branch (dev) |
|---------|-------------|-----------------|--------------|
| **SaltyLab** | 2-wheel self-balancing robot (primary) | `saltylab` | `saltylab-dev` |
| **SaltyRover** | 4-wheel rover chassis | `saltyrover` | `saltyrover-dev` |
| **SaltyTank** | Tracked/tank variant | `saltytank` | `saltytank-dev` |
Shared firmware (IMU drivers, USB CDC, sensor fusion) lives in `main`. Variant-specific code in variant branches.
---
## Phase 1: Self-Balancing — COMPLETE ✅
Goal: Robot stands upright on two wheels using PID control.
| Feature | Status | PR | Agent |
|---------|--------|----|-------|
| USB CDC TX fix (DCache + buffer + IMU API) | ✅ MERGED | #6, #10 | sl-firmware |
| MPU6000 sensor fusion (complementary filter) | ✅ MERGED | #2 | sl-controls |
| Runtime PID tuning via USB terminal | ✅ MERGED | #3 | sl-controls |
| Safety systems (watchdog, arm interlock, tilt cutoff) | ✅ MERGED | #4 | sl-controls |
| Motor driver (FOC ESC + differential drive mixer) | ✅ MERGED | #19 | sl-controls |
| Roll/yaw telemetry + 3D web UI visualization | ✅ MERGED | #14, #20 | sl-firmware |
| Gyro boot calibration (eliminates yaw drift) | ✅ MERGED | #25 | sl-controls |
| Status LEDs (solid=OK, blink=error) | ✅ MERGED | #26 | sl-firmware |
| Magnetometer + barometer auto-detect | ✅ MERGED | #27 | 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 🔧
Goal: Physical chassis and compute platform ready for testing.
| Feature | Status | PR | Agent |
|---------|--------|----|-------|
| Parametric chassis frame (OpenSCAD) | ✅ MERGED | #7 | sl-mechanical |
| Prototype base plate (real hub motor measurements) | ✅ MERGED | #11 | sl-mechanical |
| Vertical stem + battery carousel (2-4 packs) | ✅ MERGED | #11 | sl-mechanical |
| Base plate dimensions fix (270x240mm) | ⏳ Salty reviewing | #11 | sl-mechanical |
| Jetson Nano Docker env (JetPack 4.6 + ROS2 Humble) | ✅ MERGED | #8 | sl-jetson |
| STM32-to-Jetson ROS2 serial bridge | ✅ MERGED | #16 | sl-jetson |
| SLAM setup technical plan | ✅ MERGED | #1 | 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 🗺️
Goal: Indoor SLAM, mapping, obstacle avoidance, person following.
**Prerequisites:** Phase 1 hardware-tested on real robot, Jetson mounted, sensors calibrated.
| Feature | Priority | Agent | Notes |
|---------|----------|-------|-------|
| CRSF RC integration (ELRS) | P1 | sl-firmware | BetaFPV 2.4GHz TX/RX for manual control |
| Autonomous/RC mode switch | P1 | sl-controls | RC override with smooth handoff to autonomous |
| Jetson → STM32 command protocol | P1 | sl-jetson | Speed/steer from Nav2 → serial → STM32 |
| RTAB-Map SLAM integration | P2 | sl-perception | Primary: RTAB-Map. Fallback: ORB-SLAM3 |
| Nav2 path planning | P2 | sl-perception | Occupancy grid → Nav2 planner |
| Obstacle avoidance | P2 | sl-perception | RPLIDAR + depth camera costmaps |
| Person detection + following | P3 | sl-jetson | RealSense + CUDA inference on Nano |
| Outdoor waypoint navigation | P3 | sl-perception | GPS if needed |
### SLAM Architecture (from sl-perception's plan)
```
RPLIDAR A1M8 ──→ rplidar_ros ──→┐
├──→ rtabmap_ros ──→ Nav2
RealSense D435i ──→ realsense2 ─┘ ↑
slam_toolbox (fallback)
```
---
## Phase 3: Multi-Variant Expansion — FUTURE 🚀
| Feature | Variant | Notes |
|---------|---------|-------|
| SaltyRover chassis design | saltyrover | 4-wheel differential or Ackermann steering |
| SaltyRover motor driver | saltyrover | 4-wheel independent speed control |
| SaltyTank track driver | saltytank | Tracked drive, skid steering |
| Variant-specific control loops | all | Rover/tank: no balance PID needed |
| Shared sensor abstraction layer | all | Common IMU/mag/baro/motor interface across variants |
---
## Hardware Reference
| Component | Specs |
|-----------|-------|
| **FC** | MAMBA F722S (STM32F722RET6, MPU6000, CW270 mount) |
| **Motors** | 2x 8" pneumatic hoverboard hub motors (10x2.125, 35 PSI) |
| **Axle** | Stepped D-cut: 16.11mm base, 15.95mm shaft, 13mm flat, 65.5mm total protrusion |
| **ESC** | Hoverboard ESC (EFeru FOC firmware) |
| **Batteries** | 420x88x56mm packs, 2-4 mounted vertically on central stem |
| **Base Plate** | 270mm wide × 240mm deep, wheels extend beyond edges |
| **Total Height** | 80-120cm (ground to top of stem) |
| **RC** | BetaFPV ELRS 2.4GHz TX + RX |
| **AI Brain** | Jetson Nano 4GB + Noctua fan |
| **Depth Camera** | Intel RealSense D435i (stereo depth 0.1-10m, 848×480@90fps, BMI055 IMU) |
| **LIDAR** | RPLIDAR A1M8 (360°, 12m range, 8000 samples/s, ~5.5Hz) |
| **Spare IMUs** | BNO055, MPU6050 |
---
## Agent Team
| Agent | Role | Specialty |
|-------|------|-----------|
| **sl-firmware** | Embedded lead | STM32 HAL, USB, peripheral drivers, I2C sensors |
| **sl-controls** | Control systems | PID, sensor fusion, motor control, safety |
| **sl-perception** | SLAM/perception | ROS2, RTAB-Map, sensor integration, Nav2 |
| **sl-mechanical** | 3D design | OpenSCAD, chassis, mechanical design |
| **sl-jetson** | Jetson platform | Docker, ROS2, serial bridge, CUDA inference |
| **max** | PM (Opus) | Orchestrates via iTerm + MQTT, doesn't write code |
---
## Resolved Issues
| # | Title | Fixed By | PR |
|---|-------|----------|-----|
| #5 | Need 2 more team members | max | Recruited sl-mechanical + sl-jetson |
| #9 | USB CDC TX breaks with IMU init | sl-firmware | #10 |
| #12 | Roll displays as pitch in web UI | sl-firmware | #14 |
| #13 | No yaw in telemetry | sl-firmware | #14 |
| #15 | 3D model axes wrong (CW270) | sl-firmware | #20 |
| #21 | Yaw drifts when stationary | sl-controls | #25 |
| #22 | Status LEDs blink too much | sl-firmware | #26 |
| #23 | Gyro bias calibration needed | sl-controls | #25 |
| #24 | Magnetometer + barometer support | sl-firmware | #27 |