rtklib--伪距单点定位(single-point positioning)学习(1)Satposs

2023-05-16

目录

  • 前言
  • pntpos总体调用流程图
  • Satposs总体调用流程图:
  • 1.Satposs:按照所观测到的卫星顺序计算出每颗卫星的位置、速度{钟差、频漂}
  • 2.ephclk:通过广播星历来确定卫星钟偏
  • 3.stasys:根据卫星编号确定该卫星所属的导航系统和该卫星在该系统中的 PRN编号。
  • 4.eph2clk:根据信号发射时间和广播星历,计算卫星钟差
  • 5.satpos:计算信号发射时刻卫星的Position、Velocity、Clock
  • 6.ephpos:根据广播星历计算出算信号发射时刻卫星的 P、V、C
  • 7.eph2pos:根据广播星历计算出信号发射时刻卫星的位置和钟差
  • 总结


前言

       rtklib是一个非常不错的开源软件,研究GNSS方向的同学、学者都或多或少会接触到,里面的源代码适合很多类似我这样的新手进行学习,我就是分享一下我学习过程的一些心得想法和感悟,欢迎大家一起交流(接口程序postpos的参数配置、读取数据我这里不提及,只说spp的具体实现)

       话不多说,直接开整。

pntpos总体调用流程图

在这里插入图片描述
pntpos函数参数设置与解释
在这里插入图片描述
1.检查卫星个数是否大于 0

在这里插入图片描述
2.当处理选项 opt中的模式不是单点模式时,电离层校正采用 Klobuchar模型,对流层校正则采用 Saastamoinen模型;相反,当其为单点模式时,对输入参数 opt不做修改。
在这里插入图片描述
3.调用 satposs函数,按照所观测到的卫星顺序计算出每颗卫星的位置、速度{钟差、频漂}。

在这里插入图片描述

4.调用 estpos函数,通过伪距实现绝对定位,计算出接收机的位置和钟差,顺带返回实现定位后每颗卫星的{方位角、仰角}、定位时有效性、定位后伪距残差。
在这里插入图片描述

5.调用 raim_fde函数,对上一步得到的定位结果进行接收机自主正直性检测(raim)。通过再次使用 vsat数组,这里只会在对定位结果有贡献的卫星数据进行检测。
在这里插入图片描述

6.调用 estvel函数,依靠多普勒频移测量值计算接收机的速度。这里只使用通过了上一步 raim_fde操作的卫星数据,所以对于计算出的速度就没有再次进行raim了。
在这里插入图片描述

7.首先将 ssat_t结构体数组的 vs(定位时有效性)、azel(方位角、仰角)、resp(伪距残余)、resc(载波相位残余)和 snr(信号强度)都置为 0,然后再将实现定位后的 azel、snr赋予 ssat_t结构体数组,而 vs、resp则只赋值给那些对定位有贡献的卫星,没有参与定位的卫星,这两个属性值为 0。
在这里插入图片描述


具体函数的介绍:限于篇幅原因,本篇文章只介绍有关于计算卫星位置、速度的Satposs函数,以及它所调用的函数。

Satposs总体调用流程图:

在这里插入图片描述

1.Satposs:按照所观测到的卫星顺序计算出每颗卫星的位置、速度{钟差、频漂}

在这里插入图片描述

(1)按照观测数据的顺序,首先将将当前观测卫星的 rs、dts、var和svh数组的元素置 0。

在这里插入图片描述

(2)通过判断某一频率下信号的伪距是否为 0,来得到此时所用的频率个数。注意,频率个数不能大于 NFREQ(默认为 3)。
在这里插入图片描述

(3)用数据接收时间减去伪距信号传播时间,得到卫星信号的发射时间。

在这里插入图片描述

(4)调用 ephclk函数,由广播星历计算出当前观测卫星的钟差。

在这里插入图片描述

(5)用 3中的信号发射时间减去 4中的钟偏,得到 GPS时间下的卫星信号发射时间。

在这里插入图片描述
(6)调用 satpos函数,计算信号发射时刻卫星的 P(ecef,m)、V(ecef,m/s)、C((s|s/s))。

在这里插入图片描述

(7)如果由 6中计算出的钟偏为 0,就再次调用 ephclk函数将其计算出的卫星钟偏作为最终的结果。

在这里插入图片描述

2.ephclk:通过广播星历来确定卫星钟偏

(1)首先调用 satsys函数根据卫星编号确定该卫星所属的导航系统和该卫星在该系统中的 PRN编号。

在这里插入图片描述

(2)对于 GPS导航系统,调用 seleph函数来选择 toe值与星历选择时间标准 teph最近的那个星历。
(3)调用 eph2clk函数,通过广播星历和信号发射时间计算出卫星钟差。
在这里插入图片描述

3.stasys:根据卫星编号确定该卫星所属的导航系统和该卫星在该系统中的 PRN编号。

(1)为处理意外情况(卫星号不在 1-MAXSAT之内),先令卫星系统为 SYS_NONE。

在这里插入图片描述

(2)按照 RTKLIB中定义相应宏的顺序来判断是否是 GPS、GLO、GAL系统等,判断标准是将卫星号减去前面的导航系统所拥有的卫星个数,来判断剩余卫星个数是否小于等于本系统的卫星个数。
在这里插入图片描述

(3)确定所属的系统后,通过加上最小卫星编号 PRN再减去 1得到该卫星在该系统中的 PRN编号。

在这里插入图片描述

4.eph2clk:根据信号发射时间和广播星历,计算卫星钟差

在这里插入图片描述

(1)计算与星历参考时间的偏差 dt = t-toc。

在这里插入图片描述

(2)利用二项式校正计算出卫星钟差,从 dt中减去这部分,然后再进行一次上述操作,得到最终的 dt。

在这里插入图片描述

(3)使用二项式校正得到最终的钟差。

在这里插入图片描述

5.satpos:计算信号发射时刻卫星的Position、Velocity、Clock

在这里插入图片描述

(1)判断星历选项的值,如果是 EPHOPT_BRDC,调用 ephpos函数,根据广播星历计算出算信号发射时刻卫星的 P、V、C
在这里插入图片描述

6.ephpos:根据广播星历计算出算信号发射时刻卫星的 P、V、C

(1)调用 satsys函数,确定该卫星所属的导航系统。

在这里插入图片描述

(2)如果该卫星属于 GPS系统,则调用 seleph函数来选择广播星历。

在这里插入图片描述

(3)根据选中的广播星历,调用 eph2pos函数来计算信号发射时刻卫星的位置、钟差和相应结果的误差。
在这里插入图片描述

(4)在信号发射时刻的基础上给定一个微小的时间间隔,再次计算新时刻的位置和钟差。

在这里插入图片描述

(5)基于差分近似计算卫星速度和时钟漂移。

在这里插入图片描述

7.eph2pos:根据广播星历计算出信号发射时刻卫星的位置和钟差

在这里插入图片描述

(1)与大部分资料上计算卫星位置和钟差的过程是一样的,只是这里在计算偏近点角 E时采用的是牛顿法来进行迭代求解(计算卫星位置代码过多不予附图见源码)。
在这里插入图片描述

(2)计算相对论效应对卫星钟差的影响。

在这里插入图片描述

(3)计算误差直接采用 URA值来标定,具体对应关系可在 ICD-GPS-200C P83中找到。

在这里插入图片描述


总结

       看代码的过程中确实感觉到了自己的基础理论知识不够扎实,需要学习的东西还有很多,以后也会不定期的更新一些有关于GNSS的基础知识,希望能和大家一起探讨学习。

       完整代码我也放在了我的资源中,可以免费下载,文中的截图均是自己根据参考的解析进行的截图,是按照一个函数为一个模块顺序进行截取的,然后依次进入它们所调用的函数。


参考:
RTKLIB源码解析(一)——单点定位(pntpos.c).

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

rtklib--伪距单点定位(single-point positioning)学习(1)Satposs 的相关文章

  • Safari 中的相对定位

    它必须很简单 这是我的 CSS progressImage position relative top 50 progressPanel height 100 width 100 text align center display none
  • 如何在给定(一条线上的两个点)和(从第三点到第一点的距离)的情况下找到第三点

    给定 一条线上的两个点 和 第三点到第一点的距离 如何找到第三点 语言 Visual Basic 2012 第三点与第二点在同一条线上 并且可能更接近第一点 也可能更接近第二点 这是一个可以处理两者 来自数据数组 的函数 奇怪的是 我似乎无
  • jQuery - 如何向图像添加标记

    我正在考虑如何向图像添加一些标记 我的意思是像谷歌地图中的东西 地点标记 我有一个图像 如果用户单击该图像 我想在用户单击的那个地方添加一些其他图像 例如 如果用户单击图像中的 3 个位置 我想在这 3 个位置上添加我的图像 我知道 如何获
  • 为什么这个绝对定位的元素没有相对于其容器定位?

    我有这个简单的代码来放置两个div container元素并排 每一个里面都有一个孩子div child我想相对于其父级进行定位 div container div class container a br div class child
  • 确定点是否位于 3D 网格内部的算法

    用于确定点是否位于 3D 网格内部的快速算法是什么 为简单起见 您可以假设网格都是三角形并且没有孔 到目前为止我所知道的是 确定光线是否穿过网格的一种流行方法是计算光线 三角形相交的数量 它必须很快 因为我正在使用它进行触觉医学模拟 所以我
  • jQuery UI:可拖动滚动问题

    我正在尝试使用 jQuery UI 构建一个可拖放的文件夹文件视图 但我遇到了一个问题 我认为这归因于助手 这是我的代码 The HTML div span Parent Directory 1 span div span class fo
  • 测试点是否在匹配的引号之间 (emacs lisp)

    我们如何检查是否 point 在匹配的 引号 内 示例 1 point 但不在范围之内 示例 2 此处引用 point 那里引用 在 Emacs Lisp 中 您正在寻找的是syntax ppss 定义于syntax el 它返回 10 个
  • 将 DIV 放置在具有可变高度的固定 div 下方

    问题是这样的 可以说我有这样的东西 div div div div div div 我希望 below div 位于 top div 下方 但不使用 margin top 因为 top div 将具有不同的大小 此外 below div 的
  • 如何创建网格/平铺视图? [复制]

    这个问题在这里已经有答案了 例如 我有一些类 article 我想以网格视图的形式查看该类 所以我应用了这种风格 article width 100px height 100px background 333 float left marg
  • 将宽度未知的 HTML 元素居中于屏幕中间

    如果我有一个宽度和高度未知的 HTML 元素 如何将其居中到屏幕的正中央 如果纯 CSS 无法完成 那么 javascript 也可以 这个答案可能适合也可能不适合您的情况 具体取决于how正在确定未知的宽度 高度 如果exact尺寸未知
  • 位置为绝对的元素上的垂直空间

    我如何制作元素position absolute and 动态高度仅使用 css 占据垂直空间 我可以使用容器和显示方面的技巧吗 不幸的是 根据定义 使用绝对定位意味着您的元素不再占用空间 所以不行 只能通过css没有办法做到这一点 您当然
  • javascript中div的随机位置

    我正在尝试使用 javascript 使 Div 随机出现在网页上的任何位置 因此 一个 div 出现然后消失 然后另一个 div 出现在页面上的其他位置然后消失 然后另一个 div 再次出现在页面上的另一个随机位置然后消失 依此类推 我不
  • 绝对定位与百分比给出意想不到的结果

    请考虑以下 HTML 和 CSS 片段 container border 1px solid red height 100px width 100px item border 1px dashed purple position absol
  • 如何添加两个背景图像 - 从中​​心列向左和向右

    我有这个CSS wrapper1 min width 1020px min height 100 wrapper2 height 100 background url img1 jpg 100px 300px no repeat url i
  • 使用本机 CSS 和 HTML 设置漏斗堆栈布局样式

    我想显示类似漏斗堆栈的数据 如下图所示 我能够使用边框创建锥度 例如 div class taper div 并使用以下 CSS taper width 200px height 0px border color lightgray tra
  • Android 绘制点

    如何用画布绘制完整的圆或点 我使用画布和路径 绘画类 my code Override public boolean onTouchEvent MotionEvent event float eventX event getX float
  • 滚动然后对齐到顶部

    只是想知道是否有人知道我如何重新创建我不久前看到的导航栏样式 我刚刚找到了我在上面看到的网站 但不确定他们是如何到达那里的 基本上希望它随页面滚动然后锁定到顶部 http lesscss org http lesscss org 只需快速
  • OpenGL 点精灵可以在 Android 中使用吗?

    我正在 Droid 版本 2 1 update1 上进行开发 我支持的 GL 扩展包括 GL OES point sprite 和 GL OES point size array 我无法获取要渲染的点精灵 下面的代码在 glTexEnvi
  • CSS 问题,填写表单时标题会上升

    我有一个奇怪的 CSS 问题 我不太确定如何解决这个问题 当我按下网站上的 登录 按钮并开始输入用户名时 标题会上升 我真的不知道是什么原因造成的 有任何想法吗 Thanks 这是一些代码 表格 tooltip wrap position
  • Java - 点在线

    我如何找出点 x y 是否位于其他两个点之间创建的线上 我尝试了这个 但似乎有些问题 因为我没有得到我应该得到的结果 public boolean intersects Point k Point z Point p Line2D line

随机推荐

  • python的 ping 网络状态监测方法(含多IP)

    ping 基本概念 ping xff08 Packet Internet Groper xff09 是一种因特网包探索器 xff0c 用于测试网络连接量的程序 Ping是工作在 TCP IP网络体系结构中应用层的一个服务命令 xff0c 主
  • MS5611气压传感器中文资料

    MS5611是新一代高分辨率气压传感器 xff0c 分辨率可达10cm 其内置24位AD转换器 xff0c 支持IIC和SPI通讯协议 xff0c 传输速率可达20MHz 其转换时间可以设置 测量 工作范围 xff1a 10 1200mba
  • STM32学习——串口数据收发

    STM32学习 串口数据收发 61 61 STM32的串口通信 61 61 61 61 HAL库中串口发送的重要函数 61 61 61 61 STM32定时器实训 61 61 STM32的串口通信 异步串行通信 xff1a 通信双方在没有同
  • 赛目科技2023校园招聘火热进行中!(算法/开发等多个岗位)

    点击下方卡片 xff0c 关注 自动驾驶之心 公众号 ADAS巨卷干货 xff0c 即可获取 点击进入 自动驾驶之心 求职交流 技术交流群 一 赛目概况 我们是专注于仿真技术自主创新的技术驱动型公司 xff0c 主要从事 ICV 仿真测 试
  • 多模态运动数据采集系统

    为给研究人员提供更多有效的多模态同步数据集 xff0c 合肥工业大学的程景铭团队设计了一个多模态运动数据采集系统 xff0c 采集了包含全身运动多模态数据集 xff0c 并利用已有算法对数据集进行了评估测试 多模态运动数据采集系统 多模态运
  • 【STM32】 STM32 F4 串口通讯

    概念 串口 xff0c 即串行接口 xff0c 是一种可以将接收来自CPU的并行数据字符转换为连续的串行数据流发送出去 xff0c 同时可将接收的串行数据流转换为并行的数据字符供给CPU的器件 串口通信 xff08 Serial Commu
  • 【安装】安装ros机器人系统和无人机环境配置常见问题总结

    安装ros机器人系统和无人机环境配置常见问题总结 一 安装ROS二 无人机环境配置更多安装 Ubuntu16 04安装ros xff1a http wiki ros org cn kinetic Installation Ubuntu Ub
  • ubuntu18.04搭建python环境

    注意 xff1a 我使用的是虚拟机 xff0c 在操作前请确保虚拟机可以访问到网络 1 安装python3 9 0解释器 xff0c 配置环境变量 2 配置虚拟环境 一 安装python3 9 0 到 opt python39 更新软件源
  • vscode生成的exe文件出现中文乱码的问题

    问题描述 vscode生成的exe文件出现中文乱码的问题 解决方案 xff1a 头文件处添加 xff1a span class token macro property span class token directive hash spa
  • c++进行函数重载时报错:此运算符函数的参数太多C/C++(344)

    问题描述 c 43 43 进行函数重载时报错 xff1a 此运算符函数的参数太多C C 43 43 344 原因分析 xff1a C 43 43 中类内运算符重载时只能有且仅有一个参数 解决方案 xff1a 方案一 xff1a 将重载函数作
  • c++中加入随机种子的方法

    c 43 43 中加入随机种子的方法 提示 xff1a c 43 43 中加入随机种子的方法 解决方案 xff1a span class token macro property span class token directive has
  • STM32 第5讲 MDK下载安装注册及配置

    目录 MDK下载安装注册MDK简介MDK下载MDK安装器件支持包安装注册鸡 MDK配置 MDK下载安装注册 MDK简介 MDK不同版本对比 MDK下载 MDK安装使用 61 MDK软件安装 43 器件支持包安装 MDK软件下载 xff1a
  • STM32 第7讲 STM32F407系列系统架构及映射

    Cortex M内核 amp 芯片 F407系统架构 注 xff1a 64KB CCM 内核耦合存储器 数据 RAM不属于总线矩阵 xff0c 只能存数据 xff0c 不支持DMA xff0c 但访问速度快 总线矩阵 xff1a 总线矩阵用
  • 稳了!理想汽车一季报亮眼,禾赛或成大赢家

    作者 Alan 编辑 激光雷达老炮儿 点击下方卡片 xff0c 关注 自动驾驶之心 公众号 ADAS巨卷干货 xff0c 即可获取 5月10日 xff0c 理想汽车公布2023年第一季度财报 xff0c 季度营收和交付量双双创下历史新高 第
  • STM32 第9讲 STM32CubeMX简介安装和简单使用

    文章目录 STM32CubeMX安装安装JAVA环境安装STM32CubeMX下载关联STM32Cube固件包 新建工程芯片选型配置时钟源时钟树配置GPIO引脚配置Debug选项配置生成工程编写逻辑代码 STM32CubeMX安装 STM3
  • STM32 第11讲 正点原子SYSTEM文件夹介绍及使用(sys/delay/usart)

    文章目录 sys文件夹delay文件夹函数简介Systick定时器工作原理寄存器函数介绍 usart文件夹printf函数输出流程printf函数的使用printf函数支持微库法代码法 SYSTEM 文件夹里面的代码由正点原子提供 xff0
  • STM32 第20讲 通用定时器(简介/框图/时钟源)

    通用定时器 简介定时器框图时钟源计数器时钟源寄存器设置方法内部时钟 CK INT 外部时钟模式1 xff08 TI1 TI2 xff09 外部时钟模式2 xff08 ETR xff09 内部触发输入 xff08 ITRx xff09 基本定
  • C语言程序设计 第 9 讲 初识结构体

    初识结构体 结构的声明结构成员的类型结构体变量的定义和初始化结构体成员的访问结构体传参 结构是一些值的集合 xff0c 结构体的值类型可以不同 xff0c 这些值称为结构体的成员变量 结构的声明 span class token keywo
  • C语言程序设计 第 10 讲 数据的存储

    数据的存储 数据类型介绍数据的存储整数大端小端浮点数的存储规则 数据类型介绍 C语言基本内置类型 span class token keyword char span span class token comment 字符数据类型 span
  • rtklib--伪距单点定位(single-point positioning)学习(1)Satposs

    目录 前言pntpos总体调用流程图Satposs总体调用流程图 xff1a 1 Satposs 按照所观测到的卫星顺序计算出每颗卫星的位置 速度 钟差 频漂 2 ephclk 通过广播星历来确定卫星钟偏3 stasys 根据卫星编号确定该