sl-mechanical a2c554c232 cleanup: remove all Mamba/F722S/STM32F722 refs — replace with ESP32-S3 BALANCE/IO
- docs/: rewrite AGENTS.md, wiring-diagram.md (SAUL-TEE arch); update
  SALTYLAB.md, FACE_LCD_ANIMATION.md, board-viz.html, SALTYLAB-DETAILED refs
- cad/: dimensions.scad FC params → ESP32-S3 BALANCE params
- chassis/: ASSEMBLY.md, BOM.md, ip54_BOM.md, *.scad — FC_MOUNT_SPACING/
  FC_PITCH → TBD ESP32-S3; Drone FC → MCU mount throughout
- CLAUDE.md, TEAM.md: project desc → SAUL-TEE; hardware table → ESP32-S3/VESC
- USB_CDC_BUG.md: marked ARCHIVED (legacy STM32 era)
- AUTONOMOUS_ARMING.md: USB CDC → inter-board UART (ESP32-S3 BALANCE)
- projects/saltybot/SLAM-SETUP-PLAN.md: FC/STM32F722 → BALANCE/CAN
- jetson/docs/pinout.md, power-budget.md, README.md: STM32 bridge → CAN bridge
- jetson/config/RECOVERY_BEHAVIORS.md: FC+Hoverboard → BALANCE+VESC
- jetson/ros2_ws: stm32_protocol.py → esp32_protocol.py,
  stm32_cmd_node.py → esp32_cmd_node.py,
  mamba_protocol.py → balance_protocol.py; can_bridge_node imports updated
- scripts/flash_firmware.py: DFU/STM32 → pio run -t upload
- src/ include/: ARCHIVED headers added (legacy code preserved)
- test/: ARCHIVED notices; STM32F722 comments marked LEGACY
- ui/diagnostics_panel.html: Board/STM32 → ESP32-S3

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 09:06:09 -04:00

2.4 KiB

SaltyLab Firmware — Agent Playbook

Project

SAUL-TEE 4-wheel wagon robot: ESP32-S3 BALANCE (PID/CAN), ESP32-S3 IO (RC/sensors), Jetson Orin Nano Super (ROS2/SLAM).

Team

Agent Role Focus
sl-firmware Embedded Firmware Lead ESP32-S3 firmware (Arduino/IDF), PlatformIO, CAN bus, inter-board UART protocol
sl-controls Control Systems Engineer PID tuning, IMU sensor fusion, real-time control loops, safety systems
sl-perception Perception / SLAM Engineer Jetson Orin, RealSense D435i, RPLIDAR, ROS2, Nav2

Status

USB CDC TX bug resolved (PR #10 — DCache MPU non-cacheable region + IWDG ordering fix).

Repo Structure

  • projects/saltybot/SALTYLAB.md — Design doc
  • USB_CDC_BUG.md — USB peripheral conflict details
  • TEAM.md — Team roles specification

Branch Strategy (issue #28)

Variant branches

Branch Purpose
saltylab Stable — SaltyLab 2-wheel balance bot (promoted from saltylab-dev)
saltylab-dev Integration — SaltyLab balance bot; agents target this branch
saltyrover Stable — 4-wheel rover variant
saltyrover-dev Integration — rover variant
saltytank Stable — tracked tank variant
saltytank-dev Integration — tank variant
main Shared code only (IMU drivers, USB CDC, balance core, safety)

Rules

  • Agents branch FROM <variant>-dev and PR back TO <variant>-dev
  • Shared/infrastructure code (IMU drivers, USB CDC, balance core, safety) goes in main
  • Variant-specific code (motor topology, kinematics, config) goes in variant branches
  • Stable branches get promoted from -dev after review and hardware testing
  • Current SaltyLab team works against saltylab-dev

Git Workflow

  • Branch naming: <agent>/<slug> (e.g., sl-firmware/usb-cdc-fix)
  • For shared code targeting main: <agent>/bd-<id>-<slug>
  • Before every push: git fetch origin && git rebase origin/<base-branch>
  • Gitea: gitea.vayrette.com/seb/saltylab-firmware

Communication

  • Report progress to max via MQTT: AGENT_NAME=<agent> ~/agent-mqtt/agent-send max "<message>"
  • Check inbox: ~/agent-mqtt/agent-read 2>/dev/null | tail -15
  • Prioritize messages from max (PM)

Beads (Task System)

cd /Users/seb/AI/saltylab-firmware
br list                    # List open beads
br update <id> --claim     # Claim a bead
br close <id> --reason "Done. PR #N"
br comment <id> "message"