GPS在ROS中的测试和使用

原链接

通过GPS机器人可以获取定位信息。ROS中也提供了GPS的相关驱动包,可以方便的使用GPS的定位信息。下面以蓝鲸GPS模块为例演示如何在ROS中使用GPS传感器。其他的可以通过串口指令发布nmea语句的GPS模块都是通用的。

蓝鲸GPS模块采用AGPS定位方式,即GPS加手机基站的定位方式。相对于一般的GPS模块具有定位更加迅速和准确的优点。可以在官方淘宝店咨询购买。

首先在机器人上安装对应的软件包

安装gpsd

sudo apt-get install gpsd gpsd-clients

设置模块udev规则

在机器人上运行

dmesg --follow

将GPS模块的串口插入机器人USB接口,可以看到终端输出了串口的信息

[  434.206803] ftdi_sio 2-7.2:1.0: FTDI USB Serial Device converter detected
[  434.206868] usb 2-7.2: Detected FT232BM
[  434.207105] usb 2-7.2: FTDI USB Serial Device converter now attached to ttyUSB0

记住 2-7.2:1.0这个端口号
/etc/udev/rules.d/95-persistent-serial.rules文件中添加下面的内容。如果没有这个文件就自己创建一个

KERNELS=="2-7.2:1.0"         ,SYMLINK+="ttyUSB005", SYMLINK+="bwgps", OWNER="xiaoqiang" ,RUN+="/bin/setserial /dev/ttyUSB005 low_latency"

其中KERNELS之后未刚才的端口号。OWNER设置未自己的用户。修改完成后保存退出,然后执行

sudo udevadm control --reload

执行完成之后重新插入GPS模块串口,然后就可以在/dev文件夹内看到bwgps和ttyUSB005两个文件。这样就说明之前的修改已经生效了。

测试GPS数据

给模块通电,并插好串口模块之后可以开始测试模块是否能够正常输出GPS数据。

# 根据自己串口号和波特率设置
screen /dev/bwgps 115200

正常应该可以看到下面的输出。这样就说明GPS模块已经可以正常工作了。

在这里插入图片描述

执行下面的指令停止screen指令

sudo killall screen

设置 gpsd

# 设置串口波特率,蓝鲸GPS模块的波特率是115200,对于不同的模块根据模块参数设置。
sudo stty -F /dev/bwgps 115200
# 启动gpsd
gpsd -D 5 -n -N -b /dev/bwgps

然后执行

xgps

在这里插入图片描述

在空旷地方应该能够看到模块已经追踪的卫星。

在ROS中使用gps数据

在ROS中可以使用nmea_navsat_driver解析GPS数据。这个包会发出下面几个话题

话题类型简介
/fixsensor_msgs/NavSatFixGPS定位信息
/extend_fixgps_common/GPSFixGPSFix消息包含GPS卫星状态和定位信息
/time_referencesensor_msgs/TimeReferenceGPS时间信息
/velgeometry_msgs/TwistStampedGPS的速度信息

可以根据自己需求订阅相关信息

安装

首先下载安装这个包

cd [到你的工作空间]/src
git clone https://github.com/BluewhaleRobot/nmea_navsat_driver
cd ..
catkin_make -DCATKIN_WHITELIST_PACKAGES="nmea_navsat_driver"

修改launch文件,蓝鲸GPS模块用户可以不用修改直接使用。

<launch>

  <!-- A simple launch file for the nmea_serial_driver node. -->

  <arg name="port" default="/dev/bwgps" />
  <arg name="baud" default="115200" />
  <arg name="frame_id" default="gps" />
  <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="time_ref_source" value="$(arg time_ref_source)" />
    <param name="useRMC" value="$(arg useRMC)" />
  </node>
</launch>

各个参数的含义都十分明确,根据自己的设备参数进行修改就可以了。

运行测试
roslaunch nmea_navsat_driver nmea_serial_driver.launch

正常情况下就可以通过各个topic订阅信息了。注意如果之前运行了gpsd要先把gpsd关闭。

在这里插入图片描述

左侧是extend_fix话题数据。可以通过satellite_visible_prn看到已经看到的卫星编号。注意在开阔环境下才会有比较好的定位效果。

  • 8
    点赞
  • 98
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值