【精选】RTKLIB源码解析(二)、 RTK定位(rtkpos.c) | 您所在的位置:网站首页 › rtk无效解状态情况 › 【精选】RTKLIB源码解析(二)、 RTK定位(rtkpos.c) |
本博客是转载,感谢:
rtklib代码详解——rtkpos.c - 博客园—哆啦A梦 - 博客园 主函数:rtkpos1、 设置基站位置 2、 统计基站和流动站的卫星数量 3、 单点定位解算 4、若定位模式为单点定位,直接返回 5、精密单点定位 6 、动基线,利用单点定位计算基站的位置: 7、 差分定位 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、 释放局部变量,返回定位状态 1、 计算基线长度 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.12 相关标志位置位(卫星有效标志位,记录参考卫星和流动卫星号,nb:每种类型,每个频点下双差有效的卫星观测量数量) 6、 动基线,进行基线长度约束(基线相关的H阵更新,新息以及量测噪声计算) 7、 H阵打印 8、 计算双差量测噪声R (具体计算方式??????) 9、 释放局部变量内存,并返回有效的观测量数目nv 1、 更新位置速度以及加速度 2、 更新电离层参数(配置为:电离层估计)
3、 更新对流层参数(配置为:对流层估计)
4、 更新接收机硬件延迟 5、更新载波相位状态(定位模式时载波相位定位才会进行) 在这之前,先会进行电离层配置模式检测,决定是否估计,然后计算基线的长度,然后传进去。 1、 初始检测所有卫星电离层状态量是否正常 2、 更行当前历元各个卫星的电离层状态量及对应P阵(驱动噪声和基线长度、高度角等信息有关) 在这之前,先进行对流层参数配置模式的检测判断 1、 更新对流层参数,状态量数量和估计模型相关,和卫星数量无关。 首先判断是不是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、 存储周跳和半周跳的标志位 1、 检测载波相位的频点数量以及载波相位值初始值检测,并计算几何无关L1 L2频点线性组合值,初步检测值得合理性 2、 通过前后历元的差值,判断周跳情况,门限值初始给的是0.05m 利用L1 L5频点组合检测周跳。 通过多普勒和相位一致性检测周跳detslp_dop因为时钟跳动的原因,不使能多普勒检测的方法 1、 若为PMODE_FIXED, 配置给定设定的位置和方差 2、 首次初始化位置信息,用单点定位的结果 注意:这个地方可以配置KF的动态模型:
3、 若为PMODE_STATIC,则不仅进行更新
4、 若动态模型为一阶模型,则直接重置方差,和位置
5、 检查P阵的有效性,无效,则重置
6、 检查状态量中有效的状态数量,并记录索引id,检查卫星数量
7、 位置速度加速度状态更新 首先,更新F阵和状态量x,以及P阵 其次,进行状态递推 最后,考虑驱动噪声,Q阵(更新方式)分别设置水平和垂直噪声驱动方差?转化? 主要有高度角的限制 1、 检查前一历元基站卫星数目以及当前时间差是否小于门限,返回并记录当前历元信息
2、 检查与前一历元的时间差:大于2倍门限,返回
3 、计算前一历元基站观测量下的卫星位置和钟差信息:
4、 计算前一历元基站观测量非差残差信息:
5、 残差通过时间推算(????????) 1、 基站位置有效性检测
2、 地潮修正,影响多大?原理未知????? 其中,配置项有多重模型,如下: 3、 ecef转经纬高
4、 遍历每个卫星,计算残差 4.1 计算几何距离 俯仰角和方位角
4.2 删除指定卫星,或模式
4.3 补偿卫星钟差
4.4 对流层延迟模型校正
4.5 天线相位中心校准
4.6 非差相位和码残差计算(卫星) 1、 判断是否无电离层组合(双频观测量:可配置: 无电离层组合)
2、 检查 波长以及cn0是否有效
3、 无电离层组合 4、 各个频点残差计算: 1、 整周模糊度ratio赋初值,并检测是否进行模糊度解算(定位模式,模糊度解算配置项以及模糊度验证门限值) 2、 单差到双差的转移矩阵D求解(转移方式) 3、 根据转移矩阵,求解双差整周模糊度以及协方差阵 4、 从协方差阵中单独提取整周的协方差阵 整周和状态两种其他项的协方差阵 5、 lambda/mlambda 整数最小二乘估计(估计结果在b,s中保存了) 6、 ratio值计算: 7、 ratio值检测,大于门限值,求解固定解以及固定解的协方差 8、 重新存储单差的模糊度 进入条件: 连续固定次数大于门限值(默认门限值为0,只要固定就进入) 以及固定模式配置为fix and hold 输入xa为固定解(单差模糊度) 1、 循环遍历各个卫星,查找满足条件的卫星,并设置相应标志位 2、 计算固定解双差和浮点解双差 的差值,形成量测信息,并更行H阵 3 、若观测量数量有效,设置R阵,并量测更新 |
CopyRight 2018-2019 实验室设备网 版权所有 |