This repository contains utilities for handling and monitoring time-synchronized data in ROS 2. It consists of two main packages: nmea_gpsd for bridging GPS data and topic_monitor for validating message synchronization.
The topic_monitor package is a diagnostic tool used to verify that various ROS 2 topics are active and that their timestamps are synchronized within a specified threshold. It reads a list of target topics from a configuration file, monitors them for 5 seconds, and reports a summary of message counts and synchronization offsets.
topic_monitor_node: The primary C++ node that subscribes to topics and performs timing analysis.
topics_file(string, default:config/topics.yaml): The path to the YAML file listing topics to monitor.relative_path(bool, default:true): If true, the node looks for thetopics_filerelative to the package's share directory.sync_threshold_warn_seconds(double, default:0.1): The time difference (in seconds) between a topic's timestamp and the reference topic that triggers a warning.sync_threshold_error_seconds(double, default:1.0): The time difference that triggers an error.
The nmea_gpsd package is a ROS 2 utility designed to bridge ROS-based NMEA data to the gpsd service. It provides nodes to convert standard ROS messages (like NavSatFix) into NMEA sentences and forward them to gpsd via various protocols.
Note: The serial and TCP implementations in this package are currently considered partially developed and may require further refinement for specific production environments.
This node converts ROS sensor_msgs/msg/NavSatFix and geometry_msgs/msg/TwistWithCovarianceStamped messages into standard NMEA $GPGGA and $GPRMC sentences. These sentences are published to a ROS topic and optionally written to a serial port.
-
Subscribed Topics:
-
gnss_1/llh_position(sensor_msgs/msg/NavSatFix): Source of position and fix status. -
gnss_1/velocity(geometry_msgs/msg/TwistWithCovarianceStamped): Source of speed and course. -
Published Topics:
-
nmea_constructed(nmea_msgs/msg/Sentence): The generated NMEA sentences. -
Parameters:
-
serial_port(string, default:/dev/tnt1): The virtual or physical serial port to write NMEA sentences to. -
baud_rate(int, default:9600): Baud rate for the serial port. -
nmea_talker_id(string, default:GP): The talker ID prefix (e.g.,GPfor GPS,GNfor GLONASS). -
default_num_satellites(int, default:4): Default satellite count used in GGA sentences. -
default_hdop(double, default:1.5): Default Horizontal Dilution of Precision. -
default_geoid_separation(double, default:0.0): Default geoidal separation in meters.
This node acts as a TCP server that listens for a connection from gpsd. Once connected, it forwards NMEA sentences from a ROS topic directly to the TCP client.
-
Subscribed Topics:
-
Defined by
nmea_topicparameter (default:/nmea) (nmea_msgs/msg/Sentence). -
Parameters:
-
gpsd_host(string, default:0.0.0.0): The address the TCP server binds to. -
gpsd_port(int, default:3001): The portgpsdwill connect to. -
nmea_topic(string, default:/nmea): The ROS topic containing NMEA sentences to forward.
This node forwards NMEA data to gpsd via UDP. It can also synthesize $GPRMC sentences by combining raw NMEA GGA data with SBG-specific UTC time messages.
-
Subscribed Topics:
-
nmea_topic(default:/nmea): ROS topic for incoming NMEA sentences. -
utc_topic(default:/sbg/utc_time): ROS topic forsbg_driver/msg/SbgUtcTimeused to generate RMC sentences. -
Parameters:
-
gpsd_host(string, default:127.0.0.1): The destination IP wheregpsdis listening for UDP. -
gpsd_port(int, default:3001): The destination UDP port.
Both packages are licensed under the Apache License 2.0.