GPS数据格式的分析
文章目录
- 前言
- 一、数据格式解析
- 1、GPGGA
- 2、GPRMC
- 3、GPCHC
- 4、Kitti数据集oxts数据
- 二、驱动
- 1、功能包
- 1.1 解析GPGGA
- 1.2 华测GPCHC
- 2、ROS相关消息类型
- 2.1 sensor_msgs::NavSatFix
- 2.2 gps_common::GPSFix
- 2.3 sensor_msgs::Imu
- 3、驱动思路
- 三、时间
- 1、UTC时间
- 2、时间戳
前言
GPS数据输出的格式很多,如图所示
一、数据格式解析
1、GPGGA
GPGGA是GPS数据输出格式语句,意思是一帧GPS定位的主要数据,是NMEA格式中使用最广的数据之一。该语句包括17个字段。
GPGGA 语句包括17个字段:
1语句标识头,2世界时间,3纬度,4纬度半球,5经度,6经度半球,7定位质量指示,8使用卫星数量,9HDOP-水平精度因子,10椭球高,11高度单位,12大地水准面高度异常差值,13高度单位,14差分GPS数据期限,15差分参考基站标号,16、17校验和结束标记(用回车符和换行符),分别用14个逗号进行分隔。
格式示例:$GPGGA,014434.70,3817.13334637,N,12139.72994196,E,4,07,1.5,6.571,M,8.942,M,0.7,0016*79
该数据帧的结构及各字段释义如下:
$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>*xx CR LF
$GPGGA:起始引导符及语句格式说明(本句为GPS定位数据);
<1> UTC时间,格式为hhmmss.sss;
<2> 纬度,格式为ddmm.mmmm(第一位是零也将传送);
<3> 纬度半球,N或S(北纬或南纬)
<4> 经度,格式为dddmm.mmmm(第一位零也将传送);
<5> 经度半球,E或W(东经或西经)
<6> GPS状态, 0初始化, 1单点定位, 2码差分, 3无效PPS, 4固定解, 5浮点解, 6正在估算 7,人工输入固定值, 8模拟模式, 9WAAS差分
<7> 使用卫星数量,从00到12(第一个零也将传送)
<8> HDOP-水平精度因子,0.5到99.9,一般认为HDOP越小,质量越好。
<9> 海拔高度,-9999.9到9999.9米
M 指单位米
<10> 大地水准面高度异常差值,-9999.9到9999.9米
M 指单位米
<11> 差分GPS数据期限(RTCM SC-104),最后设立RTCM传送的秒数量,如不是差分定位则为空
<12> 差分参考基站标号,从0000到1023(首位0也将传送)。
*语句结束标志符
xx 从$开始到*之间的所有ASCII码的异或校验
CR 回车符,结束标记
LF 换行符,结束标记
2、GPRMC
推荐定位信息(GPRMC)
$ GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*
hh
<1> UTC时间,hhmmss.sss(时分秒.毫秒)格式
<2> 定位状态,A=有效定位,V=无效定位
<3> 纬度ddmm.mmmm(度分)格式(前面的0也将被传输)
<4> 纬度半球N(北半球)或S(南半球)
<5> 经度dddmm.mmmm(度分)格式(前面的0也将被传输)
<6> 经度半球E(东经)或W(西经)
<7> 地面速率(000.0~999.9节,前面的0也将被传输)
<8> 地面航向(000.0~359.9度,以正北为参考基准,前面的0也将被传输)
<9> UTC日期,ddmmyy(日月年)格式
<10> 磁偏角(000.0~180.0度,前面的0也将被传输)
<11> 磁偏角方向,E(东)或W(西)
<12> 模式指示(仅NMEA0183 3.00版本输出,A=自主定位,D=差分,E=估算,N=数据无效)
*
后hh为$到*
所有字符的异或和
3、GPCHC
华测导航GPCHC协议
$GPCHC,GPSWeek,GPSTime,Heading,Pitch,Roll,gyro x,gyro y,gyro z,acc x,acc y,acc
z,Lattitude,Longitude,Altitude,Ve,Vn,Vu,Baseline,NSV1,NSV2,Status,Age,Warming,Cs,CR,LF
4、Kitti数据集oxts数据
以2011_10_03_drive_0034_extract/oxts为例
dataformat.txt
文件如下所示:
lat:oxts-unit的纬度
lon:oxts-unit的经度
alt: oxts-unit的海拔高度(m)
滚转:滚转角(rad),0=水平,正=左侧向上,范围:-π ~ π
俯仰:俯仰角(rad),0=水平,正=前向下,范围:-π/2 ~ π/2
偏航:航向(rad),0=东,正=逆时针,范围:-π ~ π 东北天坐标系
vn:向北的速度(m/s)
ve:向东速度(m/s)
vf:向前速度,即平行于地球表面(m/s)
vl:向左的速度,即平行于地球表面的速度(m/s)
vu:向上速度,即垂直于地表的速度(m/s)
ax:x方向的加速度,即车辆前方方向的加速度(m/s ^2)
ay:y方向的加速度,即车辆左侧方向的加速度(m/s ^2)
ay:z方向的加速度,即车辆顶部方向的加速度(m/s ^2)
af:向前加速度(m/s ^2)
al:向左加速度(m/s ^2)
au:向上加速度(m/s ^2)
wx:x周围的角速率(rad/s)
wy:y周围的角速率(rad/s)
wz:z周围的角速率(rad/s)
wf:围绕前向轴的角速率(rad/s)
wl:围绕左轴的角速率(rad/s)
wu:围绕向上轴的角速率(rad/s)
pos_accurcy:速度精度(以米为单位的北/东)
vel_accurcy:速度精度(以m/s为单位的北/东)
navstat:导航状态(请参阅navstat_to_string)
numsats:主GPS接收机跟踪的卫星数量
posmode:主GPS接收器的位置模式(请参阅GPS_mode_to_string)
velmode:主GPS接收器的速度模式(请参阅GPS_mode_to_string)
orimode:主GPS接收器的定向模式(参见GPS_mode_to_string)
单帧数据为:
48.987561046718 8.4696952979239 121.09180450439 // 经纬高
-0.020584 -0.000149 0.9367463267949 // 姿态 以东北天坐标系(ENU)
12.185641878808 8.8969705123207 15.087834393646 -0.057134398032698 0.17450967757564 // 速度
-0.31633682509644 -0.15393105646804 9.6145580368715 // 加速度计量测
-0.32811003609922 0.038528529255041 9.6154003554783 // 前左上加速度
-0.009921332362868 0.018688044825555 0.0071581383104018 // 陀螺量测
-0.0099284648375718 0.018828223646961 0.0067743562588337 // 前左上角速度
0.15566630977832 0.021931712199461 // 精度
4 9 5 5 0 // 其他
二、驱动
1、功能包
1.1 解析GPGGA
wiki网址:https://wiki.ros.org/nmea_navsat_driver
1.2 华测GPCHC
官方已出demo,没有的留个邮箱发你。
2、ROS相关消息类型
2.1 sensor_msgs::NavSatFix
官方:sensor_msgs/NavSatFix
其中的子消息类型:sensor_msgs::NavSatStatus
官方:sensor_msgs/NavSatStatus
2.2 gps_common::GPSFix
官方:gps_common/GPSFix
2.3 sensor_msgs::Imu
官方:sensor_msgs/Imu
3、驱动思路
字段分割函数,把GPCHC数据流分割成一个一个的字段,然后进行相应的定义
代码如下(示例):
void supersplit(const std::string& s, std::vector<std::string>& v, const std::string& c)
{std::string::size_type pos1, pos2;size_t len = s.length();pos2 = s.find(c);pos1 = 0;while(std::string::npos != pos2){if("" == s.substr(pos1, pos2-pos1)){v.emplace_back("0");}else{v.emplace_back(s.substr(pos1, pos2-pos1));}pos1 = pos2 + c.size();pos2 = s.find(c, pos1);}if(pos1 != len)v.emplace_back(s.substr(pos1));
}
typedef enum GNSS_GPCHC_INDEX{GNSS_GPCHC_INDEX_HEADER = 0,GNSS_GPCHC_INDEX_GPSWEEK,GNSS_GPCHC_INDEX_GPSTime,GNSS_GPCHC_INDEX_HEADING,GNSS_GPCHC_INDEX_PICH,GNSS_GPCHC_INDEX_ROLL,GNSS_GPCHC_INDEX_GRRO_X,GNSS_GPCHC_INDEX_GRRO_Y,GNSS_GPCHC_INDEX_GRRO_Z,GNSS_GPCHC_INDEX_ACC_X,GNSS_GPCHC_INDEX_ACC_Y,GNSS_GPCHC_INDEX_ACC_Z,GNSS_GPCHC_INDEX_LAT,GNSS_GPCHC_INDEX_LON,GNSS_GPCHC_INDEX_ALT,GNSS_GPCHC_INDEX_VE,GNSS_GPCHC_INDEX_VN,GNSS_GPCHC_INDEX_VU,GNSS_GPCHC_INDEX_SPEED,GNSS_GPCHC_INDEX_NSV1,GNSS_GPCHC_INDEX_NSV2,GNSS_GPCHC_INDEX_STATUS,GNSS_GPCHC_INDEX_AGE,GNSS_GPCHC_INDEX_WARMING,GNSS_GPCHC_INDEX_MAX
}GNSS_GPCHC_INDEX;
定义五种格式:
sensor_msgs::NavSatFix message_NavSatFix;
gps_common::GPSFix message_gpsfix;
sensor_msgs::Imu message_imu;
geometry_msgs::PoseStamped angle_qua; //欧拉角和四元数
geometry_msgs::PoseStamped lla_qua; //经纬高和四元数
发布ROS话题
imu_raw_pub = nh_.advertise<sensor_msgs::Imu>("/imu_raw", 500);nav_sat_fix_pub = nh_.advertise<sensor_msgs::NavSatFix>("/nav_sat_fix", 500);gps_fix_pub = nh_.advertise<gps_common::GPSFix>("/gps_fix", 500);angle_qua_pub = nh_.advertise<geometry_msgs::PoseStamped>("/angle_qua", 500);lla_qua_pub = nh_.advertise<geometry_msgs::PoseStamped>("/lla_qua", 500);
参考博文:https://blog.csdn.net/abanchao/article/details/129096713
三、时间
1、UTC时间
1、UTC是协调世界时,又称世界统一时间、世界标准时间、国际协调时间。
2、协调世界时是以原子时秒长为基础,在时刻上尽量接近于世界时的一种时间计量系统。
3、国际原子时的准确度为每日数纳秒,而世界时的准确度为每日数毫秒。许多应用部门要求时间系统接近世界时UT,对于这种情况,一种称为协调世界时的折衷时标于1972年面世。为确保协调世界时与世界时相差不会超过0.9秒,在有需要的情况下会在协调世界时内加上正或负闰秒。
2、时间戳
时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。Unix 时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。
1.自建时间戳:此类时间戳是通过时间接收设备(如GPS,CDMA,北斗卫星)来获取时间到时间戳服务器上,并通过时间戳服务器签发时间戳证书。此种时间戳可用来企业内部责任认定,在法庭认证时并不具备法律效力。因其在通过时间接收设备接收时间时存在被篡改的可能,故此不能做为法律依据。
GPS数据格式的分析相关推荐
- c语言gps数据类型,GPS数据格式
该协议信息包括GGA位置测定系统的定位资料.GSV导航卫星资料.RMC导 航卫星特定精简资料.VTG方向及速度等相关资料.这里以接收GGA数据为例, 给出的格式如下: $GPGGA, hhmmss,d ...
- android gps磁偏角,GPS数据格式解析
GPS数据格式解析 简介 GPS发送数据以行为单位,数据格式如下: $信息类型,x,x,x,x,x,x,x,x,x,x,x,x,x 每行以字符"$"开头,以为结尾,CR-Carri ...
- ADS-B及其GPS数据异常分析
paper:Analysis of anomalies in ADS-B and its GPS data 通过对比ADS-B数据及GPS数据来分析ADS-B系统存在的一些缺陷. 一.摘要 传统上,空 ...
- 【转载】噪声基底的计算和GPS接收机灵敏度分析
[噪声基底计算:http://blog.sina.com.cn/s/blog_6b5d9a650100tyql.html] [GPS接收机灵敏度分析:http://bbs.ednchina.com/B ...
- IIQ文件内gps信息的分析
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的. 近日有网友咨询,使用<vb.net 教程 5-7 Bitmap类 3 获得图片信息Exif ...
- android gps源码分析,Android编程之Android GPS ——AGPS源码分析及配置
本文主要介绍了Android编程的Android GPS --AGPS源码分析及配置,通过具体的分析以及源码,向大家展示了这些,希望对大家学习Android编程有所帮助. 1:冷启动指令: locat ...
- GPS数据格式 GPRMC 解析
nmealib是一个基于C语言的用于nmea协议的开源库. 在http://nmea.sourceforge.net/上下载的. 部分文件分析: 在头文件info.h中定义了NMEA解码需要的关键变量 ...
- 移远EC20 4G模块的GPS部件刷新率修改方法,附GPS数据格式说明
关键词:移远 EC20 全功能版 CE FAG GPS GNSS GLONASS 全球定位系统 刷新率 Quectel_EC20_GNSS_AT_Commands_Manual_V1 ...
- 关于gps测量精度的分析
2014年7月9日,本人在使用gps放样时按常规复核就近控制点,无意中发现gps高程精度竟然可达6mm,遂考虑将其 用在低精度的高程测量作业中. 然而在7月11日解算参数后复核高等级水准点时却出现8c ...
最新文章
- Nginx命令与配置详解
- Java中装箱与拆箱
- 第一百六十三节,jQuery,基础核心
- 关于elastic-job 分片与线程问题
- C语言初学者学习资料分享
- 秋招银行类金融科技岗笔试面试经验
- 20220117 matlab 全局变量调试
- Building a Hypermedia-Driven RESTful Web Service
- win10 docker镜像导入导出
- 深度学习(一、入门)
- SQL SERVER DAY函数
- linux菜鸟入门命令——自我学习
- [工具]Chrome(Google浏览器)常用插件
- 【高光谱、多光谱和全色图像融合】
- Spring Boot Admin监控中心详细讲解
- 操作系统——MFC实现进程创建和通信4
- EChar中的柱状图如何设置柱子的最大宽度和刻度的最小间隔
- 如何在面试中介绍自己的项目经验(面向java改进版)
- 潇洒郎: PostgreSQL学习——安装、启动、执行sql,修改数据库密码
- JBPM(二)---JBPM工作流基本操作