Adds mode_manager.c/h: three operating modes selected by RC CH6 (3-pos switch), smoothly interpolated over ~500ms to prevent jerky transitions. Modes: RC_MANUAL (blend=0.0) — RC CH4 steer + CH3 speed bias; balance PID active RC_ASSISTED (blend=0.5) — 50/50 blend of RC and Jetson autonomous commands AUTONOMOUS (blend=1.0) — Jetson steer only; RC CH5 still kills motors Key design: - Single `blend` float (0=RC, 1=auto) drives all lerp; MANUAL→AUTO takes 500ms, adjacent steps take ~250ms - CH6 thresholds: <=600=MANUAL, >=1200=AUTONOMOUS, else ASSISTED - CH4/CH3 read with ±30-count deadband around CRSF center (992) - RC speed bias (CH3, ±300 counts) added to bal.motor_cmd AFTER PID - RC CH5 kill: if rc_alive && !crsf_state.armed → disarm, regardless of mode - Jetson steer fed via mode_manager_set_auto_cmd() → blended in get_steer() - Telemetry: new "md" field (0/1/2) in USB JSON stream - mode_manager_set_auto_cmd() API ready for Jetson serial bridge integration config.h: CRSF channel indices, deadband, speed-bias max, blend timing. Safe on USB-only build: CRSF stub keeps last_rx_ms=0 → rc_alive=false → RC inputs = 0, mode stays RC_MANUAL, CH5 kill never fires. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Merge pull request 'feat(bd-a2j): Sensor driver integration — RealSense D435i + RPLIDAR A1M8' (#17) from sl-perception/bd-a2j-sensor-drivers into main
Description
SaltyLab self-balancing bot firmware (STM32F722)
Languages
Python
67.1%
C
11.4%
JavaScript
9.2%
OpenSCAD
7.8%
HTML
1.5%
Other
2.9%