❝如果你对自动驾驶、机器人、无人机、测绘定位感兴趣,但一看到“惯导、卡尔曼滤波、误差状态”就头大,KF-GINS 可能是一个很适合入门的开源项目。
今天安利一个偏硬核、但非常值得收藏的项目:KF-GINS。
它来自武汉大学多源智能导航实验室 i2Nav,是一套基于 扩展卡尔曼滤波 EKF 的 GNSS/INS 组合导航开源软件。简单说,它做的事情就是:把卫星导航给出的位置结果,和 IMU 惯性传感器的连续运动信息结合起来,解算出更稳定的位置、速度和姿态。
KF-GINS 工作流示意图为什么这个项目值得看?
很多人理解“定位”,第一反应就是 GPS。
但在真实工程里,只靠 GNSS 往往不够。车开进高楼密集区,卫星信号会被遮挡和反射;进入短时弱信号区域,定位结果会跳;而 IMU 虽然能连续感知运动,但时间一长又会漂。
所以,高精度定位系统经常会把 GNSS 和 INS 放在一起:GNSS 负责提供全局位置约束,INS 负责短时间内连续推算运动,滤波器负责把两边的信息融合起来。
KF-GINS 就是一个很适合学习这套经典思路的开源样板。
它不是玩具 Demo,而是一套教学级工程框架
KF-GINS 用 C++ 编写,CMake 管理工程,支持 Linux、macOS 和 Windows 编译。它实现的是经典的 GNSS/INS 松组合导航算法,内部采用误差状态扩展卡尔曼滤波架构。
项目里最值得看的几个点:
- 21 维误差状态:包括位置误差、速度误差、姿态误差、IMU 零偏误差和比例因子误差。
- 完整导航链路:包含 IMU 误差补偿、惯性导航机械编排、Kalman 滤波、误差反馈等环节。
- 配套课程资源:它参考了《惯性导航原理与 GNSS/INS 组合导航》课程讲义,也有对应课程视频。
- 自带测试数据:仓库提供 demo 数据集,也能配合官方开源数据集进行实验。
- 适合读代码学算法:相比一上来就看图优化、多传感器紧组合,KF-GINS 更适合把组合导航的基本盘先跑通。
KF-GINS 官方分享文档中的系统框架最适合怎么玩?
如果你是刚入门 GNSS/INS 组合导航,我建议不要一开始就纠结所有公式。
更舒服的玩法是:
先跑通项目自带 demo,看看输入文件、配置文件和输出结果长什么样;然后回到代码里看数据流:IMU 怎么读入,GNSS 位置结果怎么进入滤波器,误差状态如何预测和更新,最后误差又怎么反馈到导航状态。
等这条主线看明白,再去啃课程讲义和算法文档,效率会高很多。
如果你已经有自己的 IMU 和 GNSS 数据,也可以参考项目定义的数据格式,把自己的数据整理进去跑。它不只是“看一眼”的项目,更适合拿来做实验基线。
Awesome GINS 数据集路线图它适合哪些人?
导航定位方向学生:用它理解惯导、误差状态、松组合和 EKF 的完整链路。
机器人/自动驾驶开发者:把它当成 GNSS/INS 组合导航的基准实现,和自己的定位模块做对照。
测绘与移动测量从业者:用它理解 GNSS 和 IMU 为什么要组合、组合后到底在修正什么。
开源工具爱好者:即便你不写导航算法,也能通过这个项目窥见“高精度定位”背后的工程逻辑。
上手前的小提醒
KF-GINS 不是那种双击就能用的软件。你需要基本的 C++、CMake、坐标系、IMU 和 GNSS 数据格式知识。
它做的是 GNSS 位置结果 + IMU 数据 的松组合,并不是直接处理 GNSS 原始观测值的紧组合定位系统。如果你想研究 RTK 原始观测、多传感器图优化,可能还需要再看其他项目。
另外,项目采用 GPLv3 协议。学习、研究、复现实验很友好,但商业使用需要认真阅读许可证,并按 README 提示联系作者团队。
最后说一句
KF-GINS 的魅力不在于“炫技”,而在于它把一套经典 GNSS/INS 组合导航流程开源出来,而且配了讲义、视频、数据集和算法文档。
对想入门高精度定位的人来说,它像一张路线图:先把卡尔曼滤波和惯导组合导航这条主路走通,再去看更复杂的紧组合、视觉融合、图优化,理解会扎实很多。
如果你喜欢这种有趣、有用、能真正打开技术视野的开源工具分享,欢迎关注我。下一篇继续挖一个值得收藏的硬核项目。
项目链接
- GitHub 项目主页:https://github.com/i2Nav-WHU/KF-GINS