跳转至

惯性导航与惯导解算 · 自学科普系列

系列目标:自学 + 科普惯导解算,从数学物理地基一直讲到姿态/位置/速度解算与组合导航。 一路用到的数学、物理、控制等基础知识,都会单独成内链笔记,并附上外链 Wiki(维基百科),方便随时回去补课。

先串一个整体认知

惯导(INS / 惯性导航系统)靠的是"牛顿定律 + 死推":陀螺仪量角速度、加速度计量比力,然后通过积分滚动出姿态 → 速度 → 位置。不用外部信号,全靠自己推,所以叫"惯性/自主导航"。它的难点不在"公式有多唬人",而在每一步都要弄清:

  • 在哪个坐标系里算(坐标系乱,公式全错);
  • 姿态怎么表示(欧拉角有万向锁,四元数 / 旋转矩阵更稳);
  • 误差从哪来、怎么涨(偏差 / 随机游走,越积越漂);
  • 怎么用传感器模型和概率把误差"修"回来(卡尔曼 / ESKF)。

系列依赖关系图(怎么读 / 老人复盘)

符号与术语速查表(跨篇统一,随时回来查)

所有篇目共用这套符号(以本项目固件为准)。记不住时先来这里,比翻回各篇快。

符号 含义 首次出现
NED / ENU 当地水平系两种约定(北东地 / 东北天);本项目用 NED 01
body 系(b 系) 载体坐标系,x-前 y-右 z-下;IMU 直接测的就是 b 系量 01
\(R_{ab}\) / \(\boldsymbol C_b^n\) 旋转矩阵:把 b 系向量投影到 a 系;\(C_b^n\) = body→NED。⚠️ 固件 q2r 给的是反方向 \(C_n^b\)(world→body),转比力要转置 01 / 06
\(\boldsymbol q = [w,x,y,z]\) 四元数(Hamilton、标量在首);姿态内部存储形式 02
\(q_b^i\)下标=动系 b、上标=参考系 i 姿态四元数:"b 相对 i",等价 Solà 的 q_bi(摆位不同)。别把上下标看反 07
\(\boldsymbol\omega_{ib}^b\) 陀螺测量的角速度:b 系相对 i 系、在 b 系投影(IMU 直接输出) 07
\(\boldsymbol f^b\) / \(\boldsymbol v^n\) / \(\boldsymbol p\) 比力(b 系)/ 速度(n 系投影)/ 位置 03 / 06
\(\boldsymbol f = \boldsymbol a - \boldsymbol g\) 比力方程:加计测比力、不是加速度;机械编排要加回重力 03
\(\boldsymbol b_g\) / \(\boldsymbol b_a\)bg/ba 陀螺 / 加计零偏(ESKF 的 15 态里各 3 维,实时估计) 04
ARW / BI / RRW / RR / QN Allan 五种噪声指纹(°/√h、°/h、°/h^1.5、°/h²、arcsec) 05
有害加速度 重力 + 哥氏项(不是载体真实运动,速度更新必须补偿) 06
不可交换误差(coning) 旋转不可交换导致的积分漂移;Bortz 旋转向量 / cnscl 补偿 07

本系列文章清单(从基础到融合,3 个 Tier / 16 篇)

写作顺序按 M1→M5 正序打地基;每篇自包含 + 通俗为主 + 数学推导折叠,并锚定本项目真实代码(ins_eskf_15d.c / ins_math.h)。✅ = 已发布。 📌 文中对 ins_eskf_15d.c / ins_math.h行号引用对应 2026-08 代码快照:函数名为主、行号为辅,代码演进后行号可能漂移。

Tier 1 · 惯导基础知识(是什么 / 为什么)→ 📁 01_基础篇

主题 状态
01 坐标系与变换 ECEF / 当地水平(ENU·NED) / body,变换与旋转矩阵 ✅ 已发布
02 姿态的四种表示 欧拉角 / DCM / 四元数 / 旋转向量,万向锁,双覆盖,Bortz ✅ 已发布(含 PSINS 演示①-④)
03 传感器原理 加速度计测"比力"、陀螺测角速度(科里奥利);MEMS vs FOG vs RLG ✅ 已发布(含 PSINS 演示·imuerrset)
04 IMU 误差模型 零偏 / 标度 / 交叉耦合 / g 灵敏度 / 温度漂移,怎么标定、怎么进 ESKF ✅ 已发布(含 PSINS 演示·imuadderr)
05 Allan 方差 5 种噪声指纹(QN/ARW/BI/RRW/RR),log-log 曲线怎么读、怎么定 ESKF 的 Q 阵 ✅ 已发布(含 PSINS 演示·avarsimu+avar、双轨出图)

Tier 2 · 惯导解算(怎么算)→ 📁 02_解算篇

主题 状态
06 机械编排方程 比力 → 姿态 / 速度 / 位置 的递推(n 系速度微分方程,锚定牛小骥 I2NAV 讲义式 18) ✅ 已发布(含 PSINS 演示·insupdate)
07 姿态更新算法 欧拉法 / DCM / 四元数 / Bortz 旋转向量,圆锥效应与不可交换误差(牛小骥 I2NAV 讲义式 134-135 + 6 方法实测对比) ✅ 已发布(含 PSINS 演示·cnscl+qupdt、双轨出图)
08 初始对准 静基座粗对准(TRIAD:重力定水平 + 地球自转定航向)→ 精对准(零速 KF)→ 动基座(i0 法) ✅ 已发布(含 PSINS 演示·alignsb/dv2atti/alignvn)
08b 本固件粗对准实战 ins_align.c 逐函数走读:TRIAD→m2q→静止均值累积→有界状态机→注入 ESKF ✅ 已发布(锚定本项目 AHRS 固件代码)
09 纯惯导误差传播 失准角增长 / 舒勒振荡(84.4min) / 高程指数发散 / 与 ESKF F 矩阵对应 ✅ 已发布(M2 收官篇,锚定牛小骥讲义第 3 讲)

Tier 3 · 多源数据融合(怎么更准)→ 📁 03_组合导航篇

主题 状态
10 卡尔曼滤波基础 KF 五方程(预测+修正)/ 协方差椭圆 / 一维手算 + 双轨验证 / 与本项目 ESKF 15 态对应(锚定牛小骥讲义第 4 讲式 1-8、PSINS kfupdate) ✅ 已发布(M3 组合导航篇开篇)
11 EKF 与 ESKF 直接法 EKF(姿态流形困境)→ ESKF 间接法 15 态/反馈注入(锚定牛小骥讲义式 9-10、固件 ins_eskf_15d.c)+ 双轨等价性实证 ✅ 已发布
12 观测模型 GNSS 位置/速度、气压高度、加计(重力)、磁强计(地磁) 的 H 矩阵 + 可观测性全景(锚定固件 ins_eskf_15d.c + 双轨有限差分验证) ✅ 已发布
13 松组合 vs 紧组合 LC/TC/UC 三种耦合深度、H 差异、少星鲁棒性(锚定牛小骥第4讲 + PSINS test_SINS_GPS_153 / test_SINS_GPS_tightly_coupled) ✅ 已发布
14 一致性检验 NEES/NIS(χ²) 滤波器"体检":NEES/NIS~χ²、均值闸门、三种失配指纹、gating 工程化(锚定 PSINS kfupdate 的 rk/Py0 + 固件 decoupled gating + 双轨 MC 验证) ✅ 已发布
15 多传感器冗余 + FDI 故障检测隔离,对应本板 3×IMU(中值/2oo3 表决 + NIS 趋势检测,锚定固件 SM_ERR_* + PSINS imuerrset + 双轨验证) ✅ 已发布
16 实战:走读 ins_eskf_15d.c 把前面所有概念落进真实代码 规划中

Tier 4 · 拆解 PSINS(工业参考逐行走读)→ 📁 04_拆解PSINS篇/

科普 16 篇把原理讲完了,但"工业级参考" PSINS 还蒙着面纱。本系列把核心 demo(19–31 行的"薄壳")追进 base/ 库函数逐行拆解:代码在算什么、为什么这么算、对应科普系列哪一章。demo 是数据流入口,肉在库函数里。 配套代码:每篇配一个迷你 PSINS 模块(自包含、MATLAB+Python 双轨、跑同数据与 PSINS 原版对拍)——读者无需 PSINS 也能运行复盘;完整 PSINS 请按作者官网指引下载(建议版本 260705),wiki 不托管第三方代码库。

拆解对象 主题 状态
00 内化蓝图 · Mini-INS 路线图 ——(规划文档) 为什么内化 / PSINS·Mini-INS·固件三者关系 / 模块落位图 / 公式三件套写作规范 / M1–M5 里程碑 🆕 新增
00 读码地基 · 数据结构与约定 base/ 库结构 + 六大约定 + 数据结构速查 代码地图(薄壳 vs 库)/ global glv、att 顺序、pos 单位、列主序、rad、avp 拼接 / trj·imu·ins·kf·dr 字段表 / P2–P4 主循环同构对比 🆕 新增
P1 轨迹生成 · test_SINS_trj.m trjsegment + trjsimu(31 行薄壳) 航段语言(8 基本+6 复合)/ wat 表 / 正演机数学(att/vn/pos 积分 + IMU 增量反算 + 圆锥/旋转补偿)/ 966 s 轨迹解析 ✅ 已发布
P2 纯惯导 · test_SINS.m inspure + 误差注入体系 正演→反演闭环验证、imuerrset/avperrset、机械编排六步、误差传播(Schuler/垂直发散)、迷你链路 vs PSINS 对拍(935.9 vs 936.0 m) ✅ 已发布
P3 航位推算 · test_DR.m odsimu + drupdate DR 数学(航向×里程)、安装角/刻度系数、与 SINS 的本质差异 ✅ 已发布
P4 SINS+DR 组合 · test_SINS_DR.m etm(ins,22) + kffk dposD 块 + kffeedback 'v' 22 维 KF 状态分解(φ/δv/δr/eb/db/dposD/dinst/dKod/dT)/ 速度闭环 + dKod 自标定 / 与 PSINS 同参数对拍(水平 45.5 vs DR-only 151 m,3.3× 改善)/ 5 个关键坑(状态累积、etm 列主序、R/P0 单位、dKod 必要性、弱可辨识) ✅ 已发布
附录 · 绘图函数与 MATLAB 惯用法 miniinsplot / miniavpcmpplot / miniinsplot3d 三个绘图函数的签名/参数/调用模式 + MATLAB 惯用法词典(nargin/varargin/figure/subplot/图例控制/interp1…),配套 .m 代码的字典页 🆕 新增

学习路线图

打个勾就是"已过关"。每一节跳转对应内链笔记, 表示该节依赖的基础知识已在外链中给出直达。

第 0 步 · 概览(先建立直觉)

第 1 步 · 数学地基(本系列补课重点)

第 2 步 · 物理与传感器模型

第 3 步 · 姿态解算(旋转矢量的算法)

第 4 步 · 惯导解算全流程

第 5 步 · 组合导航

基础知识外链速查(随时回补)

话题 外链参考
协方差矩阵 维基 · 协方差矩阵
卡尔曼滤波 维基 · 卡尔曼滤波 / Wikipedia · Kalman filter
四元数 维基 · 四元数与空间旋转
欧拉角 维基 · 欧拉角
惯性导航 维基 · 惯性导航系统
陀螺仪 维基 · 陀螺仪
加速度计 维基 · 加速度计
ESKF(误差态 KF) Solà · Quaternion kinematics for the error-state Kalman filter(arXiv:1711.02508)

PSINS 演示约定与致谢

02 姿态的四种表示 起,本系列引入「PSINS 演示」三件套(① PSINS 参考代码带署名 → ② C 语言实现对照 → ③ 结论),用严龚敏老师的 PSINS(西北工业大学,开源惯性导航工具箱;本地 D:\WorkSpace\Code\MATLAB\psins260705,作者主页可获取最新版)作算法参考与可视化演示。约定如下:

  • 用途定位:PSINS 仅作算法参考、验证 oracle 与教学演示;其 MATLAB 代码不逐字搬入本项目固件(商用侧尤须规避整段复制,学算法、自己重写实现、致谢来源)。
  • 引用与版权:节选代码保留 Copyright Gongmin Yan, NWPU 署名,并在代码首行注释标注来源文件与版本(如 % PSINS: base0/rv2q.m — Gongmin Yan, NWPU (psins260705));文末统一致谢。
  • 图的可复现性:能出图的 demo 以 MATLAB headless 出图为主,同时用 Python/NumPy 重写核心数学作兜底(存 assets/gen_*.py)——既让 wiki 不绑定 MATLAB 许可证,又让 Python↔PSINS 数值一致本身成为一重验证 oracle。
  • 范式提醒:PSINS 标准 SINS 用 φ 角误差模型、其 AHRS 用直接全态四元数 EKF;本项目固件用 Solà 右不变 ESKF(误差态 15 维)。两者小误差下等价但 F/H/状态定义不同,只作对照、禁止直接照搬
  • 坐标系提醒(ENU vs NED):PSINS 用 ENU(x 东、y 北、z 天),本项目固件用 NED(x 北、y 东、z 地)。纯代数函数可逐字对照rv2q/qmul/q2mat 与坐标系无关,只需方向语义一致);与轴向/符号相关的函数必须标差异(如 q2att vs quat_to_euler:输出顺序与 pitch 符号都不同,公式不可互换)。凡涉及姿态角、重力、磁场方向的面板都要先声明坐标系再对照。

关联

  • 同一项目落地工作与项目 · AHRS 板固件仿真与验证(ESKF 已验证到 MATLAB / PC 端 SIL)
  • 博客文章:「惯导解算学习」「卡尔曼滤波」「因子图应用于导航」「IMU 预积分」「组合导航学习」「航姿解算从器件到算法」

相关:← 总索引