ROS : lecture des données GPS
Cette fonction lit via le terminal les données du module GPS et analyse les données GPS pour obtenir les données de latitude, de longitude et d'altitude.
1. Lecture des données GPS via le terminal
Saisissez dans le terminal,
ros2 launch nmea_navsat_driver nmea_serial_driver.launch.py
Nous allons ensuite consulter les données des topics ; saisissez dans le terminal,
ros2 topic list
Concernant les données de ces topics GPS, voici une explication,
| Topic | Type | Description |
|---|---|---|
| /extend_fix | gps_common/GPSFix | Le message GPSFix contient l'état des satellites GPS et les informations de position |
| /fix | sensor_msgs/NavSatFix | Informations de position GPS |
| /time_reference | sensor_msgs/TimeReferencd | Informations de temps GPS |
| /vel | geometry_msgs/TwistStamped | Informations de vitesse GPS |
Pour les types de messages de chaque topic, vous pouvez consulter le site officiel ci-dessous,
Documentation sensor_msgs/NavSatFix (ros.org)
Documentation sensor_msgs/TimeReference (ros.org)
Documentation geometry_msgs/TwistStamped (ros.org)
Nous pouvons imprimer ces messages de topics dans le terminal ; ce que nous obtenons correspond aux données GPS. Prenons l'impression de /fix comme exemple, saisissez dans le terminal
ros2 topic echo /fixLe terminal imprime les données suivantes,

Parmi elles, latitude, longitude et altitude représentent respectivement la latitude, la longitude et l'altitude.
2. Lecture de la latitude, de la longitude et de l'altitude des données GPS
Exécutez dans le terminal,
ros2 launch nmea_navsat_driver nmea_serial_driver.launch.pyExécutez dans un autre terminal,
ros2 run nmea_navsat_driver read_lat_long.py
Les données imprimées dans le terminal sont la latitude, la longitude et l'altitude actuelles du module GPS. Regardons le code source, read_lat_long.py
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
import rclpy
from rclpy.node import Node
from sensor_msgs.msg import NavSatFix
class GPSSubscriber(Node):
def __init__(self):
super().__init__('GPS_subscriber')
self.subscription = self.create_subscription(
NavSatFix,
'/fix',
self.gps_callback,
10)
self.subscription
def gps_callback(self, msg):
self.get_logger().info(f"latitude:{msg.latitude:.6f}, longitude:{msg.longitude:.6f}, altitude:{msg.altitude:.6f}")
def main(args=None):
rclpy.init(args=args)
gps_subscriber = GPSSubscriber()
rclpy.spin(gps_subscriber)
gps_subscriber.destroy_node()
rclpy.shutdown()
if __name__ == '__main__':
main()Le programme s'abonne aux données du topic /fix, effectue l'analyse dans la fonction de rappel, puis imprime le résultat dans le terminal.

