||
本人博客才疏学浅,仅作为自己学习工作之余,记录所做过的工作之用。如果能帮到一些同学,那也是极好的- - 。
开源,分享经验,让生活工作更美好!!!!!!!!!
RTCM1.RTCM协议
国际海运事业无线电技术委员会(RTCM)于1983年11月为全球推广应用查分GPS业务设立了RTCMSC-104专门委员会,以便论证用于提供差分GPS业务的各种方法,并制定了标准差分协议,它是一种国际通用格式,并制定了标准差分协议。它是一种国际通用格式,可以用于实时伪距差分RTD和实时载波相位差分RTK。RTD精度只能达到亚米级,而RTK采用双频可以达到厘米级。
RTCM-2.0(Codecorrection –>DGPS)
RTCM-2.1(Code+Phase correction –>RTK)
RTCM-2.2(……+GLONASS)
RTCM-2.3(……+GPSAntenna Definition)
RTCM-3.0(……+NetworkRTK&GNSS)
2.RTCM数据结构
差分电文由若干帧电文组成,每帧电文包括2个字的标准电文头,N个字的数据(N的取值范围从0 到31),总长度为N+2。每个电文字长度均为30bit,电文字的最后6bit是校验区,校验算法与GPS卫星导航电文的校验算法相同。每帧电文中最多可包含N=31个30bit字的数据,全长共33个电文字。不同类型的电文N值不同,同类电文的N值也有可能不同。电文类型6或34等在没有数据时为补空电文,仅由2个30bit字的电文头组成,其N=0
每一个数据包含一些消息类型,用于储存不同的内容:
Message1,Message2,……,MessageN
而每一个Message包括header和body
header:messagetype,time,lengthof message
body:datafor every data type
3.RTCM解码工作
符合ANSI X3.15 协议的UART 设备中,一个8bit 字节的数据位传输顺序是:传输的第1 个数据位记为“a1”,最后一个传输的数据位记为“a8”。DGNSS 参考站和用户设备在进行差分信息的传输时均应支持“8 取6”的操作(从a1 到a6)。a1 到a6 是电文信息,a7 是标记位,a8 为空白位。当接收机接受到一个字节(8bit)的数据后,必须扣除后两位。因此需要接收5个字节的数据才能形成一个字(30bit),最后再按RTCM中对数据的格式要求解码出具体的数据。
以上是2.3解码的思路。
4.RTCM解码中的BUG
type=1和type=3类型的数据的基站ID应该是一样的才可以使用,由于源码中存在BUG,导致两者解码出来的基站ID不一致。至此,BUG解决。
4.RTCM编码工作
编码的方式和解码基本类似。接收机接收到数据。那么我们来看一下如何编码:
第一步:
我们知道RTCM格式是按照一个字是30bit进行存储的,
那么如何按照标准格式存满一个字?根据如下步骤
首先,定义:unsign int temp=0; 占32个bit
然后,假设所要存储数据占5bit,那么定义unsign int a存储。
其次,根据a所要存储的位置进行移位操作a<<m,或a>>m,
最后,a|temp就把所要存储的5bit数据存储到相应的位置。
……………………
依次类推,就可以在temp中存满30bit。
第二步:
首先,把第一步中存满的30bit进行5等分,可得5个6bit数据。
然后,在每一个6bit数据之后添加两位,一位是标识符,一位是空白位,形成8个bit,也就是一个字节
那么,我们就得到了5个字节
最后,由于2.3标准所规定的差分数据电文采用30bit,MSB优先原则(假如一个字节存储方式为a1~a8,高位到低位,那么按照MSB存储之后就变为a8~a1),最终发送给用户
至此,编码工作结束。需要指出的是:虽然发送的是MSB形式,但用户接收到数据后会进行还原,因此用户在解码的的过程中无需考虑是MSB还是LSB。还有,当需要编码的数值是负数时,应使用其补码形式。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-10-20 01:11
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社