nmea_navsat_driver
nmea_navsat_driver是一套用于获取并解析GPS数据的ROS驱动包,使用Python语言实现。GPS设备使用此包的条件是:遵守或者兼容NMEA0183协议。nmea_navsat_driver提供四个节点:nmea_topic_driver,
nmea_serial_driver,nmea_topic_serial_reader和nmea_socket_driver
sudo apt-get install ros-kinetic-nmea-navsat-driver libgps-dev
roscd nmea_navsat_driver
tree
nmea_topic_serial_reader节点
此节点从串口读入GPS数据,然后封装为nmea_msgs/Sentence数据格式,发布话题nmea_sentence。
nmea_topic_driver节点
此节点订阅话题nmea_sentence,然后根据NMEA0184协议解析,并发布解析后的数据,发布话题为:经纬度/fix,速度/vel,gps时间/time_reference和航向角/heading。
nmea_serial_driver节点
此节点从串口读数据,直接解析发布数据,相当于nmea_topic_driver节点和nmea_topic_serial_reader节点的结合体。
github源码:https://github.com/ros-drivers/nmea_navsat_driver
NMEA-0183 协议简介
NMEA - 0183 是美国国家海洋电子协会(National Marine Electronics Association)为海用电子设备制定的标准格式。目前业已成了 GPS/北斗导航设备统一的 RTCM(Radio Technical Commission for Maritime services)标准协议。
NMEA-0183 常用命令如表所示:
NMEA-0183 协议采用 ASCII 码来传递 GPS 定位信息,我们称之为帧。
帧格式形如:$aaccc,ddd,ddd,…,ddd*hh(CR)(LF)
GNGGA
GNGGA 语句的基本格式如下(其中 M 指单位 M,hh 指校验和,CR 和 LF 代表回车换行,下同):
GNGGA,(1),(2),(3),(4),(5),(6),(7),(8),(9),M,(10),M,(11),(12)hh(CR)(LF)
举例如下:
GNGGA,095528.000,2318.1133,N,11319.7210,E,1,06,3.7,55.1,M,-5.4,M,,000069
UTC 时间,格式为 hhmmss.ss;
纬度,格式为 ddmm.mmmmm(度分格式);
纬度半球,N 或 S(北纬或南纬);
经度,格式为 dddmm.mmmmm(度分格式);
经度半球,E 或 W(东经或西经);
GPS 状态,0=未定位,1=非差分定位,2=差分定位;
正在使用的用于定位的卫星数量(00~12)
HDOP 水平精确度因子(0.5~99.9)
海拔高度(-9999.9 到 9999.9 米)
大地水准面高度(-9999.9 到 9999.9 米)
差分时间(从最近一次接收到差分信号开始的秒数,非差分定位,此项为空)
差分参考基站标号(0000 到 1023,首位 0 也将传送,非差分定位,此项为空)
参考https://blog.csdn.net/u012241570/article/details/90769388
用nmea_navsat_driver读取ublox-m8n传感器数据
用天线连接好ublox-m8n,然后用usb线将其与虚拟机连接,ls /dev发现有新的 /dev/ttyACM0,然后查看权限ls -l /dev/ttyACM0,有读写权限,则证明连接成功了
roscore
rosrun nmea_navsat_driver nmea_topic_serial_reader _port:=/dev/ttyUSB1 _baud:=9600
发布定位模块信息时,会提示SyntaxWarning: The publisher should be created with an explicit keyword argument 'queue_size'.,忽略即可。该ROS包把数据通过/nmea_sentence这个Topic发布出来,为了验证定位数据发布成功,我们再打开一个新Terminal窗口读取/nmea_sentence中的信息
rostopic list
rostopic echo /nmea_sentence
可见其下逐条输出了定位模块中的数据,数据部分主要在sentence中
值得注意的是,nmea_navsat_driver主要有三个节点,一个是刚刚用到的nmea_topic_serial_reader ,负责把串口读到的GPS数据发布到ROS里面,话题为/nmea_sentence;另一个是nmea_topic_driver,这个节点负责订阅
/nmea_sentence话题,并把该话题里的数据分别解析成如下的形式发布sensor_msgs/NavSatFix、geometry_msgs/TwistStamped、sensor_msgs/TimeReference
第三个节点是nmea_serial_driver节点
此节点从串口读数据,直接解析发布数据,相当于nmea_topic_driver节点和nmea_topic_serial_reader节点的结合体.