Add battery_node.py: - Subscribes /saltybot/telemetry/battery (JSON from stm32_cmd_node) - Publishes sensor_msgs/BatteryState on /saltybot/battery at 1 Hz - SoC source priority: STM32 fuel gauge soc_pct field → fallback to 3S LiPo voltage curve (12-point lookup with linear interpolation) - Charging detection: current_ma < -100 mA threshold - Alert levels: WARNING (20%)→speed 60%, CRITICAL (10%)→speed 30%, EMERGENCY (5%)→zero /cmd_vel + /saltybot/arm(False) disarm - /saltybot/battery/alert JSON topic on threshold crossings - /saltybot/speed_limit Float32 (0.0-1.0) for nav speed capping - SQLite history logging: /var/log/saltybot/battery.db, 7-day retention - Hourly prune timer to keep DB bounded Add test_battery.py (70+ tests, no ROS2 runtime): - SoC lookup: all curve points, interpolation, clamping, 3S/4S packs - Alert level thresholds and transitions for all levels - Speed factor assignments per alert level - Charging detection logic - sensor_msgs/BatteryState field population - SQLite insert/retrieve/prune (in-memory and on-disk) - JSON telemetry parsing: normal, charging, soc_pct=0 fallback Add battery_params.yaml, battery.launch.py. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
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%