Add stm32_protocol.py — pure-Python binary frame codec: - Frame: STX(0x02)+TYPE+LEN+PAYLOAD+CRC16-CCITT(BE)+ETX(0x03) - CRC covers TYPE+LEN+PAYLOAD; polynomial 0x1021, init 0xFFFF - Encoders: HEARTBEAT, SPEED_STEER(-1000..+1000 int16), ARM, SET_MODE, PID_UPDATE - Telemetry decoders: ImuFrame, BatteryFrame, MotorRpmFrame, ArmStateFrame, ErrorFrame - FrameParser: streaming byte-by-byte state machine, resync on corrupt data Add stm32_cmd_node.py — ROS2 bidirectional bridge node: - /cmd_vel → SPEED_STEER at up to 50 Hz - HEARTBEAT timer (default 200ms); STM32 watchdog fires at 500ms - Jetson-side watchdog: no /cmd_vel for 500ms → send SPEED_STEER(0,0) - /saltybot/arm service (SetBool) → ARM frame - /saltybot/pid_update topic → PID_UPDATE frame - Telemetry RX: IMU→/saltybot/imu, BATTERY→/saltybot/telemetry/battery, MOTOR_RPM→/saltybot/telemetry/motor_rpm, ARM_STATE→/saltybot/arm_state, ERROR→/saltybot/error - Auto-reconnect on USB disconnect (serial.SerialException caught) - Zero-speed + disarm sent on node shutdown - /diagnostics with serial health, frame counts, last cmd age Add test_stm32_protocol.py (60+ tests): - CRC16-CCITT correctness, known test vectors - All encoder output structures and payload values - FrameParser: all telemetry types, bad CRC, bad ETX, resync, streaming, oversized payload, frame counters, reset Add test_stm32_cmd_node.py (30+ tests): - MockSerial: TX/RX byte-level testing without hardware - Speed/steer clamping, scaling, frame structure - Watchdog fires/doesn't fire relative to timeout - CRC error counted, resync after garbage Add stm32_cmd_params.yaml, stm32_cmd.launch.py. Update package.xml (add std_srvs, geometry_msgs deps). Update setup.py (add stm32_cmd_node entry point + new config/launch). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
34 lines
1.2 KiB
XML
34 lines
1.2 KiB
XML
<?xml version="1.0"?>
|
|
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
|
|
<package format="3">
|
|
<name>saltybot_bridge</name>
|
|
<version>0.1.0</version>
|
|
<description>
|
|
STM32F722 USB CDC serial bridge for saltybot.
|
|
serial_bridge_node: JSON telemetry RX → sensor_msgs/Imu + diagnostics.
|
|
stm32_cmd_node (Issue #119): binary-framed protocol — STX/TYPE/LEN/CRC16/ETX,
|
|
commands: HEARTBEAT, SPEED_STEER, ARM, SET_MODE, PID_UPDATE;
|
|
telemetry: IMU, BATTERY, MOTOR_RPM, ARM_STATE, ERROR; watchdog 500ms.
|
|
battery_node (Issue #125): SoC tracking, threshold alerts, SQLite history.
|
|
</description>
|
|
<maintainer email="sl-jetson@saltylab.local">sl-jetson</maintainer>
|
|
<license>MIT</license>
|
|
|
|
<depend>rclpy</depend>
|
|
<depend>python3-paho-mqtt</depend>
|
|
<depend>sensor_msgs</depend>
|
|
<depend>std_msgs</depend>
|
|
<depend>std_srvs</depend>
|
|
<depend>geometry_msgs</depend>
|
|
<depend>diagnostic_msgs</depend>
|
|
|
|
<test_depend>ament_copyright</test_depend>
|
|
<test_depend>ament_flake8</test_depend>
|
|
<test_depend>ament_pep257</test_depend>
|
|
<test_depend>python3-pytest</test_depend>
|
|
|
|
<export>
|
|
<build_type>ament_python</build_type>
|
|
</export>
|
|
</package>
|