RTKLIB进行后处理开源代码调用过程

1.main.c(rnx2rtkp.c)——主函数

主函数中主要定义了一些变量的缺省值。比如定位处理选项、解决方案输出选项等。

2. postpos (postpos.c )——事后处理函数

(1)openses函数(postpos.c):预处理,读取输入文件

目的:通过读取 filopt_t  fopt 中的参数,实现对‘文件的读取’,读取子函数为 openses。函数构成:读取卫星天线参数;接收机天线参数;打开大地水准面数据;如果L5偏移不存在,使用卫星L2偏移。

判断处理时间是否正确,否则程序终止;

通过malloc函数为ifile[],动态分配内存,否则程序终止;

进行文件的读取,对于sp3/SP3、.eph/EPH文件的时间,起使和终止相差1小时;brdc文件的开始和终止时间差2小时。

路径替换,实现语句。

经过两次读取循环,已经将观测、导航文件读取到ifie数组中:将输出结果文件路径保存到ofile数组中。

(2)execses_b函数(postpos.c ):处理基站信息

通过函数readpreceph读取精密星历,然后为每个基准站执行操作,用户传入的基准站可能不止一个,所以在执行处理流动站的函数execses_r之前进行了一些字符串操作,应该是在分割传入的基准站的字符,然后循环处理每个基准站。最后都是要进入函数execses_r,处理每个流动站

(3)execses_r函数(postpos.c ):处理流动站信息

execses_r 函数是用来判断调用输入文件时是调用的关键词还是直接使用了文件名,然后分别进行处理。同样的对于流动站的操作首先也需要分割字符串,识别每个流动站,这部分代码与函数execses_b基本一致,最后进入函数execses,处理每一个流动站。

(4)execses函数(postpos.c ): 执行处理操作

读取电离层参数readtec(ionex.c)、erp文件readerp(rtkcmn.c)(地球章动、极移参数)、读取观测值文件以及导航电文readobsnav(postpose.c)、差分码文件readdcb(preceph.c)、设置天线参数setpcv(postpose.c)(天线参数在函数postpos中已经读取过)、地球潮汐改正文件readotl(postpose.c);之后开始根据开始定义的prcopt_t变量中储存的定位模式获取天线相位中心位置antpos(postpos.c);接着写输出的结果文件的头文件outhead(postpose.c);然后根据prcopt_t变量中储存的soltype变量即上文提到的输出结果的形式,对一些索引变量进行赋值操作等(前向滤波,后向滤波,前向滤波和后向滤波想结合),最后进入函数procpospostpos.c)进行下一步处理。

(5)procpos函数(postpos.c):定位过程

这个函数开始产生变量rtk_t,obsd_t,sol_t,开始正式进入rtk解算流程,首先通过函数rtkinit(rtkpos.c)初始化变量rtk_t;然后进入while循环,调用函数inputobs(postpose.c),这个函数的作用应该是将之前读入的观测值文件、导航电文等的信息传入rtk_t、obsd_t这两个变量之中,obsd_t记录了卫星号接收机号、伪距、载波、信噪比等等观测值信息,这些都是解算坐标最重要的信息;固定好导航系统后satsys(rtkcmn.c),下一步进行了载波相位偏差纠正corr_phase_bias_ssr(postpso.c),使用的SSR方法,;然后进入函数rtkpos开始解算坐标;函数后面的代码用于输出结果文件,同样对于不同的soltype有不同的输出方式。

(6)rtkpos函数(rtkpos.c)

定义了一个prcopt_t用来储存传入的rtk_t中的prcopt_t;

设置基准站位置;

计算流动站/基准站观测值数量,可用于后面判断是否满足差分条件;

单点定位解算流动站坐标pntpos(pntpos.c),单点定位解算的坐标可以作为初始值参与其他精密定位方法;

如果定位模式是单点定位,那么就可以直接输出结果结束了outsolstat(rtkpos.c);

精密单点定位pppos(ppp.c);

基准站的差分定位和基线解算,因此首先需要检查基站数据数量和差分时间;动基线与其他差分定位方式,动基线的基站坐标需要随时间同步变化,所以需要计算出变化速率;估计基站的位置/速度pntpos(pntpos.c)、基站的时间同步位置。

上面的步骤只算了相对定位的差分时间和动基线坐标,并没有进行坐标解算,最后进行相对定位relpos(rtkpos.c),并输出最终结果,到这里定位步骤全部完成。

(7)relpos函数(rtkpos.c):相对定位

首先看relpos的输入输出,观测数据obs和星历nav当然是必须的,nu和nr分别是移动站和基准站的观测值条数,rtk这个结构有多种用途,作为输出结果的承载结构,rtk->opt中含有解算参数,另外其中还包含了过程参数如浮点解,固定解,及其对应的P阵,这些既是输入又是输出。

卫星位置解算satposs(ephemeris.c),返回值rs是卫星的位置和速度数组,返回值dts是卫星的钟差钟漂。

基准站无差观测zdres(rtkpos.c),返回值y+nu*nf*2是基准站的无差观测向量,y=mat(nf*2,n),nf在iono-free模型下是1;返回值e+nu*3是基准站的视线向量;返回值azel+nu*2是基准站的方位角仰角向量。

选择基准站和移动站的共视星selsat(rtkpos.c)。

卡尔曼滤波的时间更新udstate(rtkpos.c)。

计算移动站的无差观测zdres(rtkpos.c),此函数与上边计算基站的无差观测为同一个函数,只不过总体说来有两点不同:站点坐标使用的是xp,这个是kalman滤波时间更新中得到的新坐标;所有的输出,如y,e,azel,起始存储位置为0,而上边的基准站无差观测时为nu*size。

双差观测及观测矩阵ddres(rtkpos.c)。

到这里,量测更新的观测向量,雅可比矩阵,噪声矩阵都有了,下边完成的是kalman滤波的量测更新filter(rtkcmn.c),可以算出相对定位的浮点解。

固定模糊度,求出固定解resamb_LAMBDA(rtkpos.c)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值