当前位置: 首页
编程语言
CompassFusion实现从GNSS到GNSS/INS组合导航的独立软件工程包方案

CompassFusion实现从GNSS到GNSS/INS组合导航的独立软件工程包方案

热心网友 时间:2026-06-27
转载

CompassFusion是一个整合GNSS与INS组合导航的独立工程包,集成SPP、PPP、PPK、IMU机械编排、松耦合及伪距级紧耦合框架,提供统一XML配置入口和真实数据样例。松耦合链路稳定输出合理结果,紧耦合需继续完善钟差建模与异常处理,旨在构建可复现的工程基线版本。

1. 为什么要开发 CompassFusion

在 GNSS/INS 组合导航的日常研究与开发中,不少同行可能都有类似的困扰:算法模块、导航数据、配置参数和测试脚本分散在多个目录中。单独看某个模块似乎都能正常运行,但真要复现一次完整的组合导航实验时,却需要四处搜寻 RINEX 文件、广播星历、IMU 数据以及真值轨迹,还得逐一核对配置文件和对比脚本——整个过程相当耗时费力。

CompassFusion 的设计目标非常明确:将这些零散的内容整合成一个结构清晰、可独立运行的完整软件包。具体来说,主要聚焦以下几个方面:

  • 保留 GNSS 的基础处理能力:SPP、PPP、PPK 等核心定位模式。
  • 集成 INS 的机械编排模块,实现惯导解算。
  • 搭建 GNSS/INS 松耦合与伪距级紧耦合的实验框架,便于算法验证。
  • 提供统一的 XML 配置入口,告别以往零散的参数管理方式。
  • 随包附带一套真实的 GREAT/MSF 数据样例,开箱即可运行。
  • 配备测试脚本、结果图示与数据说明文档,方便快速复现和验证实验结果。

项目地址:

  • GitHub:
  • Gitee:

2. 软件整体架构

CompassFusion 的核心目录结构如下所示:

 复制代码CompassFusion
├── src/
│   ├── run_compass_fusion.py       # 统一 XML 入口
│   ├── run_spp.py                  # SPP 入口
│   ├── run_ppp.py                  # PPP 入口
│   ├── run_ppk.py                  # PPK 入口
│   └── compass/
│       ├── core/                   # 坐标、常量、基础类型
│       ├── gnss/                   # SPP/PPP/PPK/精密产品/偏差模型
│       ├── ins/                    # 机械编排、松耦合、紧耦合
│       └── io/                     # RINEX 与输入解析
├── configs/                        # XML 配置
├── data_examples/                  # 随包真实数据样例
├── scripts/                        # 批处理、导出、诊断脚本
├── tests/                          # 回归测试
└── docs/                           # 文档与博客素材

若将其绘制成模块图,各组件之间的关联关系会更加清晰明了:

3. 随包数据:不仅是代码,更是可运行的导航输入

本次整合的关键思路在于,不能只提供一堆最终结果文件。我们随包放置了一套真实的导航输入数据,存放路径如下:

 复制代码data_examples/great_msf_20211013/

具体包含哪些内容?下表列出了所有文件及其用途:

类型文件或目录作用
流动站观测GNSS/SEPT2860.21O动态站 RINEX 观测
基站观测GNSS/R2932860.21oRTK/PPK 差分参考站
广播星历GNSS/brdm2860.21pSPP、PPK、伪距紧耦合输入生成
IMU 原始数据IMU/smallimu_out_2.txtINS 机械编排与组合导航
GNSS 真值groundtruth/groundtruth_211013_GNSS.txtGNSS 轨迹对比
GNSS/INS 真值groundtruth/groundtruth_211013_ADIS.txt组合导航位置、速度、姿态参考
精密轨道products/sp3/*.SP3PPP 精密轨道
精密钟差products/clk/*.CLKPPP 精密钟差
OSB/OBXproducts/bia/*偏差与姿态辅助产品
ERP/DCBproducts/erp/, products/dcb/地球自转与码偏差产品
模型文件model/ATX、EOP、海潮、JPL 星历等

换句话说,当你拿到这个仓库后,完全无需立刻从外部海量搜寻数据,直接利用这套真实数据即可运行一个完整演示——这种开箱即用的体验,在工程复现中极为宝贵。

4. 当前支持的处理链路

CompassFusion 当前定位更偏向于一个“工程可运行版本”,而非号称所有高精度模型都已完全成熟的最终科研软件。目前相对稳定的处理链路包括:

可以稳定展示的功能如下:

  • GNSS SPP / PPP / PPK 基础处理能力。
  • IMU 机械编排解算。
  • GNSS/INS 松耦合导航。
  • SPP-INS 伪距级紧耦合实验。
  • 基于 XML 的配置化运行方式。
  • 真实 GREAT/MSF 数据测试验证。
  • 测试脚本与结果对比分析。

属于后续重点增强方向的能力包括:

  • PPP/RTK 载波相位紧耦合。
  • 紧耦合中的模糊度参数估计与固定。
  • 更完整的多系统码偏差、相位偏差以及鲁棒异常处理。
  • 长时间 GNSS 中断下的惯导误差控制与抑制。

5. 统一入口与配置文件说明

统一程序入口为:

 复制代码src/run_compass_fusion.py

示例配置文件位于:

 复制代码configs/compass_fusion_great_msf_example.xml

典型的运行命令如下:

 复制代码$env:PYTHONPATH = "$PWDsrc"
& 'D:annacondaenvsBraVLpython.exe' srcrun_compass_fusion.py --config configscompass_fusion_great_msf_example.xml

PPP 示例脚本:

 复制代码scriptsrun_ppp_great_msf_example.ps1

测试执行命令:

 复制代码$env:PYTHONPATH = "$PWDsrc"
& 'D:annacondaenvsBraVLpython.exe' -m pytest tests

配置文件中可调整的参数涵盖了从基本模式到输出设置的方方面面:

配置类别示例参数说明
基本模式mode=loose/tight/mechanization选择机械编排、松耦合或紧耦合
时间范围start_sow, end_sow选择处理时间段
输入文件rinexo, rinexn, imu, truth指定观测、星历、IMU 和真值
精密产品sp3, clk, bias, atx, EOP, blqPPP/精密模型所需产品
GNSS 设置sys, sat_rm, minimum_elev系统选择、剔除卫星、高度角
滤波设置gyro_noise, accel_noise, GateSigmaIMU 噪声、滤波门限
杆臂设置AntennaLever天线到 IMU 的杆臂
输出设置outputs/ins, rate_hz输出路径和输出频率

6. 测试结果概览

当前发布候选版本的测试结果如下。需要强调的是,这些数值主要用于反映当前工程的运行状态,不建议直接当作最终科研性能的上限来理解。

Case模式匹配历元Median / mRMS / mP95 / mMax / m
GREAT looseloose600.0160.0160.0170.017
Synthetic tighttight310.0340.0910.1870.206
Real SPP-INSloose601.6822.1143.8825.704
Real SPP-INStight6015.18815.40116.91917.041
Real PPP-INSloose601.3701.3751.4041.410
Real PPK-INSloose600.5430.5700.7690.771

从这张表中可以得出一些有价值的结论:

  • GREAT 松耦合示例已经能够实现厘米级的对齐精度。
  • 合成紧耦合可以稳定运行,误差在分米级,说明基础框架是可靠的。
  • 真实 SPP 松耦合为米级精度——这符合单点定位作为组合输入时的预期表现。
  • 真实 SPP 紧耦合当前数值明显偏大,表明伪距紧耦合在钟差、系统间偏差、量测权重以及异常剔除策略方面仍需进一步优化。
  • PPK-INS 松耦合优于 SPP-INS,说明高质量的 GNSS 位置和速度对组合导航的精度起着决定性作用。

7. 结果图展示

7.1 GREAT 松耦合结果

GREAT 松耦合样例的误差非常微小,主要用于验证 INS 机械编排、杆臂标定、时间同步以及松耦合框架的正确性。

误差累计分布:

7.2 合成紧耦合结果

合成紧耦合主要用于验证伪距量测更新、滤波状态传播、钟差初始化以及量测门限逻辑。从结果来看,基本逻辑已经顺利跑通。

7.3 真实 SPP-INS 松耦合

真实 SPP-INS 松耦合采用 RINEX 推导出的 SPP 位置和速度作为 GNSS 输入。误差保持在米级,主要反映了 SPP 本身的观测质量与模型误差的真实水平。

7.4 真实 SPP-INS 紧耦合

真实 SPP 紧耦合目前尚未达到理想状态。当前结果偏大,可能的原因主要集中在以下几个方面:

  • 多系统接收机钟差与系统间偏差的建模仍不够完善。
  • 伪距异常值、低高度角卫星以及 NLOS 风险,需要更强大的鲁棒处理能力。
  • 伪距量测的权重与 INS 过程噪声还需针对真实数据进行重新标定。
  • 目前尚未引入载波相位紧耦合和模糊度状态。

7.5 真实 PPP-INS 与 PPK-INS 松耦合

PPP-INS 松耦合:

PPK-INS 松耦合:

8. 一个比较实用的结论

从现有结果来看,CompassFusion 的工程主线已经顺利跑通,松耦合链路能够稳定输出合理可靠的导航结果。

但如果希望让“紧耦合”成为可以正式对外宣传的高精度功能,还需继续推进以下几项关键工作:

  • 将 PPP/RTK 载波相位量测引入紧耦合框架。
  • 在紧耦合滤波器中加入模糊度状态参数。
  • 实现整数模糊度固定与部分模糊度选择策略。
  • 进行更系统的钟差、系统间偏差以及码偏差建模。
  • 针对真实数据中的异常卫星和粗差,实施更强的鲁棒隔离策略。

9. 如何复现实验

想亲自跑一遍实验?操作步骤非常简单:

克隆仓库:

 复制代码git clone 
cd CompassFusion

或者使用 Gitee 镜像:

 复制代码git clone 
cd compass-fusion

安装依赖:

 复制代码& 'D:annacondaenvsBraVLpython.exe' -m pip install -e .

运行示例:

 复制代码$env:PYTHONPATH = "$PWDsrc"
& 'D:annacondaenvsBraVLpython.exe' srcrun_compass_fusion.py --config configscompass_fusion_great_msf_example.xml

运行 PPP 示例:

 复制代码scriptsrun_ppp_great_msf_example.ps1

运行测试:

 复制代码& 'D:annacondaenvsBraVLpython.exe' -m pytest tests

10. 当前版本的定位

这里需要明确一点,当前版本更适合被定义为一个“工程基线版本”。

它并非所有模型都已完美收官的最终版本,而是一个将 GNSS、INS、松耦合、紧耦合入口、真实数据以及测试脚本有效组织到一起的工程基础。这个版本的核心价值体现在:

  • 能够正常运行。
  • 数据链路清晰透明。
  • 配置入口直观明确。
  • 测试结果可复现、可验证。
  • 后续可以在同一框架下,继续补齐 PPP/RTK 紧耦合、模糊度固定以及更全面的真实数据测试。

11. 后续计划

后续的推进方向也十分明确:

  • 完善真实 SPP 紧耦合的稳定性与精度。
  • 实现 PPP/RTK 载波相位紧耦合。
  • 加入紧耦合模糊度状态与整数固定功能。
  • 完善多系统偏差模型。
  • 增加 GNSS 中断场景下的 INS 约束测试。
  • 补充更多公开数据集的自动化测试用例。
  • 增加更完善的结果图自动生成脚本。

12. 小结

总体而言,CompassFusion 已经从一个分散的实验工程,整理成了一个可独立发布、可复现实验、也能持续迭代的 GNSS/INS 组合导航软件包。

如果只看当前最稳定的链路,松耦合已经具备了演示和继续开发的基础;如果展望未来的方向,真正值得投入精力的,是 PPP/RTK 紧耦合、模糊度固定以及在真实复杂环境下的鲁棒性提升。

这也是后续版本最核心的技术演进路线。

来源:https://juejin.cn/post/7654760064243466255

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

同类文章
更多
AWS RDS 数据库配置入门与基础操作指南

AWS RDS 数据库配置入门与基础操作指南

本文介绍了AWSRDS的基本概念与核心价值,即提供托管式关系数据库服务,简化运维。详细阐述了创建RDS实例的关键配置步骤,包括引擎选择、实例规格、存储与网络设置。最后,指导读者如何通过多种方式安全连接至数据库实例,并开始进行数据操作,为后续应用开发奠定基础。

时间:2026-07-10 06:41
PHP MVC中AJAX请求无法调用控制器方法的原因与解决方案

PHP MVC中AJAX请求无法调用控制器方法的原因与解决方案

PHPMVC中AJAX请求返回整页HTML的常见原因是控制器方法未正确输出响应或未终止执行,导致框架渲染视图。解决方法是在控制器中设置JSON响应头、输出数据后调用exit()明确终止,同时前端使用小写url和dataType: "json "。

时间:2026-07-10 06:40
Go语言手动构造rsa.PublicKey:正确初始化大整数模数N完整指南

Go语言手动构造rsa.PublicKey:正确初始化大整数模数N完整指南

手动构造RSA公钥时,模数N为*big Int类型,不能直接使用超长十进制字面量,需通过SetString或UnmarshalText方法解析字符串。公钥指数E可直接赋值,推荐65537。生产环境应使用rsa GenerateKey生成密钥对,避免手动构造引发的安全和格式错误。

时间:2026-07-10 06:39
Go语言实现HTTP定时轮询监控多URL响应时间与状态检测

Go语言实现HTTP定时轮询监控多URL响应时间与状态检测

使用Go语言实现HTTP定时轮询监控,通过按行分割与Tab解析URL列表,避免闭包陷阱和nil指针,每个URL启动独立ticker安全并发请求,并配置超时控制与资源关闭,确保响应时间与状态码准确检测。

时间:2026-07-10 06:39
Tkinter中Label标签在主循环动态更新的正确方法

Tkinter中Label标签在主循环动态更新的正确方法

在Tkinter中正确动态更新标签的方法:将标签组件的textvariable参数绑定到一个StringVar变量,然后通过调用该变量的 set()方法更新其值,界面会自动刷新。这样避免直接修改text属性或调用update()。此做法实现数据与界面的解耦,代码更简洁,响应更及时,避免手动同步的闪烁,推荐做法。

时间:2026-07-10 06:39
热门专题
更多
刀塔传奇破解版无限钻石下载大全 刀塔传奇破解版无限钻石下载大全
洛克王国正式正版手游下载安装大全 洛克王国正式正版手游下载安装大全
思美人手游下载专区 思美人手游下载专区
好玩的阿拉德之怒游戏下载合集 好玩的阿拉德之怒游戏下载合集
不思议迷宫手游下载合集 不思议迷宫手游下载合集
百宝袋汉化组游戏最新合集 百宝袋汉化组游戏最新合集
jsk游戏合集30款游戏大全 jsk游戏合集30款游戏大全
宾果消消消原版下载大全 宾果消消消原版下载大全
  • 热门数据榜