学习目标:吃透数学模型、物理含义、噪声离散转换、IMU 积分漂移机理、GNSS‑RTK 数据全处理链路;扫清工程上单位、坐标系、符号的坑,为 ESKF 打下坚实基础。
前置总览
六轴 IMU =3 轴陀螺仪(输出机体角速度) + 3 轴加速度计(输出比力)
⚠️核心事实:IMU 输出不是位置,不是速度,只是角速度、比力,必须积分才能得到姿态、速度、位置。
姿态:角速度做一阶积分
速度:比力补偿重力后做一阶积分
位置:速度再做二次积分
二次积分会放大噪声与零偏,纯 IMU 必然漂移发散,必须外部传感器(GNSS、激光、视觉)做观测约束。
3.1 IMU 系统的运动学
3.1.1 连续时间运动学方程(载体运动微分方程)
变量释义
| 变量 | 含义 |
|---|---|
| R∈SO(3)R\in SO(3)R∈SO(3) | 世界坐标系→机体坐标系旋转矩阵;描述载体姿态 |
| ω\boldsymbol{\omega}ω | 机体坐标系下角速度向量;ωΛ\boldsymbol{\omega}^\LambdaωΛ是角速度构造的 3×3 反对称矩阵 |
| qqq | 单位四元数,姿态另一种表达;⊗\otimes⊗代表四元数乘法 |
| p\boldsymbol pp | 载体世界坐标系位置 |
| v\boldsymbol vv | 载体世界坐标系速度 |
| a\boldsymbol aa | 载体世界坐标系真实运动加速度 |
约定:世界坐标系 Z 轴向上,重力
IMU 原始测量方程(重点:加速度计输出是【比力】,不是物体真实加速度)
- 无重力理想太空环境
a~\tilde{\boldsymbol a}a~、ω~\tilde{\boldsymbol\omega}ω~:IMU 硬件读出测量值(机体坐标系)。R⊤R^\topR⊤把世界坐标系向量变换到机体坐标系。
- 地球地表真实环境
- a~\tilde{\boldsymbol a}a~叫比力 specific force:机体感受到除去重力之外的受力对应的加速度。
物理直观理解
- 载体静止:真实运动加速度a=0\boldsymbol a=\boldsymbol 0a=0。
加速度计读出反向重力。物理来源:地面支持力抵消重力。
- 载体自由落体:载体真实加速度a=g\boldsymbol a=\boldsymbol ga=g。
加速度计读数为 0。
通俗讲:自由下落 IMU 感受不到地面支持,加速度计输出 0。
补充说明:
如果 IMU 安装点不在载体旋转中心,载体旋转会引入离心力、科氏力、角加速度项,会污染加速度计读数。教学模型忽略,工程实践尽量将 IMU 布置在载体旋转中心消除该项。
3.1.2 IMU 测量噪声模型(连续时间)
真实 IMU 读数包含两项误差:高斯白噪声 + 零偏 bias(随机游走 / 维纳过程)
| 符号 | 含义 | 随机过程模型 |
|---|---|---|
| ηa\boldsymbol \eta_aηa | 加速度计测量白噪声 | 零均值高斯白噪声 GP |
| ηg\boldsymbol \eta_gηg | 陀螺仪测量白噪声 | 零均值高斯白噪声 GP |
| ba\boldsymbol b_aba | 加速度计零偏 | b˙a=ηba\dot{\boldsymbol b}_a=\boldsymbol \eta_{ba}b˙a=ηba,随机游走 |
| bg\boldsymbol b_gbg | 陀螺仪零偏 | b˙g=ηbg\dot{\boldsymbol b}_g=\boldsymbol \eta_{bg}b˙g=ηbg,随机游走 |
| ηba,ηbg\boldsymbol \eta_{ba},\boldsymbol \eta_{bg}ηba,ηbg | 驱动零偏变化的高斯噪声 | 高斯白噪声 |
📌关键概念辨析
零偏 bias 不是常数!不是固定偏移。它的导数是高斯噪声,零偏会随时间做布朗运动,缓慢漂移,受温度、震动影响。
随机游走只是数学建模,不是 IMU 器件的物理本质。只是为方便滤波做的简化,工程够用;想要更高精度需要额外温度标定。
3.1.3 IMU 离散时间噪声模型(工程代码实现核心,连续→离散转换)
IMU 硬件输出是离散采样;采样间隔Δt\Delta tΔt。
连续是谱密度,离散是采样点上的噪声方差;二者必须转换,直接抄手册参数不做转换,滤波器直接发散。
1)测量白噪声(陀螺仪、加速度计)
写成标准差形式:
👉物理结论:IMU 采样频率越高,Δt\Delta tΔt越小,离散测量噪声越小。高频 IMU 的优势来源于此。
2)零偏随机游走(bias 的增量,相邻采样时刻 bias 变化量)
标准差形式:
👉物理结论:采样间隔Δt\Delta tΔt越大,一个采样周期内零偏漂移越大。
⚠️单位区分(阅读 IMU 硬件手册必看)
连续时间(谱密度):单位分母带有s\sqrt ss。
陀螺角度随机游走:deg/h\mathrm{deg}/\sqrt{\mathrm h}deg/h;加速度速度随机游走m/s/h\mathrm{m/s}/\sqrt{\mathrm h}m/s/h。离散时间(代码中直接加到观测):单位就是物理量本身,rad/s、m/s2\mathrm{rad/s}、\mathrm{m/s^2}rad/s、m/s2。
调参坑:手册给出是连续谱密度,代码 ESKF 需要离散噪声方差,必须带入Δt\Delta tΔt换算。
3.1.4 现实中的 IMU 硬件与手册指标
- 器件分类
MEMS IMU:手机、车载低成本设备;噪声大,零偏不稳定,价格低。
光纤陀螺 FOG:高精度导航,噪声小、零偏稳定;成本高、体积大。
- 手册关键指标与模型对应关系
| 手册指标 | 模型参数 |
|---|---|
| 角度随机游走 ARW | 陀螺白噪声σg\sigma_gσg|
| 速度随机游走 VRW | 加速度计白噪声σa\sigma_aσa|
| 运行时零偏稳定性 | 零偏随机游走σbg,σba\sigma_{bg},\sigma_{ba}σbg,σba|
厂商手册一般不直接给出随机游走参数,工程上拿运行时零偏稳定性作为σbg,σba\sigma_{bg},\sigma_{ba}σbg,σba调参参考。
3.2 使用 IMU 进行航迹推算(纯 IMU 积分,无外部观测)
输入 IMU 传感器读数ω~,a~\tilde{\boldsymbol\omega},\tilde{\boldsymbol a}ω~,a~;输出载体姿态RRR、世界坐标系速度v\boldsymbol vv、位置p\boldsymbol pp,简称 PVQ(位置‑速度‑四元数)。
3.2.1 连续时间积分方程
把 IMU 测量减去当前估计零偏,代入运动学方程:
注意:a~\tilde{\boldsymbol a}a~是机体坐标系比力;左乘RRR变换到世界坐标系,再加重力。
欧拉离散积分(以区间起始时刻的值代表整个Δt\Delta tΔt时间段输入)
从时刻ttt积分到t+Δtt+\Delta tt+Δt:
姿态:角速度积分(一阶);exp\expexp是 SO (3) 的指数映射。
速度:世界坐标系加速度一阶积分。
位置:速度二次积分。
数值积分方法对比
欧拉积分:只用区间起点 IMU 值;最简单,数值误差较大。书中示例代码
imu_integration.h使用欧拉积分。中值积分 / 梯形积分:取区间两端 IMU 测量的平均值,精度更高。VIO、预积分工程实现普遍使用。
高阶龙格‑库塔:精度进一步提升,但计算开销大。
3.2.2 纯 IMU 航迹推算发散机理(核心理解)
书中实验:给 IMU 数据做积分;姿态变化尚可,速度、位置短时间剧烈漂移。
误差传播链条:
陀螺仪噪声、零偏 →姿态RRR估计存在误差
姿态不准,导致把机体坐标系加速度向世界坐标系投影出错
加速度计噪声、零偏,经过一次积分得到速度误差,二次积分得到位置误差
位置误差随时间平方量级增长,快速发散。
物理结论:IMU 适合短时间预测,不能长时间独立定位;必须外部传感器观测约束漂移。
3.2.3 书中代码模块解析imu_integration.h
voidAddIMU(constIMU&imu){doubledt=imu.timestamp_-timestamp_;//位置积分p_=p_+v_*dt+0.5*gravity_*dt*dt+0.5*(R_*(imu.acce_-ba_))*dt*dt;//速度积分v_=v_+R_*(imu.acce_-ba_)*dt+gravity_*dt;//姿态积分,SO3指数映射R_=R_*Sophus::SO3d::exp((imu.gyro_-bg_)*dt);}输入 IMU 的加速度、陀螺仪读数,减去已知 / 估计零偏ba,bg\boldsymbol b_a,\boldsymbol b_gba,bg;
执行欧拉积分更新p,v,R\boldsymbol p,\boldsymbol v,Rp,v,R;
不做任何外部观测修正;
实验现象:轨迹很快发散,车辆跑出可视化窗口。
代码启示:零偏bg,ba\boldsymbol b_g,\boldsymbol b_abg,ba如果设置错误,哪怕硬件很好,积分结果依然完全不可用。
3.2 小节总结关键点
IMU 积分前提:需要零偏bg,ba\boldsymbol b_g,\boldsymbol b_abg,ba,零偏不准直接导致结果崩坏。
姿态来自角速度一阶积分;速度加速度一阶积分;位置二次积分。
欧拉积分简单但精度有限,工程优先中值积分。
漂移不是硬件故障,是二次积分放大噪声带来的数学固有性质。
3.3 卫星导航 GNSS / RTK
GNSS 提供绝对世界坐标系观测,用来约束 IMU 积分漂移;GINS 组合导航 = GNSS+IMU。
3.3.1 GNSS 系统基础
四大全球卫星导航系统:GPS (美)、北斗 BDS (中)、GLONASS (俄)、Galileo (欧盟)。接收机同时接收多套卫星信号提升可靠性。
定位模式对比
单点 GNSS
米级定位精度;手机普通定位。缺陷:不足以区分高速主路 / 辅路、车道,无法车道级自动驾驶。RTK 实时动态差分定位 Real‑Time Kinematic
利用地面基站做载波相位差分,厘米级定位精度。
优点:输出绝对全局坐标;
缺点:必须直视卫星;隧道、高楼峡谷、树荫遮挡,信号丢失;输出频率低,一般 1‑10Hz,远低于 IMU 几百 Hz。
GINS 工作模式:RTK 有效时做观测修正 IMU;RTK 丢失,依靠 IMU 做短时间航迹推算。
RTK 硬件:单天线 vs 双天线
单天线 RTK:仅输出位置,不能输出航向 yaw 角。
双天线 RTK(两个蘑菇头)
两根天线拉开基线;利用两天线的位置差解算载体航向 yaw。
👉基线距离越大,航向角度噪声越小。
双天线安装形式:左右、前后、对角安装。
工程必须标定两套外参:
1)安装偏移:天线相对于车身本体中心的平移向量;
2)安装偏角:天线坐标系相对车身坐标系的旋转角度。
⚠️重要:RTK 输出的是天线的位姿,不是车身本体中心位姿!必须做外参变换。
位姿变换公式:
TWGT_{WG}TWG:世界坐标系到 GNSS 天线坐标系(RTK 直接输出)
TGBT_{GB}TGB:天线坐标系到车身本体坐标系(标定得到的外参)
TWBT_{WB}TWB:世界坐标系到车身本体中心,是 SLAM / 定位算法真正需要的位姿。
3.3.2 坐标系系统(工程高频踩坑)
LLA 经纬‑高坐标系 Latitude‑Longitude‑Altitude
地球全局坐标系,角度 + 海拔高度。
缺点:不是米制,局部计算不方便;经度纬度随地球曲率,距离不是线性。UTM 投影坐标系 Universal Transverse Mercator
把地球椭球体分 60 个经度带投影到平面,输出米制坐标。自动驾驶局部定位首选。
北半球常用:东北天 ENU 坐标系:X 向东,Y 向北,Z 向上。
RTK 厂商经常输出北东地 NED 坐标系:X 向北、Y 向东、Z 向下。
⚠️坐标系角度转换:NED 航向角hhh转 ENU 航向角h′h'h′:
坑:直接使用厂商原始航向角,不做坐标系转换,姿态直接 90 度偏差。
UTM 局限:跨带的时候需要额外处理;两极不适用。
3.3.3 RTK 原始数据完整处理链路(书中utm_convert.cc)
原始文本数据样例:GNSS timestamp 纬度 经度 高度 航向角 航向有效标志
完整处理流程:
读取原始 GNSS 报文:时间、LLA、航向、航向有效位。
LLA 经纬高 → UTM 米制坐标。
使用标定外参(安装偏移、安装偏角):天线位姿TWGT_{WG}TWG转换车身本体位姿TWBT_{WB}TWB。
减去初始原点:坐标平移到局部原点附近,规避很大 UTM 原始数值造成浮点数有效数字丢失。
判断航向有效标志:双天线 RTK 航向失效,角度不可信,不能当做 6 自由度观测,只能用位置观测。
RTK 传感器固有缺陷
高度 Z 轴噪声显著大于平面 XY;轨迹上高度明显抖动。
遮挡场景:信号丢失;甚至输出虚假 “固定解”,产生野值跳变。
更新频率低,需要与高频 IMU 做时间戳对齐。
双天线航向容易跳变,受多路径效应干扰。
书中实验现象:RTK 轨迹 XY 平滑,Z 抖动;航向标志会频繁失效。
3.3 小节核心工程要点
RTK 输出是天线位置,不是车体中心,外参必不可少。
NED、ENU 两套坐标系角度要转换,符号极易踩坑。
航向有效标志位一定要判断;失效不能使用角度观测。
UTM 原始坐标数值巨大,平移到局部原点,保护浮点数精度。