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