最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

rtklib代码详解——rtkpos.c

来源:动视网 责编:小OO 时间:2025-09-27 08:25:41
文档

rtklib代码详解——rtkpos.c

rtklib代码详解——rtkpos.c主函数:rtkpos1设置基站位置2统计基站和流动站的卫星数量3单点定位解算4若定位模式为单点定位,直接返回5精密单点定位6动基线,利⽤单点定位计算基站的位置:7差分定位差分定位函数:relpos1计算流动站和参考站时间差2计算卫星位置3参考站⾮差残差4基站信息插值,后处理,通过配置项进⾏设置5选择基站和参考站之间的公共卫星:6状态时间更新7初始变量内存申请以及赋初值8设置迭代次数(设置值为1,动基线,增加2次迭代次数)9开始迭代量测更新9.1计算流动站
推荐度:
导读rtklib代码详解——rtkpos.c主函数:rtkpos1设置基站位置2统计基站和流动站的卫星数量3单点定位解算4若定位模式为单点定位,直接返回5精密单点定位6动基线,利⽤单点定位计算基站的位置:7差分定位差分定位函数:relpos1计算流动站和参考站时间差2计算卫星位置3参考站⾮差残差4基站信息插值,后处理,通过配置项进⾏设置5选择基站和参考站之间的公共卫星:6状态时间更新7初始变量内存申请以及赋初值8设置迭代次数(设置值为1,动基线,增加2次迭代次数)9开始迭代量测更新9.1计算流动站
rtklib代码详解——rtkpos.c 主函数:rtkpos

1 设置基站位置

2 统计基站和流动站的卫星数量

3 单点定位解算   

  

4 若定位模式为单点定位,直接返回

5 精密单点定位

 

6 动基线,利⽤单点定位计算基站的位置:

7 差分定位

差分定位函数:relpos

1 计算流动站和参考站时间差

2 计算卫星位置

3 参考站⾮差残差

4 基站信息插值,后处理,通过配置项进⾏设置

5 选择基站和参考站之间的公共卫星:

6 状态时间更新

7 初始变量内存申请以及赋初值

8 设置迭代次数(设置值为1,动基线,增加2次迭代次数)

9 开始迭代量测更新

9.1 计算流动站卫星的⾮差残差结果

9.2 双差残差以及量测矩阵等更新

9.3 KF量测更新实现

10 量测更新完成,检测是否完成,并利⽤更新以后的结果计算残差

10.1 利⽤浮点结果计算双差残差以及量测噪声

  

10.2 通过⽅差和量测进⾏校验,检测结果是否有效

  

10.3 存储浮点结果

  

10.4存储模糊度相关的信息,统计有效卫星数⽬

  

10.5 检测卫星数量是否有效

  

11 整周模糊度解算(WL-NL TCAR 两种⽅式未实现,在rtklib中实现了LAMBDA)模糊度解算模式定义:

11.1模糊度解算成功,根据固定结果计算双差残差和协⽅差,并进⾏校验

  

11.2 固定解验证有效,若配置为hold模式,需要存储模糊度信息(具体哪些信息?怎么衔接?)

  

12 存储rtk结果,位置和速度以及⽅差信息(若状态为固定解,存储固定解结果)

13 存储当前历元的载波相位信息,供下次使⽤

14 存储SNR信息

15 更新卫星的fix信息以及周跳信息(具体怎么使⽤?)

16 释放局部变量,返回定位状态

双差函数计算以及量测阵计算函数:ddres1 计算基线长度

2 基站和流动站位置转化

3 变量内存申请和变量初始化

4 计算各个卫星电离层和对流层延时因⼦(配置为电离层对流层估计模式)

5 遍历不同系统和频点,计算双差残差,其中,若为差分伪距模式,需要遍历次数

    注:所有模式分为四类,每⼀类分别挑选参考卫星,再计算双差的结果,考虑到系统时差的影响

    注:遍历次数设置:载波相位在0-nf,nf⾄2nf为伪距,因此伪距差分定位从nf开始

5.1 选取参考卫星,根据⾼度⾓,若选取失败,则返回

其中,m代表不同的频点和系统,分为四类,每⼀类选取⼀次参考卫星

5.2 双差开始,遍历各个卫星

5.2.1 初始检测频点和观测量是否有效

5.2.2 获取波长信息,并检测波长的有效性

5.2.3 获取对应观测量的H阵的位置,并进⾏赋初值

5.2.4 双差残差

5.2.5 更新H阵

5.2.6 双差电离层延迟项,若配置为电离层延时估计模式,包括残差计算,并扣除该部分,和对应H阵更新

5.2.7双差对流层延迟项,若配置为对流层延时估计模式,包括残差计算,并扣除该部分,和对应H阵更新

5.2.8双差整周模糊度项(只对载波相位有效)

注:区分⽆电离层组合,和状态更新中整周模糊度赋初值对应

     

5.2.9 GLONASS硬件偏差双差(区分不同模式进⾏处理,具体估计⽅式?????)

    

5.2.10 分别保存伪距和载波残差信息

     

5.2.11 新息检查(门限值默认设置为1m)

若超过门限,则直接返回,不进⾏保存

    

5.2.11 单差观测量噪声计算(计算⽅式??????)

    

5.2.11 相关标志位置位(卫星有效标志位,记录参考卫星和流动卫星号,nb:每种类型,每个频点下双差有效的卫星观测量数量)

    

5 动基线,进⾏基线长度约束(基线相关的H阵更新,新息以及量测噪声计算)

6 H阵打印

7 计算双差量测噪声R (具体计算⽅式??????)

8 释放局部变量内存,并返回有效的观测量数⽬nv

状态时间更新:udstate

   1 更新位置速度以及加速度

2 更新电离层参数(配置为:电离层估计)

3 更新对流层参数(配置为:对流层估计)

4 更新接收机硬件延迟

5 更新载波相位状态(定位模式时载波相位定位才会进⾏)

电离层参数时间更新函数: udion

在这之前,先会进⾏电离层配置模式检测,决定是否估计,然后计算基线的长度,然后传进去。

1 初始检测所有卫星电离层状态量是否正常

2 更⾏当前历元各个卫星的电离层状态量及对应P阵(驱动噪声和基线长度、⾼度⾓等信息有关)

对流层参数时间更新函数: udtrop

在这之前,先进⾏对流层参数配置模式的检测判断

1 更新对流层参数,状态量数量和估计模型相关,和卫星数量⽆关。

更新接收机硬件偏差函数: udrcvbias

⾸先判断是不是glonass系统且整周模糊度的配置的估计⽅式

若模糊度固定次数⼤于门限值且模糊度解算⽐例因⼦⼤于门限值,则q阵不会变。更新相位偏差函数:udbias

⾸先会检测,当前配置定位模式,是否是载波相位定位。

1 循环检测各个卫星观测量相位周跳情况

1.1 检测周跳通过LLI(失锁标志等),初始标志为清除

1.2 检测周跳通过geometry-free phase jump

1.3 检测周跳通过多普勒和载波相位差分

1.4 更新半周跳有效标志位

2 根据整周模糊度的解算⽅式、周跳检测标志、码相位等信息更新整周状态量等

遍历不同频点

2.1 如果是单历元模式或者超过中断计数器过期等,重置相位模糊度

2.2 如果检测到周跳(⽆电离层组合,标志位获取不⼀样,需注意)或者单历元模式,重置相位模糊度

2.3 通过码相位信息,估计相位偏差初值(整周模糊度初值)

  若为⽆电离层组合,则需要按组合⽅式计算初始值

2.4 修正相位偏差确保码相位和载波⼀致性(??????????)

2.5 设置相位偏差初始状态信息

⾸先,遍历各个频点

1 检测载波相位是否有效,以及前⼀历元的时间差是否满⾜条件:

2 获取前⼀时刻的失锁标志位

3 通过失锁标志位检测周跳(前向和后向算法此时有区别????????????)

4 检测周跳情况根据前后的周跳标志(根据前后变化置位半周跳标志位)

5 存储当前的LLI

6 存储周跳和半周跳的标志位

通过geometry-free检测周跳函数:detslp_gf_L1L2

1 检测载波相位的频点数量以及载波相位值初始值检测,并计算⼏何⽆关L1 L2频点线性组合值,初步检测值得合理性

2 通过前后历元的差值,判断周跳情况,门限值初始给的是0.05m

通过geometry-free检测周跳函数:detslp_gf_L1L5

利⽤L1 L5频点组合检测周跳。

通过多普勒和相位⼀致性检测周跳detslp_dop

  因为时钟跳动的原因,不使能多普勒检测的⽅法位置速度时间更新函数:udpos 1 若为PMODE_FIXED, 配置给定设定的位置和⽅差

2 ⾸次初始化位置信息,⽤单点定位的结果

注意:这个地⽅可以配置KF的动态模型:

3 若为PMODE_STATIC,则不仅进⾏更新

4 若动态模型为⼀阶模型,则直接重置⽅差,和位置

5 检查P阵的有效性,⽆效,则重置

6 检查状态量中有效的状态数量,并记录索引id,检查卫星数量

7 位置速度加速度状态更新

⾸先,更新F阵和状态量x,以及P阵

其次,进⾏状态递推

最后,考虑驱动噪声,Q阵(更新⽅式)分别设置⽔平和垂直噪声驱动⽅差?转化?

选择公共卫星函数:selsat

  主要有⾼度⾓的

基站数据插值函数:intpres

1 检查前⼀历元基站卫星数⽬以及当前时间差是否⼩于门限,返回并记录当前历元信息

2 检查与前⼀历元的时间差:⼤于2倍门限,返回

3 计算前⼀历元基站观测量下的卫星位置和钟差信息:

4 计算前⼀历元基站观测量⾮差残差信息:

5 残差通过时间推算(????????)

⾮差残差函数:zdres

1 基站位置有效性检测

2 地潮修正,影响多⼤?原理未知?????

  其中,配置项有多重模型,如下:

3 ecef转经纬⾼

4 遍历每个卫星,计算残差

4.1 计算⼏何距离俯仰⾓和⽅位⾓

4.2 删除指定卫星,或模式

4.3 补偿卫星钟差

4.4 对流层延迟模型校正

4.5 天线相位中⼼校准

4.6 ⾮差相位和码残差计算(卫星)

各个卫星⾮差残差计算函数: zdres_sat

1 判断是否⽆电离层组合(双频观测量:可配置:⽆电离层组合)

  

2 检查波长以及cn0是否有效

3 ⽆电离层组合

  4 各个频点残差计算:

利⽤LAMBDA解整周模糊度函数: resamb_LAMBDA

1 整周模糊度ratio赋初值,并检测是否进⾏模糊度解算(定位模式,模糊度解算配置项以及模糊度验证门限值)

2 单差到双差的转移矩阵D求解(转移⽅式)

3 根据转移矩阵,求解双差整周模糊度以及协⽅差阵

4 从协⽅差阵中单独提取整周的协⽅差阵整周和状态两种其他项的协⽅差阵

5 lambda/mlambda 整数最⼩⼆乘估计(估计结果在b,s中保存了)

6 ratio值计算:

7 ratio值检测,⼤于门限值,求解固定解以及固定解的协⽅差

8 重新存储单差的模糊度

Fix and hold模式下模糊度保持: holdamb

进⼊条件:连续固定次数⼤于门限值(默认门限值为0,只要固定就进⼊)以及固定模式配置为fix and hold

输⼊xa为固定解(单差模糊度)

1 循环遍历各个卫星,查找满⾜条件的卫星,并设置相应标志位

2 计算固定解双差和浮点解双差的差值,形成量测信息,并更⾏H阵

3 若观测量数量有效,设置R阵,并量测更新

文档

rtklib代码详解——rtkpos.c

rtklib代码详解——rtkpos.c主函数:rtkpos1设置基站位置2统计基站和流动站的卫星数量3单点定位解算4若定位模式为单点定位,直接返回5精密单点定位6动基线,利⽤单点定位计算基站的位置:7差分定位差分定位函数:relpos1计算流动站和参考站时间差2计算卫星位置3参考站⾮差残差4基站信息插值,后处理,通过配置项进⾏设置5选择基站和参考站之间的公共卫星:6状态时间更新7初始变量内存申请以及赋初值8设置迭代次数(设置值为1,动基线,增加2次迭代次数)9开始迭代量测更新9.1计算流动站
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top