🧪 De nouveaux tutoriels arrivent — du bras robotique au capteur
Aller au contenu

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

Image 1

Nous allons ensuite consulter les données des topics ; saisissez dans le terminal,

ros2 topic list

Image 2

Concernant les données de ces topics GPS, voici une explication,

TopicTypeDescription
/extend_fixgps_common/GPSFixLe message GPSFix contient l'état des satellites GPS et les informations de position
/fixsensor_msgs/NavSatFixInformations de position GPS
/time_referencesensor_msgs/TimeReferencdInformations de temps GPS
/velgeometry_msgs/TwistStampedInformations 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 /fix

Le terminal imprime les données suivantes,

Image 3

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.py

Exécutez dans un autre terminal,

ros2 run nmea_navsat_driver read_lat_long.py

Image 4

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

python
#! /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.