[TOC]
Ginan 持续更新,整理了一下 CHANGELOG 文件,总共三个大版本:
- [1.0.0] - 2021-07-13:首次正式发布。
- [1.1.0] - 2021-08-06:增加模糊度解算、Ntrip/RTCM 支持、BiasSinex 改正。
- [1.1.1] - 2021-09-29:加入 CHANGELOG.md 文件 、修复 Eigen v3.4 编译问题。
- [1.2] - 2021-10-07:调整三处 PEA 配置文件。
- [1.3] - 2022-03-18:增加新的模糊度解算方法、非差非组合算法框架、EOP 率估计、.ERP/.TRO 文件输出、RTCM 转 RINEX3/.SP3、二进制数据流记录和回放、Python 脚本 (difftrace、diffsnx、duffutil、merge_sp3、log2snx 等)。
- [1.4] - 2022-05-24:增加 YAML 配置检测、全面应用卡尔曼滤波统计测试、重构并简化硬件和系统偏差处理代码、改进模糊度固定算法。
- [1.4.1] - 2022-05-27:指定 Eigen、Boost、Mongo-cxx 的版本、移除根目录虚假的 CMakeLists.txt。
- [1.4.2] - 2022-07-18:修复 GLONASS 钟差计算错误。
- [1.5] - 2022-07-26:支持 RINEX4 读写、加入新 POD 模式 pod_data_int、重构了 PEA 配置文件、增强了最小约束算法和配置选项、改进了 POD ERP/EOP 插值算法、增强了 Brdc2sp3 应用程序的稳健性、实现了简化的 PEA/POD .erp 信息处理。
- [1.5.1] - 2022-08-22:北斗二三 BlockID和SRP、允许偶尔丢失伪观测数据点(全为零的行)、首历元进行卫星健康检测、使用不同的 sp3 文件进行比较。
- [1.5.2] - 2022-12-28:无需 conda 环境来运行 python 脚本、天线 PCO 值现在针对特定星座。
- [1.5.3] - 2023-04-04:修复当第一颗卫星被排除在外时,使用初始条件文件的 POD 崩溃,当标准 ERP 文件提供的数据不足时,POD 将使用 IC ERP 数据。
- [1.5.4] - 2023-05-07:新依赖关系:Ginan 依赖 python gnssanalysis 工具(可通过 pip 安装)运行大部分脚本,但运行主要产品本身并不需要它。
- [2.0.1] - 2023-06-09:统一的观测模型和滤波器、完整的多系统多频功能、非差非组合 (UDUC) 处理(V1 版仅为组合 IF)、集成 CPP 和耦合精确轨道确定 (POD) 、在滤波周期滑移和离群点检测与移除方面,数据处理更加稳健、完整的 RTCM3 第 1 和第 2 阶段信息解码和编码、全面实现 SLR 数据处理。
- [2.1] - 2023-07-04:实现减少动态(伪随机)脉冲估算、高阶(二阶/三阶)电离层建模、加入伪观测/约束条件,以消除观测模型中的等级缺陷、实现了完整的全球导航卫星系统恒定姿态建模(GPS/GAL/GLO/BDS/QZS)、Python gnssanalysis 工具更新。
- [3.0] - 2024-02-05:实现并验证了 IERS 2010 标准潮汐模型、实施紧凑型 SSR 标准校正输出编码/解码、重组 YAML 配置文件、改进了卫星姿态模型、改进了接收机(天线)姿态模型。
顺带一提,李老师的公众号文章发在 2021-2/2, Ginan 首次发布之前。
拿到一份源码,先把文件结构看明白。
CMake 构建的 C++ 项目,项目结构,可以从顶层 CmakeLists.txt 开始入手。Ginan 的 CmakeLists.txt 总共 284 行
- 定义最小 CMake 版本,
- 设置文件路径到变量
- 定义一些编译标志
cpp 文件夹内存放源码,CmakeLists.txt 总共 418 行
usingThePea.md、peaUser.md、peaNetwork.md、peaConfig.md、defaultConfiguration.md
- Network mode:多个参考站一起处理,用于估计参数,生成校正产品。
- User mode:不同观测站单独处理,用于进行精密定位。
软件的流程基本上是按顺序进行的,确保开发人员和用户都能简单理解。该流程的主要组成部分概述如下:
在处理一个历元的数据之前,要先获取相关的数据,由于这个过程对很多地方都有影响,所有单独作为一个进程。
-
配置文件:YAML格式,每个历元开始都会读取配置文件的时间戳,如果发现有修改,会把新的配置读进来。
-
产品输入:每个历元的开始,如果配置文件中有新产品写入或修改,会读进来。
-
元数据输入:每个历元开始前,可从外部来源获取星历等元数据,以增强软件的功能。
-
观测数据输入:观测数据是软件运行的基础。在每个历元开始处理之前,进行同步和整理。软件采用继承和多态模式,所有数据类型的输入均可使用单一的流程进行处理,并由后台功能执行所需的检索和解析。观测数据按时间戳同步,当请求特定时间戳的数据时,在处理过程中使用与该时间戳相对应的观测数据之前,会对该时间戳之前的所有数据进行解析(但可能会丢弃)。
-
对象初始化:在接下来的处理阶段,会在全局对象中创建许多特定于接收机的对象。为防止全局对象中出现线程碰撞,接收机对象在此时先创建。
输入数据之后进行预处理,检测异常和可用性。这样就能低延迟地报告问题,并为后期运行阶段更高效地处理数据做好准备。包括:周跳检测、低延时的异常检测、缺失数据检测、输出报告。
-
动力学模型:
-
轨道和状态预测:
-
误差建模和估计:
-
参数初始化:
-
鲁棒卡尔曼滤波:
-
RTS平滑:
-
整周模糊度求解:
-
产品计算:
- 平滑:
- 最小化约束:
- 单元测试:
usingThePod.md、podConfig.md、podExamples.md
POD 模块有两种主要运行模式:轨道拟合、轨迹预测。
根据可能不准确的卫星位置伪距观测数据计算出精确的轨道参数。
在轨迹预测模式下,根据精确的轨道参数估计/预测精确的卫星位置。
PEA 使用单个YAML文件作为配置文件,