Navigation

    蓝鲸ROS机器人论坛

    • Register
    • Login
    • Search
    • Categories
    • Tags
    • Popular
    ROS交流群
    ROS Group
    产品服务
    Product Service
    开源代码库
    Github
    官网
    Official website
    技术交流
    Technological exchanges
    激光雷达
    LIDAR
    ROS教程
    ROS Tourials
    深度学习
    Deep Learning
    机器视觉
    Computer Vision

    GPS在ROS中的测试和使用

    ROS教程
    ros gps
    3
    4
    4437
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • weijiz
      weijiz last edited by Yangoogle

      通过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模块已经可以正常工作了。

      ff8ba1a5-783b-452c-a72c-4fa5e4bdec29-image.png

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

      sudo killall screen
      

      设置 gpsd

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

      然后执行

      xgps
      

      4e6d7336-d82e-40a4-98d3-41d93a4ef0a6-image.png

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

      在ROS中使用gps数据

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

      话题 类型 简介
      /fix sensor_msgs/NavSatFix GPS定位信息
      /extend_fix gps_common/GPSFix GPSFix消息包含GPS卫星状态和定位信息
      /time_reference sensor_msgs/TimeReference GPS时间信息
      /vel geometry_msgs/TwistStamped GPS的速度信息

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

      安装

      首先下载安装这个包

      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关闭。

      ad78bd5b-a8a9-45fd-8eb0-9b1a25886f82-image.png

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

      xiaoqiang 1 Reply Last reply Reply Quote 1
      • xiaoqiang
        xiaoqiang @weijiz last edited by xiaoqiang

        如果运行gpsd时出现, 这种错误 can’t bind to IPV4 port gpsd,Address already in use。可能是因为后台在执行gpsd这个服务,把它关闭掉再尝试运行。

        sudo service gpsd stop
        gpsd -D 5 -n -N -b /dev/bwgps
        
        1 Reply Last reply Reply Quote 1
        • 叫我小冬枣
          叫我小冬枣 last edited by

          执行到这一步了,但是设置波特率的时候会显示[screen is terminating],并且请问怎么在终端中看到gps模块发来的数据?2021-02-20 20-18-49 的屏幕截图.png

          weijiz 1 Reply Last reply Reply Quote 0
          • weijiz
            weijiz @叫我小冬枣 last edited by

            @叫我小冬枣 可能你的设备路径不对吧

            1 Reply Last reply Reply Quote 0
            • 1 / 1
            • First post
              Last post
            Copyright © 2015-2023 BlueWhale community