🧪 Neue Tutorials in Arbeit — vom Roboterarm bis zum Sensor
Zum Inhalt springen

ROS: GPS-Daten lesen ​

Diese Funktion liest über das Terminal die GPS-Moduldaten aus und analysiert die GPS-Daten, um Längen- und Breitengrad sowie Höhendaten zu erhalten.

1. Auslesen der GPS-Daten über das Terminal ​

Geben Sie im Terminal ein,

ros2 launch nmea_navsat_driver nmea_serial_driver.launch.py

Abb. 1

Sehen wir uns dann die Topic-Daten an; geben Sie im Terminal ein,

ros2 topic list

Abb. 2

Zu den Daten dieser GPS-Topics hier eine Erläuterung,

TopicTypBeschreibung
/extend_fixgps_common/GPSFixDie GPSFix-Nachricht enthält den Status der GPS-Satelliten und die Positionsinformationen
/fixsensor_msgs/NavSatFixGPS-Positionsinformationen
/time_referencesensor_msgs/TimeReferencdGPS-Zeitinformationen
/velgeometry_msgs/TwistStampedGeschwindigkeitsinformationen des GPS

Für die Nachrichtentypen der einzelnen Topics können Sie die folgende offizielle Website konsultieren,

sensor_msgs/NavSatFix-Dokumentation (ros.org)

sensor_msgs/TimeReference-Dokumentation (ros.org)

geometry_msgs/TwistStamped-Dokumentation (ros.org)

Wir können diese Topic-Nachrichten im Terminal ausgeben; was wir erhalten, sind die GPS-Daten. Nehmen wir die Ausgabe von /fix als Beispiel, geben Sie im Terminal ein

ros2 topic echo /fix

Das Terminal gibt die folgenden Daten aus,

Abb. 3

Dabei stehen latitude, longitude und altitude jeweils für Breitengrad, Längengrad und Höhe.

2. Auslesen von Längengrad, Breitengrad und Höhe aus den GPS-Daten ​

Führen Sie im Terminal aus,

ros2 launch nmea_navsat_driver nmea_serial_driver.launch.py

Führen Sie in einem anderen Terminal aus,

ros2 run nmea_navsat_driver read_lat_long.py

Abb. 4

Die im Terminal ausgegebenen Daten sind der aktuelle Längen- und Breitengrad sowie die Höhe des GPS-Moduls. Sehen wir uns den Quellcode an, 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()

Das Programm abonniert die Daten des /fix-Topics, führt in der Callback-Funktion eine Analyse durch und gibt das Ergebnis schließlich im Terminal aus.