Arduino 读取GPS 数据发送解析并发布ROS topic(一) https://blog.youkuaiyun.com/Fourier_Legend/article/details/84107494
概述
本部分将主要讲将串口接受到的数据,进行处理并发布成 ros topic
思路
-
从串口读到的数据如下
$GNGA,120025.000,0000.0000,N,00000.0000,E,0,00,0.0,0.0,M,0.0,M,,0000*77 $GNGA,120026.000,0000.0000,N,00000.0000,E,0,00,0.0,0.0,M,0.0,M,,0000*74
其中“ $GNGGA 所在的行就是GPS 的信息,格式如下:
$GNGGA,(1),(2),(3),(4),(5),(6),(7),(8),(9),M,(10),M,(11),(12)*hh(CR)(LF)
(1) UTC 时间,格式为 hhmmss.ss;
(2) 纬度,格式为 ddmm.mmmmm(度分格式);
(3) 纬度半球,N 或 S(北纬或南纬);
(4) 经度,格式为 dddmm.mmmmm(度分格式);
(5) 经度半球,E 或 W(东经或西经);
(6) GPS 状态,0=未定位,1=非差分定位,2=差分定位;
(7) 正在使用的用于定位的卫星数量(00~12)
(8) HDOP 水平精确度因子(0.5~99.9)
(9) 海拔高度(-9999.9 到 9999.9 米)
(10) 大地水准面高度(-9999.9 到 9999.9 米)
(11) 差分时间(从最近一次接收到差分信号开始的秒数,非差分定位,此项为空)
(12) 差分参考基站标号(0000 到 1023,首位 0 也将传送,非差分定位,此项为空) -
主要思路是根据 逗号的位置将一个个信息分割开, 得到经度,纬度,GPS状态, 海拔等信息。
-
ROS 需要 NavSatStatus 消息格式类型,所以接下来就是将得到的信息组装成需要的 msg类型
代码
#-*- coding:utf-8 –*-
import rospy
import serial
import time
from std_msgs.msg import String
from sensor_msgs.msg import NavSatFix
from sensor_msgs.msg import NavSatStatus
from std_msgs.msg import Header
timestamp = ""
latitude = ""
longitude = ""
altitude = ""
status = ""
satellite_num = ""
location_accuracy = ""
gps_pub = rospy.Publisher('/gps', NavSatFix,