SLAM学习记录:全局定位之gps说明

2023-05-16

这段时间因为各种事情耽误了,好久没有进行更新了,惭愧!

前段时间在研究cartographer的定位建图模块,在停更的时间主要再研究如何改善定位建图的效果,也有一定的成效,但是缺乏有效的外部传感器去作为全局范围的评价标准,所以把目光放在了GPS上,利用GPS提供的经纬度信息,将其转为平面投影坐标,然后利用GPS的室外测绘信息,比较同个回环下改进前与改进后移动机器人回到原点的能力差距(通过定位距离偏差大小来进行评价)。

为了更好的了解GPS的数据格式,我们先来了解下GPS数据协议,然后了解下ROS中的gps_common功能包,了解gps常用数据格式,方便后面根据相应数据格式进行开发工作。

一、GPS数据协议

GPS数据一般采用NMEA-0183协议,该协议是由美国国家海洋电子协会为海用电子设备指定的标准格式,目前已成为GPS导航设备统一的标准协议。

$GPGGA  全球定位数据
$GPGSA  卫星PRN数据
$GPGSV  卫星状态信息
$GPRMC  运输定位数据
$GPVTG  地面速度信息
$GPGLL  大地坐标信息
$GPZDA  UTC时间和日期

因为最近在用司南RTK收集GPS数据,收集到的数据格式为GPGGA格式和GPRMC格式。因为接下来我需要在ubuntu系统上写串口驱动解析GPGGA数据格式,所以简单介绍下GPGGA的数据格式。

以实际格式为例进行说明:

$GPGGA,041126.00,3010.9782040,N,12009.2327844,E,2,10,0.5,14.7799,M,0.000,M,1.0,2573*76

看到这么一串数据时,我当时是处于一个头两个大的状态,因为不懂,所以感到心烦。但是当了解GPGGA的数据格式后,看起来就没这么麻烦。

首先是GPGGA代表类型,紧接着:

<1>041126.00表示UTC时间,格式为hhmmss.ss;

<2>3010.9782040表示维度30.109782040度;

<3>N表示纬度半球,N表示北纬,S表示南纬;

<4>12009.2327844表示经度120.092327844度;

<5>E表示经度半球,E表示东经,W表示西经;

<6>2表示GPS状态,0表示未定位,1表示非差分定位,2表示差分定位,3表示无效PPS,4表示固定解,5表示浮点解,6表示正在估算,7表示人工输入固定值,8表示模拟模式,9表示WAAS差分;

<7>10表示正在使用的卫星数量,从00到12;

<8>0.5表示水平精确度,从0.5到99.9;

<9>14.7799表示天线离海平面的高度,范围为-9999.9到9999.9;

<10>M表示高度单位米;

<11>0.000表示大地椭球面相对海平面的高度,范围从-999.9到9999.9;

<12>M表示高度单位米;

<13>1.0表示差分时间,所谓差分时间是指从最近一次接收到差分信号开始的秒数,如果不是差分定位将为空;

<14>2573表示差分参考基站标号;

<15>*76表示校验和,用来判断数据是否正常;

 二、gps_common

gps_common里面主要有两类数据格式:(1)gps_common::GPSFix;(2)gps_common::GPSStatus。

(1)GPSFix

uint8 COVARIANCE_TYPE_UNKNOWN=0
uint8 COVARIANCE_TYPE_APPROXIMATED=1
uint8 COVARIANCE_TYPE_DIAGONAL_KNOWN=2
uint8 COVARIANCE_TYPE_KNOWN=3
std_msgs/Header header
gps_common/GPSStatus status
float64 latitude
float64 longitude
float64 altitude
float64 track
float64 speed
float64 climb
float64 pitch
float64 roll
float64 dip
float64 time
float64 gdop
float64 pdop
float64 hdop
float64 vdop
float64 tdop
float64 err
float64 err_horz
float64 err_vert
float64 err_track
float64 err_speed
float64 err_climb
float64 err_time
float64 err_pitch
float64 err_roll
float64 err_dip
float64[9] position_covariance
uint8 position_covariance_type

想要具体了解每个参数的意思可以参考ROS  Wiki上的说明(链接),这里我是关注float64 latitude、float64 longitude和float64 altitude,分别代表纬度、经度和距离海平面的高度,也是后面需要转换成平面投影坐标的主要数据。

(2)GPSStatus

int16 STATUS_NO_FIX=-1
int16 STATUS_FIX=0
int16 STATUS_SBAS_FIX=1
int16 STATUS_GBAS_FIX=2
int16 STATUS_DGPS_FIX=18
int16 STATUS_WAAS_FIX=33
uint16 SOURCE_NONE=0
uint16 SOURCE_GPS=1
uint16 SOURCE_POINTS=2
uint16 SOURCE_DOPPLER=4
uint16 SOURCE_ALTIMETER=8
uint16 SOURCE_MAGNETIC=16
uint16 SOURCE_GYRO=32
uint16 SOURCE_ACCEL=64
std_msgs/Header header
uint16 satellites_used
int32[] satellite_used_prn
uint16 satellites_visible
int32[] satellite_visible_prn
int32[] satellite_visible_z
int32[] satellite_visible_azimuth
int32[] satellite_visible_snr
int16 status
uint16 motion_source
uint16 orientation_source
uint16 position_source

ROS Wiki链接地址(链接),GPSStatus包含在GPSFix数据里面。

安装说明:

gps_common包我上传了资源,属于免费状态,有需要可以自行下载。(链接,审核可能需要点时间)

cd gps_comon

mkdir build

cd build

cmake ..

make

sudo make install

完成安装后只需要在代码中包含头文件:#include <gps_common/GPSFix.h>或者 #include <gps_common/GPSStatus.h>即可使用。

示例:

#include <gps_common/GPSFix.h>

int main(){

    gps_common::GPSFix fix;
    // 以经纬度为例
    fix.latitude = 30.1483;
    fix.longitude = 121.4563;
    //...
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SLAM学习记录:全局定位之gps说明 的相关文章

随机推荐

  • Docker 基础篇 之 安装

    一 Docker安装 查看 CentOS 内核版本 Docker 要求 CentOS 系统的内核版本高于3 10 执行如下命令查询 内核版本 span class token function uname span r span class
  • Java 基础 之 Valid 验证

    一 64 Valid 简介 Bean Validation 内置的校验器 校验器说明 64 Null被注解的元素必须为 null 64 NotNull被注解的元素必须不为 null 64 AssertTrue被注解的元素必须为 true 6
  • HttpURLConnection链接详解

    HttpURLConnection链接详解 一 简介 简单来说 xff0c HttpURLConnection 是 Java 提供的发起 HTTP 请求的基础类库 xff0c 提供了 HTTP 请求的基本功能 xff0c 不过封装的比较少
  • Apache HttpClient 详解

    1 简介 HttpClient 是 Apache Jakarta Common 下的子项目 xff0c 用来提供高效的 最新的 功能丰富的支持 HTTP 协议的客户端编程工具包 xff0c 并且它支持 HTTP 协议最新的版本和建议 Htt
  • OKHttp使用详解

    1 简介 OkHttp 是一个默认高效的 HTTP 客户端 xff1a HTTP 2 支持允许对同一主机的所有请求共享一个套接字 连接池减少了请求延迟 xff08 如果 HTTP 2 不可用 xff09 透明 GZIP 缩小了下载大小 响应
  • python二维码生成与扫码

    1 import qrcode img 61 qrcode make 34 hello world 34 img get image show img save 39 hello png 39 2 import qrcode qr 61 q
  • C语言可变参数(从stdarg.h到应用)

    1 什么是可变参数函数 在C语言编程中有时会遇到一些参数可变的函数 xff0c 例如printf scanf xff0c 其函数原型为 xff1a span class token keyword int span span class t
  • OkHttp 缓存实战

    1 简介 在实际业务中可能某些查询数据 xff0c 不经常变化 xff0c 为了节省流量 提高响应速度和增强用户体验等 xff0c 把变化频率小的数据缓存到本地 xff0c 以实现复用 OkHttp 的缓存功能使用起来也比较简单和灵活 xf
  • Feign 详解

    1 Feign 是什么 Feign是一个http请求调用的轻量级框架 xff0c 可以以Java接口注解的方式调用Http请求 Feign通过处理注解 xff0c 将请求模板化 xff0c 当实际调用的时候 xff0c 传入参数 xff0c
  • @Transactional 注解失效情况及解决办法

    一 64 Transactional 注解在了非 public 方法上 如下所示 64 Transactional修饰在了非public方法上 span class token annotation punctuation 64 Servi
  • @Transactional 事务加了 锁 为什么还有并发问题?

    一 原因分析 Spring 中通过在方法上添加注解 64 Transactional 可以很好的处理事务问题 Spring对此的处理原理是对 加了 64 Transactional 注解的方法 添加 AOP切面来时先事务管理的 而 sync
  • 聊聊微服务之什么是微服务及其好处

    一 什么是微服务 微服务就是一些协同工作的小而自治的服务 很小 xff0c 专注于做好一件事 在单一模块系统中 xff0c 随着新功能的增加 xff0c 代码库会越来越大 时间久了代码库会变得非常庞大 xff0c 以至于在什么地方修改都很困
  • RestTemplate 使用详解

    一 简介 常见的http客户端请求工具 xff1a JDK 自带 HttpURLConnectionApache HttpClientOKHttp 以上 工具虽然常用 xff0c 但对于 RESTful 操作相对不是太友好 所以 xff0c
  • BigDecimal 你使用对了吗

    背景 从事金融相关项目 xff0c 对BigDecimal应该是再熟悉不过了 xff0c 也有很多人因为不知道 不了解或使用不当导致资损事件发生 所以 xff0c 如果你从事金融相关项目 xff0c 或者你的项目中涉及到金额的计算 xff0
  • MySQL 中截取字符串的方法

    LEFT str len 从左边开始截取 xff0c 如果字符串为 null 则返回null str xff1a 被截取字符串 xff1b len xff1a 截取长度 span class token keyword SELECT spa
  • Redis 阻塞原因

    Redis 是典型的单线程架构 xff0c 所有的读写操作都是在一条主线程中完成的 当Redis用于高并发场景时 xff0c 这条线程就变的极其重要 如果它出现阻塞 xff0c 就会对应用带来致命的问题 当 Redis 出现阻塞时 xff0
  • 【pcl入门教程系列】之点云Concatenate

    简要说明 点云拼接 Concatenate 是指将点云进行累加在一起 xff0c 只是累加的方式不太一样 一种是点云的字段与维度完全一致 xff0c 数量可以不同 xff0c 两部分点云相加 xff0c 点云的数量增加了 另一种是点云的字段
  • python多线程

    单线程 from time import ctime sleep def music for i in range 2 print 34 I was listening to music s 34 ctime sleep 1 def mov
  • Nginx下配置Https证书详细过程

    一 Http与Https的区别 HTTP xff1a 是互联网上应用最为广泛的一种网络协议 xff0c 是一个客户端和服务器端请求和应答的标准 xff08 TCP xff09 xff0c 用于从WWW服务器传输超文本到本地浏览器的传输协议
  • SLAM学习记录:全局定位之gps说明

    这段时间因为各种事情耽误了 xff0c 好久没有进行更新了 xff0c 惭愧 xff01 前段时间在研究cartographer的定位建图模块 xff0c 在停更的时间主要再研究如何改善定位建图的效果 xff0c 也有一定的成效 xff0c