feat: SIM7600X 4G cellular + GPS (#58) #65
Loading…
x
Reference in New Issue
Block a user
No description provided.
Delete Branch "sl-controls/cellular-gps"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #58
Summary
Adds
saltybot_cellularROS2 package for the Waveshare SIM7600X 4G HAT (SIMCom SIM7600A-H, LTE Cat-4, GPS+GLONASS+BeiDou+Galileo).Nodes
gps_driver_node/dev/ttyUSB2, optionally starts GNSS viaAT+CGPS=1on/dev/ttyUSB0/gps/fix(NavSatFix) — lat/lon/alt, covariance from HDOP × ±2.5m CEP/gps/vel(TwistStamped) — ground speed + heading, ENU velocity components/diagnostics— fix quality, satellite count, HDOPcellular_manager_nodeAT+CSQ,AT+CREG?,AT+COPS?every 5s via/dev/ttyUSB0/cellular/status(DiagnosticArray) — rssi dBm, signal quality, network registration, operator/cellular/rssi(Int32, dBm),/cellular/connected(Bool)mqtt_bridge_node/saltybot/imu,/gps/fix,/gps/vel,/uwb/ranges,/person/target,/cellular/statussaltybot/cmd→/saltybot/cmd,saltybot/estop→/saltybot/estoptls_enable: true), configurable broker/port/prefix/authFiles
gps_driver_node.pycellular_manager_node.pymqtt_bridge_node.pyconfig/cellular_params.yamllaunch/cellular.launch.pytest/test_cellular.pyTest coverage
60 tests: NMEA checksum validation, DDMM→decimal degrees, GGA parsing, RMC parsing, HDOP covariance, ENU velocity, AT+CSQ/CREG/COPS parsing, RSSI labelling, MQTT serialisation.
Hardware wiring
Usage
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>