无人驾驶(二)---室外导航之RTK配置与接入及GPS与UTM坐标转换

1. RTK 概述

RTK 载波相位差分技术,是实时处理两个测量站载波相位观测量的差分方法,将基准站采集的载波相位发给用户接收机,进行求差解算坐标。一般包含流动站 (移动站) 和基准站 (基站) 。本文中RTK定位采用千寻定位, 参考的也是千寻CORS基站的坐标,所以需要先登入千寻cors账号。

2. RTK配置千寻账号

(1) RTK 输入差分源设置为 Ntrip Client,因为GNSS接收机放在车子上,所以选择流动站
在这里插入图片描述
(2)填写千寻服务参数
在这里插入图片描述
地址:填写千寻IP, 端口:国内一般是用8003(CGCS2000坐标),挂载点一般选择接入点: AUTO(五星十六频)

3. RTK接入ROS系统

nmea_navsat_driver是一套用于获取并解析GPS数据的ROS驱动包,使用Python语言实现。GPS设备使用此包的条件是:遵守或者兼容NMEA0183协议。

(1)环境配置

系统:Ubuntu18.04
ros: melodic
RTK :GNSS接收机 + 2个蘑菇天线  (串口转usb)

(2)nmea_navsat_driver源码安装

cd catkin_ws/src
git clone https://github.com/ros-drivers/nmea_navsat_driver/
cd ..
catkin_make -DCATKIN_WHITELIST_PACKAGES='nmea_navsat_driver'

(3) launch 文件

<launch>

  <!-- A simple launch file for the nmea_serial_driver node. -->
  <arg name="port" default="/dev/gps" />    <!--udev 规则映射, 查找gps设备-->
  <arg name="baud" default="115200" />     <!--波特率-->
  <arg name="frame_id" default="gps" />     <!--参考坐标系-->
  <arg name="use_GNSS_time" default="False" />
  <arg name="time_ref_source" default="gps" />
  <arg name="useRMC" default="False" />

  <node name="nmea_serial_driver" 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="use_GNSS_time" value="$(arg use_GNSS_time)" />
    <param name="time_ref_source" value="$(arg time_ref_source)" />
    <param name="useRMC" value="$(arg useRMC)" />
  </node>

</launch>

(4) 代码解析
nmea_navsat_driver提供四个节点:nmea_topic_driver,nmea_serial_driver,nmea_topic_serial_reader和nmea_socket_driver ;

nmea_topic_serial_reader节点:此节点从串口读入GPS数据,然后封装为nmea_msgs/Sentence数据格式,发布话题nmea_sentence。

nmea_topic_driver节点:此节点订阅话题nmea_sentence,然后根据NMEA0184协议解析,并发布解析后的数据,发布话题为:经纬度/fix,速度/vel,gps时间/time_reference和航向角/heading.

nmea_serial_driver节点:此节点从串口读数据,直接解析发布数据,相当于nmea_topic_driver节点和nmea_topic_serial_reader节点的结合体。

发布话题为
/fix : gps经纬度
/vel : gps速度
/time_reference : gps时间
/heading : 航向角
/extend_fix : GPSFix消息包含GPS卫星状态和定位信息

4. GPS坐标转换UTM坐标

UTM坐标系——Universal Transverse Mercator, 统一横轴墨卡托投影系统,UTM是一种投影坐标,使用基于网格的方法表示坐标,是将球面经纬度坐标经过投影算法转换成的平面坐标,即通常所说的XY坐标。坐标原点位于本初子午线与赤道交点,以正东方向为x轴正方向(UTM Easting),正北方向为y轴正方向,建立坐标系。

cd catkin_ws/src
git clone https://github.com/swri-robotics/gps_umd
cd ..
catkin_make

创建launch文件 :GPS坐标转换为UTM坐标

gps2utm.launch

<launch>
<node name="gps2utm" pkg="gps_common" type="utm_odometry_node">
  <remap from="odom" to="YOUR_ODOM_TOPIC"/>
  <remap from="fix" to="YOUR_FIX_TOPIC" />
  <param name="rot_covariance" value="99999" />
  <param name="frame_id" value="base_link" />
</node>
</launch>

utm_odometry_node:将gps经纬度转换为utm坐标
utm_odometry_to_navsatfix_node: 将UTM坐标转换为GPS坐标
订阅的话题:/fix (经纬度)
发布的话题:/odom (UTM坐标)
参数:
~rot_covariance (double, default: 99999)
Variance (in meters) to specify for rotational measurements

~frame_id (string, default: Copy frame_id from fix message)
Frame to specify in header of outgoing Odometry message

~child_frame_id (string)
Child frame to specify in header of outgoing Odometry message

5.运行结果

roslaunch nmea_navsat_driver nmea_serial_driver.launch
roslaunch gps_common gps2utm.launch

在这里插入图片描述
坐标转换工具:http://www.whoi.edu/marine/ndsf/utility/NDSFutility.html

参考链接:ROS WIKI:gps_common
参考: ROS WIKI:nmea_navsat_driver

评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值