INSLIB 是一个面向 3D 导航状态估计的开源惯性导航 C 库,核心能力是通过 Kalman 滤波融合 IMU、GNSS/GPS、气压计、磁力计、本地位置参考、航向参考、地速、零速/零角速度等多源传感器数据。项目以 C11 编写,无外部依赖、无堆内存、无操作系统依赖,适合裸机和嵌入式微控制器,也提供 Python 后处理、GUI、绘图和数据回放工具。它特别适合无人机、机器人、自动驾驶、车辆、航空航天和传感器融合研发场景。
适用领域
惯性导航 INS / AHRS 姿态航向参考系统 / GNSS/IMU 组合导航 / 传感器融合 / 嵌入式实时系统 / 无人机与机器人导航 / 自动驾驶与车辆定位 / 航空航天软件 / 离线轨迹后处理 / 低成本 IMU 标定与导航算法验证
配置难度
中高。对于熟悉 C、嵌入式系统、IMU/GNSS、Kalman 滤波和坐标系转换的开发者,上手成本可控;对于没有组合导航背景的开发者,需要先理解传感器标定、误差模型、时间同步、config.yaml 参数以及滤波器工作模式。离线 replay 和 Python GUI 入门较容易,嵌入式实机部署和高精度导航调优难度较高。
商业价值
未知
01
技术亮点
- 核心库纯 C11 实现,无外部依赖、无堆内存、无 OS 依赖,适合裸机嵌入式部署
- 支持 IMU、GNSS/GPS、磁力计、气压计、本地 mocap、双天线 GNSS 航向、OBDII 里程计、ZUPT、ZARU 等多类传感器
- 提供 UDU/Bierman-Thornton 数值稳定 Kalman 滤波实现,适合对协方差精度和稳定性有要求的导航应用
- 支持测量延迟补偿和 GNSS 延迟估计,解决实际 GNSS 接收机存在 100-200ms 以上处理/传输延迟的问题
- 测试覆盖率超过 90%,包含 MC/DC 测试,并强调 DO-178 DAL-A、ISO26262 ASIL-D 风格的验证思路
- 具备需求追踪能力,代码逻辑与机器检查的 requirements 数据库关联
- 实时友好:无无界循环、无递归,适合控制环和嵌入式实时任务
- 内置轻量级 World Magnetic Model,用于磁偏角补偿
- 提供丰富真实和仿真数据集,包括无人机、旋翼机、车辆隧道、行人、ArduPilot、MATLAB、kfgins 对比数据
- 配套 Python GUI、命令行 replay、绘图、KML 导出和传感器标定工具,便于算法调试和工程验证
02
目标用户
- 无人机飞控与导航算法工程师
- 机器人定位与状态估计开发者
- 自动驾驶/车载定位研发人员
- 嵌入式 C/C++ 开发者
- GNSS/INS 组合导航研究人员
- 高校和科研机构的导航、控制、机器人方向团队
- 需要在 MCU 或裸机环境中运行传感器融合算法的开发者
- 需要离线分析飞行、车辆或行人数据的算法工程师
03
配置要求
- 核心 C 库需要 C11 编译器和 make
- Python 工具需要 Python 虚拟环境,建议使用仓库提供的 python/setup_venv.sh 或 python/setup_venv.bat 自动安装依赖
- 如果使用数据回放,每个数据集目录通常需要包含多个传感器 CSV 文件和一个 config.yaml
- CSV 数据第一列必须是统一的 t_us 微秒时间戳,不同传感器如 IMU、GNSS、磁力计、气压计、速度等分别使用独立 CSV
- config.yaml 需要配置滤波模式、传感器噪声、杆臂参数、启用的融合通道、传感器延迟等
- 实时输入使用 UDP,默认监听传感器数据端口 29800
- PlotJuggler 输出默认通过 UDP JSON 到 9870 端口
- MAVLink 输出可选,默认 UDP 端口为 14550
- 若使用高精度 GNSS,需要兼容的 GNSS 接收机、天线和可能的校正服务,例如 u-blox X20、F9P、Galileo HAS、PointPerfect、NTRIP RTCM 等
- 若部署到 MCU,需要确认目标平台支持 IEEE 754 32 位浮点,且资源满足滤波器运行需求
04
适用场景
- 将 IMU 与 GNSS/GPS 数据融合,输出三维位置、速度、姿态等导航状态
- 无人机在 GNSS 短时失锁时依靠 IMU 和气压计维持高度与姿态估计
- 在没有磁力计的情况下使用 AHRS_MODE_ARS 仅依赖 IMU 估计 roll/pitch,并自由积分 yaw
- 车辆穿越隧道、城市峡谷等 GNSS 信号退化场景时进行惯性辅助定位
- 对飞行日志、车辆日志、行人数据进行离线回放、绘图和 KML 导出
- 估计 GNSS 接收机数据延迟,并补偿测量延迟对融合结果的影响
- 对 IMU、磁力计进行 bias、scale、misalignment 标定
- 在嵌入式微控制器上部署无堆内存、实时友好的 Kalman 滤波器
- 对比 ArduPilot EKF、MATLAB Navigation Toolbox、kfgins 等导航解算结果
- 通过 UDP 实时接收传感器数据,并向 PlotJuggler 或 MAVLink 工具输出结果
05
部署与配置
- 克隆仓库及其子模块:git clone --recursive https://github.com/jnz/INSLIB.git
- 进入项目目录:cd INSLIB
- 构建和测试核心 C 库:make test
- 构建实时 UDP 接收工具:make insrcv
- 运行实时接收工具:./build/insrcv --mavlink
- 如需使用 Python GUI、回放和绘图工具,创建虚拟环境:sh python/setup_venv.sh;Windows 使用 python\setup_venv.bat
- 激活环境:. env.sh
- 运行后处理 GUI:python3 python/inspostgui.py datasets/fog
- 运行命令行回放:python3 python/replay.py datasets/fog --plot --plot-out /tmp/plots.pdf
- 估计 GNSS 延迟示例:python3 python/replay.py datasets/pedestrian/07_outdoor_only/ --estimate-gnss-delay
06
风险与注意事项
- 许可证为 AGPL-3.0,如果用于商业闭源产品或云端/网络服务,需要特别评估开源合规风险
- 导航算法和 Kalman 滤波参数配置复杂,实际效果高度依赖传感器质量、安装误差、噪声建模、时间同步和标定质量
- 虽然项目强调高测试覆盖和航空/汽车风格验证,但并不等同于已获得 DO-178 或 ISO 26262 正式认证
- 低成本 IMU 的纯惯性航位推算会快速漂移,不能期望在长时间 GNSS 失锁时保持绝对位置精度
- 参考硬件固件未公开,若希望完全复现其硬件工具链,需要自行实现协议或与作者合作
- 国内开发者使用高精度 GNSS 校正服务时,需要考虑本地法规、可用服务、基准站网络和接收机兼容性
- 项目语言主要为 C 和 Python,缺少直接面向 ROS、PX4、ArduPilot 的即插即用集成说明,工程接入可能需要二次开发
- 对初学者而言,坐标系、传感器误差模型、滤波器调参和时间同步有较高门槛
2026-09-12
第30名
新收录 · github_search