HOOOS

脚着地时的零速度约束:ZUPT算法在行人惯性导航中的实现原理

0 9 惯性导航研究员 零速更新惯性导航行人定位卡尔曼滤波IMU
Apple

当你在手机地图上看到那个闪烁的蓝点,通常是GPS或基站在工作。但在地下停车场、高层建筑内部或隧道深处,卫星信号被混凝土吞噬,此时惯性测量单元(IMU)成为唯一的方向感来源。然而,纯惯性导航有个致命的缺陷:误差随时间指数级累积。一款安装在鞋面的IMU,仅凭陀螺仪和加速度计,三分钟后可能把你定位到隔壁大楼。

**零速更新技术(Zero Velocity Update, ZUPT)**正是破解这一困局的钥匙。它利用步行过程中一个被忽视的物理事实——脚着地瞬间速度为零——作为强有力的观测约束,将发散的误差曲线强行拉回地面。

为什么是"零速度"?

人类步态是一个周期性循环,可分为摆动相(Swing Phase)支撑相(Stance Phase)。当 heel strike(脚跟触地)发生,脚与地面产生接触,理论上此时足部相对于地面的瞬时速度严格为零,持续约100-300毫秒,直到 toe-off(脚尖离地)。

这一瞬间的物理约束构成了完美的外部观测值。惯性导航系统(INS)通过积分加速度计算速度,积分角速度计算姿态,任何微小的传感器零偏(Bias)或噪声都会通过双重积分转化为位置和姿态的漂移。ZUPT的核心逻辑在于:每当检测到支撑相,就将卡尔曼滤波器中的速度状态强制修正为零,切断误差累积的链条。

零速检测:从信号到事件

ZUPT的前提是精准识别支撑相。工程上常用三种判据组合:

1. 加速度模值阈值法

支撑相时,加速度计读数应接近重力加速度 $g$(约9.8 m/s²),且方差极小。定义判据:
$$| |\mathbf{a}| - g | < \gamma_a \quad \text{且} \quad \sigma_a^2 < \delta_a$$
其中 $\gamma_a$ 和 $\delta_a$ 为经验阈值,通常取 $0.3g$ 和 $0.05$。

2. 角速度能量检测

脚着地时旋转几乎停止。计算陀螺仪输出的模值:
$$|\boldsymbol{\omega}| < \gamma_\omega$$
典型阈值 $\gamma_\omega$ 设为 $0.5-1.5$ °/s,取决于IMU的噪声水平。

3. 广义似然比检测(GLRT)

对于低信噪比场景,采用统计方法。构建检验统计量:
$$\Lambda = \frac{1}{N} \sum_{k=1}^N \left( \frac{|\mathbf{a}_k - \mathbf{g}|^2}{\sigma_a^2} + \frac{|\boldsymbol{\omega}k|^2}{\sigma\omega^2} \right)$$
当 $\Lambda < \eta$ 时判定为零速状态,$N$ 为滑动窗口长度(通常对应50-100ms数据)。

实际系统中,这三者常以逻辑与方式组合,防止误判。例如,仅当加速度模值和角速度同时满足阈值,且持续超过60ms,才触发ZUPT事件。

卡尔曼滤波中的观测模型

检测到零速后,如何修正导航状态?采用误差状态卡尔曼滤波器(Error-State Kalman Filter, ESKF)

状态向量 $\delta\mathbf{x}$ 包含:

  • 位置误差 $\delta\mathbf{p}$(3维)
  • 速度误差 $\delta\mathbf{v}$(3维)
  • 姿态误差 $\delta\boldsymbol{\theta}$(3维,等效旋转矢量)
  • 陀螺零偏误差 $\delta\mathbf{b}_g$(3维)
  • 加速度计零偏误差 $\delta\mathbf{b}_a$(3维)

观测方程极其简洁:
$$\mathbf{z} = \mathbf{H} \delta\mathbf{x} + \mathbf{v} = \mathbf{0} - \hat{\mathbf{v}} = -\delta\mathbf{v} + \mathbf{v}$$
其中 $\hat{\mathbf{v}}$ 是INS预测的速度,观测矩阵 $\mathbf{H} = [\mathbf{0}{3\times3} \quad \mathbf{I}{3\times3} \quad \mathbf{0}_{3\times9}]$。

关键在于:ZUPT仅直接观测速度误差,但通过滤波器的耦合作用,速度修正会"渗透"到姿态和传感器零偏的估计中。这是可观测性分析的范畴——只有与速度状态耦合的误差状态才能被间接修正。

可观测性:什么误差能被修正?

并非所有误差都能通过ZUPT消除。根据系统模型:

  • 速度误差:完全可观测,每次ZUPT几乎完全归零。
  • 水平姿态误差(俯仰、横滚):部分可观测。速度修正通过重力向量的投影关系反推姿态误差。
  • 航向角误差(Yaw)不可观测。ZUPT不提供关于航向的任何信息,这是"零速更新"的盲区,需依赖地磁计或视觉回环检测。
  • 陀螺零偏:缓慢可观测。持续的速度修正通过状态耦合估计陀螺漂移。
  • 加速度计零偏:极弱可观测性。理论上需姿态变化才能分离重力与零偏,纯ZUPT难以有效标定。

这意味着ZUPT-INS系统长期仍会绕航向轴发散,需配合其他传感器或定期外部位置修正。

工程实现的魔鬼细节

IMU安装位置

严格安装在鞋背(脚背上方)而非鞋底。足底冲击会产生高频振动(>100Hz)和饱和加速度,超出MEMS传感器量程,导致信号削波。鞋背位置既能捕捉步态特征,又避免直接冲击。

动态阈值调整

不同运动模式下阈值需自适应:

  • 行走:低阈值,支撑相明显
  • 跑步:高阈值,触地时间短(<100ms),冲击大
  • 爬楼梯:需禁用ZUPT,因为脚在台阶上时可能存在非零速度(身体前倾)

零速间隔的时间同步

IMU采样率通常为100-400Hz,但零速事件是二值逻辑。采用施密特触发器(Schmitt Trigger)机制,设置进入零速的高阈值和退出的低阈值,避免在支撑相边界处的抖动(Chattering)。

误差边界与性能指标

在理想条件下(平地行走,优质IMU),ZUPT可将定位误差从纯惯导的**>100米/分钟压缩至行走距离的0.5%-3%**。具体而言:

  • 30分钟行走后,位置误差约10-50米(取决于步频和零速检测准确率)。
  • 高度误差受限于气压计辅助,纯ZUPT对垂直速度约束与水平方向等效,但楼梯场景会退化。

实际系统中,零速检测率(Recall)需>98%,误检率(Precision)需<2%,否则滤波器会引入虚假观测,导致比纯惯导更糟的结果。

应用场景与局限性

ZUPT的典型部署包括:

  • 消防应急导航:GPS拒止的浓烟环境,消防员生命体征监测与位置追踪
  • 仓储物流:室内AGV或穿戴式设备的高精度定位
  • 行人航位推算(PDR):智能手机的室内导航(但手机晃动模式复杂,ZUPT效果不如鞋载IMU)

其根本局限在于航向不可观测非步态运动失效。对于轮椅使用者、骑自行车或电梯场景,ZUPT完全失效,需切换至其他导航模式。

未来,ZUPT正与**视觉惯性里程计(VIO)**深度融合:ZUPT提供高频、低延迟的速度约束,视觉提供低频但全局一致的航向修正,两者互补构建完整的室内定位方案。

点评评价

captcha
健康