Adds saltybot_cellular ROS2 package for the Waveshare SIM7600X 4G HAT
(SIMCom SIM7600A-H) providing GPS telemetry, modem monitoring, and
MQTT relay over cellular for remote operation.
gps_driver_node:
- Opens /dev/ttyUSB2 (NMEA), optionally sends AT+CGPS=1 on /dev/ttyUSB0
- Parses GGA (position) + RMC (velocity) from any NMEA talker (GP/GN/GL/GA)
- Validates NMEA checksum before parsing
- Publishes /gps/fix (NavSatFix, covariance from HDOP × ±2.5m CEP)
- Publishes /gps/vel (TwistStamped, ENU vE/vN from course-over-ground)
- Publishes /diagnostics (fix quality, sat count, HDOP)
cellular_manager_node:
- Polls AT+CSQ, AT+CREG?, AT+COPS? every 5s over /dev/ttyUSB0
- Publishes /cellular/status (DiagnosticArray: rssi, network, connected)
- Publishes /cellular/rssi (Int32, dBm) and /cellular/connected (Bool)
- Auto-reconnect via nmcli or pppd when data link drops
mqtt_bridge_node:
- paho-mqtt client (graceful degradation if not installed)
- ROS2→MQTT QoS 0: /saltybot/imu, /gps/fix, /gps/vel, /uwb/ranges,
/person/target, /cellular/status
- MQTT→ROS2 QoS 1: saltybot/cmd→/saltybot/cmd, saltybot/estop→/saltybot/estop
- Per-topic rate limiting (imu:5Hz, gps:1Hz, person:2Hz) → <<50KB/s budget
- Optional TLS, configurable broker/port/prefix/auth
Deliverables:
saltybot_cellular/gps_driver_node.py — 402 lines
saltybot_cellular/cellular_manager_node.py — 362 lines
saltybot_cellular/mqtt_bridge_node.py — 317 lines
config/cellular_params.yaml — full config documented
launch/cellular.launch.py — all nodes, all params as args
test/test_cellular.py — 60 pytest tests, no ROS2
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%