RTKLIB源码解析(二)、 RTK定位(rtkpos.c)

2023-10-27

本博客是转载,感谢:

rtklib代码详解——rtkpos.c - 博客园—哆啦A梦 - 博客园

主函数: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、 释放局部变量,返回定位状态

  • 双差函数计算以及量测阵计算函数:ddres

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

  • 状态时间更新: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 设置相位偏差初始状态信息     

  • 检测周跳通过LLI函数:detslp_ll

         首先,遍历各个频点

      

         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阵,并量测更新

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RTKLIB源码解析(二)、 RTK定位(rtkpos.c) 的相关文章

随机推荐

  • 2020-02-26

    请教大家一个AD的问题困扰多少的问题 AD10原理图复制一个器件 比如R1 正常复制粘贴还是R1 通过SHIFT拖动是R2 那如果我原理图中原本就有R2了 还是会有重复的现象 怎样复制粘贴会生成一个原理图中没有的位号呢
  • Splunk HEC 取发送数据 服务器的hostname

    1 背景 最近Client 发送数据到 Splunk HEC 发现对方hostname 没有取到 都是HEC 的VIP 地址 这个就不能发现是那个host 发过来的数据 下面查了下文档 发现Splunk 是可以跟踪发送数据的host 的 主
  • 【计算机网络】UDP协议

    目录 1 UDP协议头部格式 2 UDP协议的特点 2 1 无连接 2 2 不可靠 2 3 面向数据报 2 4 有接收缓冲区 没有发送缓冲区 2 5 大小受限 3 基于UDP的应用层协议 4 UDP协议与TCP协议对比 5 经典面试题 1
  • 基于.NET的企业级软件开发

    企业级开发最好基于一些成熟的框架 从而将主要精力集中到领域模型的设计上 1 UI与业务逻辑的隔离 在web领域可以采用ASP NET MVC框架 2 业务逻辑与DB的隔离 可以采用Entity Framework框架 3 业务逻辑中涉及工作
  • 毕业设计-基于机器视觉的水表读数智能识别系统-OpenCV

    目录 前言 课题背景和意义 实现技术思路 一 系统总体方案设计 二 图像预处理的研究与实现 三 识别区域定位及字符分割的研究与实现 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备
  • 分治算法(Java)

    想必大家通过算法的名字就已经明白了 这个算法的过程 一个是分 一个是治 那么我为什么要使用这种算法呢 因为当前的问题是我们使用现有的方法是解决不了的 所以我们需要将一个复杂的问题分成两个或者是更多个相同或相似的子问题 然后再一我们已有的方法
  • 【detectron2】注册、训练、推断自己的数据集

    一 注册自己的数据集 使用detectron2训练自己的数据集 第一步要注册自己的数据集 首先保证自己的数据集标注是coco格式 就可以使用load coco json加载自己的数据集并转化为detectron2的专有数据格式 使用Data
  • C++中关于枚举的使用(enum)

    首先加入头文件 include
  • mysql中字段长度到底是字符数还是字节数?

    这个问题 困惑了很多新学者 今天就给大家来测试测试 首先来给个定长的字段类型 因为这样好看效果 超出的会被截取 create table test id int 10 not null auto increment test name ch
  • 在VMware ESXi服务器上配置NAT上网

    文章目录 前言 一 vSphere Client上操作 1 配置网络环境 2 创建软件路由 3 虚拟机设置 总结 相关文章 前言 在使用VMware workstation的时候 我们经常以NAT的方式配置虚拟机的网络 与桥接方式相比 这样
  • spring之application.yml配置

    server port 18080 context path netty logging config classpath logback xml 文件上传下载大小 速度配置 spring http multipart max file s
  • 15_弹性盒布局

    一 弹性盒子的基本概念 弹性盒属性的使用 概念 在父级元素设置设置弹性盒属性 容器 所有的子级元素会在父级容器的轴向上排列 项目 作用 控制所有的子级元素在父级元素上的排列位置 如何形成弹性盒 属性 display 显示方式 属性值 fle
  • 软件测试-兼容性测试

    1 兼容性测试综述 软件兼容性测试 检查软件之间是否能够正确交互和共享信息 交互可以在运行在同一台计算机上的应用程序之间发生 也可以在距离数千公里的不同计算机上的应用程序之间发生 还可以用软盘在两台计算机之间传输数据 兼容性测试要解决的问题
  • Visual Studio Code调试node.js:无法在PATH上找到运行时的node

    首先 环境变量Path中加入nodejs的路径 验证nodejs是否已经加入环境变量 接着 重新启动Visual Studio Code 试一下 是不是好了 附录 Visual Studio Code 调试 nodeJS launch js
  • 开源C++版本CGI库CGICC入门

    原发布在ChinaUnix 但未被自动搬迁过来 http blog chinaunix net uid 20682147 id 4895772 html PDF版本 https download csdn net download aque
  • 记一次在关于本地IDE能AC,牛客平台却显示数组越界问题——输入处理带来的问题!!!!

    在参加了百度 网易雷火 网易互娱 360笔试之后 被频繁遇到的数组越界问题深深困扰 为什么在eclipse上怎么测试 怎么看代码都找不到数组越界越在哪 不禁发出越你姥姥的惊叹 今天晚上再次遇到这个问题 在查看了各种遇到此类问题的帖子后 终于
  • 安装完Anaconda Navigator,“Mark for specfic version installation”显示灰色(不能更改包的版本)的解决方法

    最近安装完anaconda 出现了 Mark for specfic version installation 显示灰色的问题 解决方法很简单 只需要在 conda环境下输入以下命令即可 conda search python 仔细思考一下
  • 【C++】通过类来计算圆的周长

    include
  • 时域高通滤波算法(THPF)

    时域高通滤波算法 THPF 今天介绍一下图像非均匀校正中的场景校正算法 时域高通滤波算法 Temporal High Pass Filtering THPF 以及它后续的各种改进版本 空域和频域已经在之前的文章介绍过一些了 时域还没有 图像
  • RTKLIB源码解析(二)、 RTK定位(rtkpos.c)

    本博客是转载 感谢 rtklib代码详解 rtkpos c 博客园 哆啦A梦 博客园 主函数 rtkpos 1 设置基站位置 2 统计基站和流动站的卫星数量 3 单点定位解算 4 若定位模式为单点定位 直接返回 5 精密单点定位 6 动基线