# SaltyLab Firmware — Agent Playbook ## Project **SAUL-TEE** — 4-wheel wagon robot (870×510×550 mm, 23 kg). Two ESP32-S3 boards + Jetson Orin for AI/ROS2. > **Full hardware spec:** `docs/SAUL-TEE-SYSTEM-REFERENCE.md` ### Embedded boards | Board | Hardware | Role | |-------|----------|------| | **ESP32-S3 BALANCE** | Waveshare Touch LCD 1.28 (CH343 USB) | QMI8658 IMU, PID balance loop, CAN→VESCs (SN65HVD230, 500 kbps) | | **ESP32-S3 IO** | Bare DevKit (JTAG USB) | BTS7960 motors, TBS Crossfire (UART0) + ELRS failover (UART2), NFC/baro/ToF (I2C), WS2812 LEDs, horn/headlight/fan/buzzer | ### Key protocols - **Orin ↔ BALANCE:** CAN 500 kbps via CANable2 (slcan0). Cmds 0x300–0x303, telemetry 0x400–0x401 - **BALANCE ↔ IO:** UART 460800 baud, frame `[0xAA][LEN][TYPE][PAYLOAD][CRC8]` - **VESC IDs:** Left = 56, Right = 68 ## Team | Agent | Role | Focus | |-------|------|-------| | **sl-firmware** | Embedded Firmware Lead | ESP32-S3 firmware (PlatformIO), QMI8658 IMU, PID, VESC CAN, inter-board UART | | **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 Architecture migrated from Mamba F722S/BlackPill → ESP32-S3 BALANCE + IO (PR #712, 2026-04-04). ## 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 `-dev` and PR back TO `-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: `/` (e.g., `sl-firmware/usb-cdc-fix`) - For shared code targeting `main`: `/bd--` - Before every push: `git fetch origin && git rebase origin/` - Gitea: `gitea.vayrette.com/seb/saltylab-firmware` ## Communication - Report progress to max via MQTT: `AGENT_NAME= ~/agent-mqtt/agent-send max ""` - Check inbox: `~/agent-mqtt/agent-read 2>/dev/null | tail -15` - Prioritize messages from max (PM) ## Beads (Task System) ```bash cd /Users/seb/AI/saltylab-firmware br list # List open beads br update --claim # Claim a bead br close --reason "Done. PR #N" br comment "message" ```