New package: saltybot_vesc_health - recovery_fsm.py: pure state machine (no ROS2/CAN deps; fully unit-tested) - VescHealthState: HEALTHY → DEGRADED (>500 ms) → ESTOP (>2 s) / BUS_OFF - VescMonitor.tick(): drives recovery sequence per VESC; startup-safe - VescMonitor.on_frame(): resets state on CAN frame arrival - VescMonitor.on_bus_off/on_bus_ok(): bus-off override + recovery - HealthFsm: dual-VESC wrapper aggregating both monitors - health_monitor_node.py: ROS2 node - Subscribes /vesc/left/state + /vesc/right/state (JSON from vesc_telemetry) - Sends GET_VALUES alive frames via SocketCAN on DEGRADED state - Publishes /vesc/health (JSON, 10 Hz) — state, elapsed, recent faults - Publishes /diagnostics (DiagnosticArray, OK/WARN/ERROR per VESC) - Publishes /estop (JSON event) + zero /cmd_vel on e-stop trigger/clear - Polls ip link for bus-off state (1 Hz) - 200-entry fault event log included in /vesc/health - test/test_vesc_health.py: 39 unit tests, all passing, no hardware needed - config/vesc_health_params.yaml, launch/vesc_health.launch.py Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Merge pull request 'feat: Nav2 AMCL integration (Issue #655)' (#664) from sl-perception/issue-655-nav2-integration 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%