今天拿到一个GPS模块,店家说linux可以用,那就是可以试试
1 检查设备连接
Ubuntu输入:
ls /dev/tty*
查看是否有USB设备接入,正常情况如下:
然后可以直接看设备原始数据:
sudo cat /dev/ttyACM0
如图:
连接正确
2 串口助手读取数据
sudo apt install cutecom
sudo cutecom
设置 串口和波特率可以看到数据
3 接入ros
mea_navsat_driver 包用于解析 NMEA 字符串并发布非常简单的 GPS 消息的包。不需要或使用 GPSD 守护程序。
参见ros wiki: http://wiki.ros.org/nmea_navsat_driver
github源码:https://github.com/ros-drivers/nmea_navsat_driver
这个包为输出兼容的 NMEA 语句的 GPS 设备提供了一个 ROS 接口。
(1)安装nmea_navsat_driver
sudo apt-get install ros-melodic-nmea-navsat-driver libgps-dev
(2)打开新Terminal窗口
roscore
(3)启动launch文件,运行nmea_serial_driver 节点
roscd nmea_navsat_driver/launch/
sudo vim nmea_serial_driver.launch
修改USB口和波特率:
<launch>
<!-- A simple launch file for the nmea_serial_driver node. -->
<arg name="port" default="/dev/ttyACM0" />
<arg name="baud" default="9600" />
<arg name="frame_id" default="gps" />
<arg name="use_GNSS_time" default="False" />
<arg name="time_ref_source" default="gps" />
<arg name="useRMC" default="False" />
<node name="nmea_serial_driver_node" pkg="nmea_navsat_driver" type="nmea_serial_driver" output="screen">
<param name="port" value="$(arg port)"/>
<param name="baud" value="$(arg baud)" />
<param name="frame_id" value="$(arg frame_id)" />
<param name="use_GNSS_time" value="$(arg use_GNSS_time)" />
<param name="time_ref_source" value="$(arg time_ref_source)" />
<param name="useRMC" value="$(arg useRMC)" />
</node>
</launch>
然后给USB权限:
sudo chmod 777 /dev/ttyACM0
运行nmea_serial_driver 节点:
roslaunch nmea_navsat_driver nmea_serial_driver.launch
(4)查看话题输出
rostopic echo /fix
一开始在室内测试,值为nan,到了室外后正常
一个廉价的GPS模块,随便玩玩吧。
4 其他说明
nmea_navsat_driver提供四个节点:
nmea_topic_driver,nmea_serial_driver,nmea_topic_serial_reader和nmea_socket_driver
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节点的结合体。