RTCM 是一种普遍采用的数据传输格式,它是由国际海运事业无线电技术委员会提出的,用于制定在差分全球导航定位系统和实时动态操作时使用的标准。
表1 RTCM3.2标准格式的帧结构
序号 |
数据内容 |
比特数/bit |
备注 |
1 |
同步码 |
8 |
设为‘11010011’ |
2 |
保留 |
6 |
设为‘000000’ |
3 |
信息长度 |
10 |
数据信息的长度 |
4 |
数据信息 |
不定 |
最大1023bytes |
5 |
CRC |
24 |
校验 |
RTCM3.X标准包含应用层﹑表示层、传输层、数据链路层以及物理层。对于编码﹑解码最重要的是表示层和传输层。表示层对整个数据结构做出了详细的定义,包含数据字段、消息类型等。传输层定义了传输的协议,校验方式等。RTCM3.X 为了达到较高的传输完整率,一条标准的电文由一个固定的引导字、保留字、一个消息的长度定义,一条消息和一个24 bits的周期冗余检校组成。
MSM电文组由于其通用性更好,便于编码、解码,未来将是实时GNSS 数据传输的重要方式。然而由于它是最新提出的一种电文类型,相关介绍文献也较少,因此下面对 MSM电文组进行介绍。MSM电文组由三部分组成﹐分别为电文头(Message Header),卫星数据(Satellite Data)和信号数据(Signal Data)。各MSM电文组的电文头是相同的,包含了该条消息的基本情况,通过解码电文头,可以得到消息类型,参考站信息﹐各观测值信息,电文长度等。
MSM电文组的信号数据是以Cell为单位进行排列,它的排列顺序根据GNSS Cell标志组(Masks)来排列的。GNSS Cell标志组是一个存放卫星编号及频率编号的二维数组。它的第一行存放的是卫星标志组中第一颗观测卫星各信号的标志,以此类推。因此它的大小Ncell是由卫星和信号的个数来决定的,Ncell= Nsat× Nsig,其中Nsat是卫星个数,Nsig是信号个数。
表3 各MSM电文组的消息头包含内容
完成项目中实时RTK部分两套代码的整合,结构体转换;完成单点定位分频点定位;完成完好性结构体数据的实时播发。
extern void ep2gtime(nav_Time_t * gt, double *ep)
{
gt->year = ep[0];
gt->month = ep[1];
gt->day = ep[2];
gt->hour = ep[3];
gt->minute = ep[4];
gt->sec = ep[5];
gpssecw(gt);
gtimejd(gt);
}
gtime_t navt2gtime(nav_Time_t *c)
{
gtime_t t = epoch2time(gpst0);
int week = c->week;
double sec = c->secw;
if (c->sec < -1E9 || 1E9 < sec) sec = 0.0;
t.time += 86400 * 7 * week + (int)sec;
t.sec = sec - (int)sec;
return t;
}
void gtime2navt(nav_Time_t *gt, gtime_t *ge)
{
double ep[6] = { 0 };
time2epoch(*ge, ep);
ep2gtime(gt, ep);
}
int sol2est(sol_t *sol, rtk_BslSol_t *BslSol)
{
return 1;
}
void link_free(nav_SatsEph_t *p_head)
{
nav_SatsEph_t *p_mov;
while (p_head != NULL)
{
p_mov = p_head->next;
p_head = p_mov->next;
free(p_mov);
}
}
int rtk2est(rtk_t *rtk, mnt_BslSol_t *est, rtksvr_t *svr,int fobs, mnt_ConstConfig_t *g_ConstConfig1, double *rs, double *dts, double *azel_,int nu,int nr, const obsd_t *obs)