ROS环境下使用nmea_navsat_driver
通过串口读取GPS数据全流程
一.安装配置启动nmea_navsat_driver
包
要在ROS中安装nmea_navsat_driver
包,可以按照以下步骤进行操作:
-
更新你的包列表:
sudo apt-get update
-
安装
nmea_navsat_driver
包:sudo apt-get install ros-<distro>-nmea-navsat-driver
其中
<distro>
需要替换为你正在使用的ROS发行版名称,比如noetic
,melodic
,kinetic
等。例如,如果你使用的是ROS Noetic,命令将是:sudo apt-get install ros-noetic-nmea-navsat-driver
-
验证安装:
安装完成后,你可以使用
rospack
命令来验证安装是否成功:rospack find nmea_navsat_driver
如果包安装成功,这个命令会返回包的路径。
-
启动
nmea_navsat_driver
节点:安装完成后,你可以通过以下命令启动
nmea_navsat_driver
节点,假设你使用的是一个典型的USB设备:-
启动 ROS 主节点:
在一个新的终端中,运行以下命令以启动 ROS 主节点:
roscore
这将启动 ROS 主节点,确保 ROS 网络能够正常工作。
-
打开串口权限
-
临时打开串口权限(暂时选用)
-
sudo chmod 666 /dev/ttyUSB0 参考网址:http://t.csdnimg.cn/Mce72
-
-
永久打开串口权限
-
添加用户到
dialout
组:将
username
替换为具体的用户名。sudo usermod -a -G dialout username
-
重新启动系统或注销并重新登录:
-
重新启动系统:
sudo reboot
-
或者,注销并重新登录。
-
-
验证用户组:
将
username
替换为具体的用户名。groups username
-
测试设备权限:
ls -l /dev/ttyUSB*
通过这些步骤,你应该能够成功地将特定用户添加到
dialout
组,并确保对USB串口设备的访问权限。你应该看到设备的权限设置为
crw-rw----
,并且设备属于dialout
组。例如:crw-rw---- 1 root dialout 188, 0 Aug 8 12:34 /dev/ttyUSB0
-
-
-
-
运行 nmea_navsat_driver 节点:
在另一个终端中,运行你的
nmea_navsat_driver
节点:rosrun nmea_navsat_driver nmea_serial_driver _port:=/dev/ttyUSB0 _baud:=4800
(配置的时候暂未使用2024.8.8):
确保在运行这两个命令时使用的是相同的 ROS 工作空间,并且环境变量已正确配置。如果你使用的是不同的终端,请确保每个终端都已执行以下命令以配置 ROS 环境:
source /opt/ros/noetic/setup.bash
如果你在自己的工作空间中还有其他的包,请确保你也源了工作空间的
setup.bash
文件,例如:source ~/catkin_ws/devel/setup.bash
这样做可以确保所有的 ROS 环境变量都已正确设置,并且能够正确找到所需的 ROS 包。
其中
/dev/ttyUSB0
是你的设备路径,4800
是你的波特率。根据你的设备情况调整这些参数。
查看串口:
1.设备路径可以通过串口助手
cutecom
进行查看: 下载:
sudo apt-get install cutecom
打开:
sudo cutecom
网址:https://blog.youkuaiyun.com/Tansir94/article/details/81357612
2.通过指令查看 USB 串口信息:
ls -l /dev/ttyUSB*
-
配置和使用(第五步运行完就可以测试出串口可用,需要进一步配置的话就选用第六步):
通过构建launch文件,然后在
imu_gps_localization节点
的 launch文件中包含,然后就可以调用解析函数进行话题发布,用于后续的调用。你还可以通过配置文件或命令行参数来调整
nmea_navsat_driver
的行为。以下是一个启动文件示例,可以帮助你更方便地管理参数:<!-- save this as nmea_navsat_driver.launch --> <launch> <node pkg="nmea_navsat_driver" type="nmea_serial_driver" name="nmea_serial_driver"> <param name="port" value="/dev/ttyUSB0" /> <param name="baud" value="4800" /> </node> </launch>
然后,你可以通过以下命令启动:
roslaunch nmea_navsat_driver nmea_navsat_driver.launch
通过这些步骤,你应该能够成功安装并启动nmea_navsat_driver
包。
2.确认要确认节点是否正在正常工作nmea_navsat_driver
运行 rosrun nmea_navsat_driver nmea_serial_driver _port:=/dev/ttyUSB0 _baud:=4800
后,光标可能会不动,因为该节点正在正常运行并持续读取串口数据,没有任何错误输出。在这种情况下,节点会保持运行状态并且不会返回到命令行提示符。
要确认节点是否正在正常工作,你可以采取以下步骤:
1. 检查 ROS 节点和话题
打开一个新的终端并检查 ROS 节点和话题:
-
检查节点是否在运行:
rosnode list
你应该看到类似以下输出,表示
nmea_serial_driver
节点正在运行:/nmea_serial_driver /rosout
-
检查发布的话题:
rostopic list
你应该看到
/fix
和/vel
话题:/fix /rosout /rosout_agg /vel
2. 查看话题数据
使用 rostopic echo
命令查看发布的话题数据,确保节点确实在发布数据:
-
查看
/fix
话题数据:rostopic echo /fix
-
查看
/vel
话题数据:rostopic echo /vel
如果节点正在正常工作,你应该会看到相关话题的输出数据。
3. 检查日志信息
打开一个新的终端并检查 ROS 日志信息,以查看是否有任何错误或警告:
rosconsole echo roscpp
或者直接查看日志文件:
roscd log
less latest/rosout.log
4. 验证设备连接
确保串口设备已正确连接,并且正在发送数据。你可以使用串口调试工具(如 minicom
或 screen
)来检查设备是否正常工作:
-
安装
minicom
:sudo apt-get install minicom
-
使用
minicom
检查设备:sudo minicom -D /dev/ttyUSB0 -b 4800
这将打开一个串口通信会话,允许你直接查看设备发送的数据。
5. 终止节点
如果你想停止 nmea_navsat_driver
节点,可以在运行该节点的终端中按 Ctrl+C
。这将终止节点,并将你带回到命令行提示符。
通过这些步骤,你应该能够确认 nmea_navsat_driver
节点是否在正常工作,并排除任何潜在问题。
3.通过串口从另一台电脑发送GPS数据给装有ROS的电脑进行测试
为了通过串口从另一台电脑发送GPS数据给装有ROS的电脑进行测试,
需要发送标准的NMEA 0183格式的GPS数据。常见的NMEA 0183句子包括GPGGA、GPRMC等。以下是一些示例:
示例NMEA 0183句子
-
GPGGA (Global Positioning System Fix Data)
$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47
-
GPRMC (Recommended Minimum Specific GPS/Transit Data)
$GPRMC,235947,A,5534.433,N,03739.612,E,0.022,158.77,191194,003.1,W*70
数据字段说明
GPGGA
$GPGGA
:GGA句子的起始标记。123519
:UTC时间,格式为HHMMSS(小时、分钟、秒)。4807.038
:纬度,格式为DDMM.MMM(度、分,小数分)。N
:北纬(南纬用S)。01131.000
:经度,格式为DDDMM.MMM(度、分,小数分)。E
:东经(西经用W)。1
:定位状态,1 = 单点定位,2 = 差分定位,0 = 无效。08
:使用的卫星数量。0.9
:水平精度因子(HDOP)。545.4
:海拔高度,单位为米。M
:海拔单位(米)。46.9
:大地水准面高度。M
:大地水准面高度单位(米)。*47
:校验和。
GPRMC
$GPRMC
:RMC句子的起始标记。235947
:UTC时间,格式为HHMMSS(小时、分钟、秒)。A
:定位状态,A = 有效定位,V = 无效定位。5534.433
:纬度,格式为DDMM.MMM(度、分,小数分)。N
:北纬(南纬用S)。03739.612
:经度,格式为DDDMM.MMM(度、分,小数分)。E
:东经(西经用W)。0.022
:地面速率,单位为节。158.77
:航向,单位为度。191194
:日期,格式为DDMMYY(天、月、年)。003.1
:磁偏角,单位为度。W
:磁偏角方向,西偏(东偏用E)。*70
:校验和。
发送数据
-
使用串口工具发送数据
可以使用工具如
sscom
从一台电脑发送数据到串口设备。,发送内容:$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47
确保修改脚本中的串口路径
/dev/ttyUSB0
和波特率4800
,以匹配你的设置。 -
ROS电脑上运行
nmea_navsat_driver
在装有ROS的电脑上,确保已经运行了
nmea_navsat_driver
节点:rosrun nmea_navsat_driver nmea_serial_driver _port:=/dev/ttyUSB0 _baud:=4800
-
验证数据接收
使用
rostopic echo /fix
来查看是否正确接收到GPS数据:rostopic echo /fix
你应该看到类似于以下的输出:
header: seq: 0 stamp: secs: 0 nsecs: 0 frame_id: '' status: status: 0 service: 1 latitude: 48.1173 longitude: 11.5167 altitude: 545.4 position_covariance: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] position_covariance_type: 0
通过这些步骤,你应该能够通过串口成功发送和接收GPS数据。