3
Roadmap
seb edited this page 2026-03-03 23:14:00 -05:00
This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

SaltyBot Roadmap

Last updated: 2026-03-03 by salty 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
BME280 full readout (temp/humidity/pressure) MERGED #31 sl-firmware
CW270 IMU axis mapping for MAMBA F722S MERGED #20 sl-firmware

Phase 1.5: Mechanical + Platform — COMPLETE

Goal: Physical chassis and compute platform ready for testing.

Feature Status PR Agent
Parametric chassis frame (OpenSCAD) MERGED #7 sl-mechanical
Prototype base plate (270×240mm) + vertical stem + battery carousel MERGED #11 sl-mechanical
Multi-variant branch strategy MERGED #29 sl-firmware
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

Phase 2: Autonomous Navigation — NEARLY COMPLETE 🗺️

Goal: Indoor SLAM, mapping, obstacle avoidance, person following, outdoor prep.

Phase 2a: RC + Core Integration — COMPLETE

Feature Status PR Agent
CRSF/ELRS RC integration (420kbaud UART4 DMA) MERGED #35 sl-firmware
Autonomous/RC mode switch (CH6, 500ms blend ramp) MERGED #33 sl-controls
Jetson → STM32 command protocol MERGED #34 sl-jetson
Gyro recalibration button + IWDG fix MERGED #39 sl-firmware
Yaw inversion fix MERGED #40 sl-firmware
SaltyBot 3D model in web UI MERGED #41 sl-firmware
Web UI overhaul — HUD dashboard MERGED #45 sl-firmware
Modern web UI dashboard MERGED #47 sl-webui

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
VESC integration + balance mode testing 📦 Hardware ordered TBD sl-controls
Pan/tilt camera head (servos + bracket) 📦 Hardware ordered TBD sl-mechanical
VESC UART protocol (pyvesc) integration Blocked on VESC arrival TBD sl-jetson
UWB + outdoor + e-stop dashboard panels 🔧 In progress sl-webui

Architecture Change: VESC Balance Mode (Proposed)

If VESC built-in balance app works with MPU6050 over I2C, the drone FC can be eliminated entirely:

Current:  Jetson → FC (PID balance) → Hoverboard ESC → Motors
Proposed: Jetson → VESC (balance + motors) ← MPU6050 (I2C)

This simplifies the stack from 3 boards to 2 and removes the FC UART bottleneck (issues #356, #362).

Architecture

RPLIDAR A1M8 ──→ rplidar_ros ──→┐
                                 ├──→ rtabmap_ros ──→ Nav2
RealSense D435i ──→ realsense2 ─┘         ↑
4× IMX219 ──→ surround_costmap ──→ Nav2 costmap
UWB anchors ──→ saltybot_uwb ──→ person_follower
SIM7600X ──→ gpsd ──→ /gps/fix ──→ outdoor_nav
         └──→ MQTT bridge ──→ remote telemetry + e-stop

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 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
ESC Hoverboard ESC (EFeru FOC firmware)
Batteries 420×88×56mm 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 NVIDIA Jetson Orin Nano Super (67 TOPS, 8GB, JetPack 6, NVMe)
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)
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
ESC (new) Flipsky Dual FSESC 4.20 Plus (VESC, 50A/side, 60V, built-in balance app) — ordered Mar 3
ESC (old) Hoverboard ESC (EFeru FOC firmware) — may retire if VESC balance works
Pan/Tilt Servos 2× Waveshare ST3215 (30kg.cm, 12-bit encoder, SCS serial bus 1Mbps) — ordered Mar 3
Servo Driver Waveshare ESP32 Servo Driver Board (bench testing) — ordered Mar 3
Candidate Motors Ninebot XW60-350 (350W, 10.5" pneumatic, 60V) — evaluating as wheel upgrade

Agent Team

Agent Role Specialty
sl-firmware Embedded lead STM32 HAL, USB, peripheral drivers, I2C sensors, rosbridge
sl-controls Control systems PID, sensor fusion, motor control, safety, cmd_vel bridge
sl-perception SLAM/perception ROS2, RTAB-Map, Nav2, surround vision, outdoor nav
sl-mechanical 3D design OpenSCAD, chassis, sensor mounts, bumpers, enclosures
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

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
#18 Base plate dimensions wrong sl-mechanical #11
#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
#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