From e9bff172e55786331e323ab1283329f83dae0ab5 Mon Sep 17 00:00:00 2001 From: sl-jetson Date: Sat, 28 Feb 2026 18:58:42 -0500 Subject: [PATCH] Add "Roadmap" --- Roadmap.md | 154 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100644 Roadmap.md diff --git a/Roadmap.md b/Roadmap.md new file mode 100644 index 0000000..dd1dce8 --- /dev/null +++ b/Roadmap.md @@ -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 |