通过nmea_navsat_driver包发布GPS坐标
- 0 硬件及基本环境
- 1 接通硬件并测试
- 1.1 打开一个终端,修改端口的读写权限
- 1.2 用cutecom读取串口数据
- 2 安装 nmea_navsat_driver 及 下载 ROS 源码
- 2.1 安装 nmea_navsat_driver
- 2.2 下载ROS源码
- 2.3 构建ROS包
- 3 运行测试
- 3.1 新开一个终端
- 3.2 打印topic清单,并打印fix topic
- 4 小坑汇总
0 硬件及基本环境
硬件:
1)控制端:PC、RapberryPi 或者 Jetson Nano板,三种硬件均测试通过;
2)GPS:市场上一款普通常用的GPS终端GNSS,带天线及Typc C线;
环境:
1)Ubuntu 18.04 LTS
2)ROS melodic
1 接通硬件并测试
1.1 打开一个终端,修改端口的读写权限
~$ cd /dev
/dev$ ll ttyUSB*
也可能是 ttyACM*
/dev$ sudo chmod 777 ttyUSB0
1.2 用cutecom读取串口数据
为了测试串口是否有数据输出,建议装一个cutecom,具体可参考《linux系统下可视化串口工具cutecom的使用》https://blog.csdn.net/hanxv_1987/article/details/106967108
2 安装 nmea_navsat_driver 及 下载 ROS 源码
2.1 安装 nmea_navsat_driver
~$ sudo apt-get install ros-kinetic-nmea-navsat-driver libgps-dev
如果之前有下载过,但又不完整的包, 可以卸载后,重新下载,我就落入此坑,尝试各种修复,最后还是重新安装解决。
~$ sudo apt-get remove --purge ros-kinetic-nmea-navsat-driver libgps-dev
2.2 下载ROS源码
github https://github.com/ros-drivers/nmea_navsat_driver
~$ git clone https://github.com/ros-drivers/nmea_navsat_driver.git
设置libnmea_navsat_driver文件夹中的,nmea_serial_driver.launch, nmea_serial_driver.py及nmea_topic_serial_reader.py 三文件中串口端口及波特率值。注意,需要保持此三文件的串口端口及波特率一致。
<arg name="port" default="/dev/ttyUSB0" />
<arg name="baud" default="115200" />
serial_port = rospy.get_param('~port', '/dev/ttyUSB0')
serial_baud = rospy.get_param('~baud', 115200)
2.3 构建ROS包
在你的 ros 工作区的src创建一个nmea_navsat_driver ros包,并把下载的nmea_nasat_driver文件夹复制到你的ros 工作区的nmea_navsat_driver包中。退回到工作区所在目录,并catkin_make,完成编译。
:~/catkin_ws$ catkin_make
3 运行测试
3.1 新开一个终端
~$ roslaunch nmea_navsat_driver nmea_serial_driver.launch
如果出现以下错误
check_nmea_checksum
split_sentence = nmea_sentence.split('*')
TypeError: a bytes-like object is required, not 'str'
是因为python 2.7 与 3.0 对于 ‘str’ 的描述不一致导致,可修改在nmea_navsat_driver ROS包中的scripts文件夹中的以下四个文件第一行环境来解决。
nmea_serial_driver
nmea_socket_driver
nmea_topic_driver
nmea_topic_serial_reader
SUMMARY
========
PARAMETERS
* /nmea_serial_driver_node/baud: 115200
* /nmea_serial_driver_node/frame_id: gps
* /nmea_serial_driver_node/port: /dev/ttyUSB0
* /nmea_serial_driver_node/time_ref_source: gps
* /nmea_serial_driver_node/useRMC: False
* /nmea_serial_driver_node/use_GNSS_time: False
* /rosdistro: melodic
* /rosversion: 1.14.13
NODES
/
nmea_serial_driver_node (nmea_navsat_driver/nmea_serial_driver)
auto-starting new master
process[master]: started with pid [26416]
ROS_MASTER_URI=http://localhost:11311
setting /run_id to 9ccd69d6-3595-11ed-8e21-507b9d5ebd34
process[rosout-1]: started with pid [26427]
started core service [/rosout]
process[nmea_serial_driver_node-2]: started with pid [26434]
3.2 打印topic清单,并打印fix topic
打印topic 清单
~$ rostopic list
/fix
/rosout
/rosout_agg
/time_reference
/vel
打印 fix topic
~$ rostopic echo /fix
header:
seq: 197
stamp:
secs: 1663315829
nsecs: 44462919
frame_id: "/gps"
status:
status: -1
service: 1
latitude: 11 55 665 44 33 221 //以防因本文写得不够好,本人被读者定点清除,
longitude: 135 615 44 33 22 1 //所以修改了坐标。懂简谱,可以唱一下
altitude: 65.57
position_covariance: [9801.0, 0.0, 0.0, 0.0, 9801.0, 0.0, 0.0, 0.0, 39204.0]
position_covariance_type: 1
---
4 小坑汇总
- 未修改
特别说明:如果在室内测试,可能存在GPS坐标丢失。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)