ROS环境下使用`nmea_navsat_driver`通过串口读取GPS数据全流程

ROS环境下使用nmea_navsat_driver通过串口读取GPS数据全流程

一.安装配置启动nmea_navsat_driver

要在ROS中安装nmea_navsat_driver包,可以按照以下步骤进行操作:

  1. 更新你的包列表

    sudo apt-get update
    
  2. 安装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
    
  3. 验证安装

    安装完成后,你可以使用rospack命令来验证安装是否成功:

    rospack find nmea_navsat_driver
    

    如果包安装成功,这个命令会返回包的路径。

  4. 启动nmea_navsat_driver节点

    安装完成后,你可以通过以下命令启动nmea_navsat_driver节点,假设你使用的是一个典型的USB设备:

    1. 启动 ROS 主节点

      在一个新的终端中,运行以下命令以启动 ROS 主节点:

      roscore
      

      这将启动 ROS 主节点,确保 ROS 网络能够正常工作。

    2. 打开串口权限

      1. 临时打开串口权限(暂时选用)

        1. sudo chmod 666 /dev/ttyUSB0
          参考网址:http://t.csdnimg.cn/Mce72
          
      2. 永久打开串口权限

        1. 添加用户到 dialout

          username 替换为具体的用户名。

          sudo usermod -a -G dialout username
          
        2. 重新启动系统或注销并重新登录

          • 重新启动系统:

            sudo reboot
            
          • 或者,注销并重新登录。

        3. 验证用户组

          username 替换为具体的用户名。

          groups username
          
        4. 测试设备权限

          ls -l /dev/ttyUSB*
          

        通过这些步骤,你应该能够成功地将特定用户添加到 dialout 组,并确保对USB串口设备的访问权限。

        你应该看到设备的权限设置为 crw-rw----,并且设备属于 dialout 组。例如:

        crw-rw---- 1 root dialout 188, 0 Aug  8 12:34 /dev/ttyUSB0
        
  5. 运行 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.csdn.net/Tansir94/article/details/81357612

    ​ 2.通过指令查看 USB 串口信息:ls -l /dev/ttyUSB*

  6. 配置和使用(第五步运行完就可以测试出串口可用,需要进一步配置的话就选用第六步):

    通过构建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. 验证设备连接

确保串口设备已正确连接,并且正在发送数据。你可以使用串口调试工具(如 minicomscreen)来检查设备是否正常工作:

  • 安装 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:校验和。

发送数据

  1. 使用串口工具发送数据

    可以使用工具如 sscom从一台电脑发送数据到串口设备。,发送内容:

    $GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47
    

    确保修改脚本中的串口路径 /dev/ttyUSB0 和波特率 4800,以匹配你的设置。

  2. ROS电脑上运行 nmea_navsat_driver

    在装有ROS的电脑上,确保已经运行了 nmea_navsat_driver 节点:

    rosrun nmea_navsat_driver nmea_serial_driver _port:=/dev/ttyUSB0 _baud:=4800
    
  3. 验证数据接收

    使用 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数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值