🧪 新教程持續更新中 · 由機械臂到傳感器,跟隨教程從零搭建
跳到主要內容

ROS:讀取 GPS 數據 ​

該功能是通過終端讀取GPS模組數據以及解析GPS數據得到經緯度和海拔數據。

1、通過終端讀取GPS數據 ​

終端輸入,

ros2 launch nmea_navsat_driver nmea_serial_driver.launch.py

圖 1

然後我們查看下話題數據,終端輸入,

ros2 topic list

圖 2

關於GPS這幾個話題的數據,這裏做個説明,

話題類型説明
/extend_fixgps_common/GPSFixGPSFix訊息包含GPS衞星狀態和定位資訊
/fixsensor_msgs/NavSatFixGPS定位資訊
/time_referencesensor_msgs/TimeReferencdGPS時間資訊
/velgeometry_msgs/TwistStampedGPS的速度資訊

各個話題訊息類型可以參考以官網網址,

sensor_msgs/NavSatFix Documentation (ros.org)

sensor_msgs/TimeReference Documentation (ros.org)

geometry_msgs/TwistStamped Documentation (ros.org)

我們可以在在終端列印出這些話題訊息,得到的就是GPS數據,以列印/fix為例,終端輸入

ros2 topic echo /fix

終端會列印出以下數據,

圖 3

其中,latitude,longitude,altitude分別代表的是緯度、經度和海拔。

2、讀取GPS數據的經緯度和海拔 ​

終端執行,

ros2 launch nmea_navsat_driver nmea_serial_driver.launch.py

在另一個終端執行,

ros2 run nmea_navsat_driver read_lat_long.py

圖 4

終端列印的數據就是當前GPS模組的經緯度和海拔,看看源碼,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()

程式訂閲了/fix話題的數據,然後在回調函數裏邊做了解析,最終列印到終端上。