通过ROS的 nmea_navsat_driver包发布GPS坐标

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 三文件中串口端口及波特率值。注意,需要保持此三文件的串口端口及波特率一致。

# nmea_serial_driver.launch
  <arg name="port" default="/dev/ttyUSB0" />
  <arg name="baud" default="115200" />
# nmea_serial_driver.py 和 nmea_topic_serial_reader.py 修改内容相同
    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
#! /usr/bin/env python2.7

# Software License Agreement (BSD License)
#
# Copyright (c) 2019, Ed Venator <evenator@gmail.com>
# All rights reserved.
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 小坑汇总

  1. 未修改

特别说明:如果在室内测试,可能存在GPS坐标丢失。

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值