☰
多传感器轨迹跟踪的卡尔曼滤波选型:从KF到AEKF与AUKF
2026/10/8 16:11:08 网站建设 项目流程

1. 为什么轨迹跟踪必须走到多传感器融合这一步

做轨迹跟踪的人早晚会遇到同一个问题:单一传感器到了复杂工况下,数据根本没法信。跑着跑着GNSS信号被高楼挡住了,惯导器件零偏漂得自己都不知道自己在哪,视觉里程计一到逆光或者纹理稀疏的场景就疯狂跳变。这个时候再好的单源跟踪算法也是白搭,因为上游数据本身就是错的。

我最早做无人机室内定位的时候,用的是纯光流加IMU的组合,室内没有卫星信号,光流在瓷砖地面上还行,一到地毯或者强光直射的区域就开始原地转圈。后来改成光流、IMU加UWB锚点测距的三源融合,才勉强压住轨迹漂移。但融合不是简单把数据平均一下,做加法之前得先解决一个根本问题:谁的数据在什么时刻是可信的,可信到什么程度。这正是卡尔曼滤波体系的核心价值——它不是在帮你说"哪个传感器对",而是在帮你计算"每个传感器的不确定性到底是多少",再按不确定性加权。

这篇文章要聊的,就是我在多传感器轨迹跟踪项目里实际趟过的三条技术路线:标准卡尔曼滤波(KF)、自适应扩展卡尔曼滤波(AEKF)和自适应无迹卡尔曼滤波(AUKF)。三种算法解决的是同一个问题——多源量测数据融合下的状态估计,但适用场景、实现复杂度、调参难度完全不在一个量级。

我会把每种算法的原理、推导关键点、工程实现细节、容易踩的坑,以及我自己的选型依据都写清楚。适合刚接触传感器融合的初学者,也适合已经在做轨迹估计但想在稳定性上再进一步的人。

2. 先从最基础的线性卡尔曼滤波说起:它是所有变体的地基

2.1 线性KF到底在算什么

标准卡尔曼滤波做的事情可以概括成一句话:在"运动模型的预测值"和"传感器的观测值"之间,找一个按方差加权的折中。它假设系统是线性的、噪声是高斯的,然后通过递推的方式不断修正状态估计。

具体的递推分两步。第一步叫预测,用上一时刻的状态和运动模型推算出当前时刻的状态先验估计,同时推算出状态协方差矩阵的先验值:

[ \hat{x}{k|k-1} = A\hat{x}{k-1|k-1} + Bu_{k-1} ] [ P_{k|k-1} = AP_{k-1|k-1}A^T + Q ]

第二步叫更新,把传感器的量测残差按卡尔曼增益K融合进来:

[ K_k = P_{k|k-1}H^T(HP_{k|k-1}H^T + R)^{-1} ] [ \hat{x}{k|k} = \hat{x}{k|k-1} + K_k(z_k - H\hat{x}{k|k-1}) ] [ P{k|k} = (I - K_kH)P_{k|k-1} ]

公式不复杂,关键要理解K的物理含义。K是一个0到1之间的"信任度分配器":当量测噪声R很小、传感器很可信时,K趋近于1,滤波器更听从观测;当过程噪声Q很小、运动模型很准时,K趋近于0,滤波器更相信预测。整个算法本质上就是一个动态求加权平均的过程。

2.2 线性KF在实际轨迹跟踪中的两个硬伤

第一,轨迹跟踪系统几乎没有真正线性的。拿一个典型的无人机水平位置估计来说,状态可能是 [位置x, 速度vx, 位置y, 速度vy],运动模型可以用匀速模型近似,但如果无人机在做圆周运动或者强机动,匀速模型的预测误差会大幅增加。这时候如果Q给小了,滤波器会持续相信错误预测,轨迹会出现明显滞后;Q给大了,轨迹又会抖动。

第二,R和Q都是提前定死的常量。实际工程里,传感器的噪声特性是随环境变化的。GNSS在开阔地误差两厘米,到了树荫下可能变成几十厘米;视觉里程计在纹理丰富区域精度很高,遇到白墙就发散。固定R的KF在这种情况下会做出错误判断——它要么过度相信已经失准的传感器,要么过度怀疑仍然精准的传感器。

这就是为什么后来大家普遍转向EKF——用泰勒展开把非线性系统在工作点附近线性化,公式形式和线性KF一致,只是A和H矩阵变成了雅可比矩阵。

2.3 我在线性KF上踩过的具体坑

最早我用KF做AGV小车的轨迹跟踪,状态是二维位置加二维速度,量测来源是编码器推算和地面二维码识别。刚开始测试一切正常,一到二维码布置稀疏的区域,轨迹就开始"抽风"。排查了很久才发现问题不在算法本身,而在时间同步——编码器的数据是50Hz,二维码识别是2Hz,我直接把两组数据按到达顺序丢进滤波器,导致同一时刻的两类量测其实描述的是不同时间点的位置。

做多传感器融合,时间对齐永远是第一个要处理的问题。KF假设所有量测在同一时刻到达,实际工程必须做插值或缓冲,把不同频率的量测对齐到同一时间戳,否则融合结果还不如单一传感器。

3. AEKF的核心思路:让噪声协方差学会自己调节

3.1 AEKF到底"自适应"在哪里

AEKF的自适应机制有很多流派,我做轨迹跟踪时用的是基于残差的新息协方差匹配法。核心思想是:理论上,滤波器的新息(量测残差)协方差应该等于量测矩阵、状态协方差和量测噪声协方差的组合:

[ S_k = HP_{k|k-1}H^T + R_k ]

而实际工程里,我们可以用一段滑窗内的新息序列,直接估算出新息协方差的实测值:

[ \hat{S}k = \frac{1}{N}\sum{i=k-N+1}^{k} e_i e_i^T, \quad e_i = z_i - H\hat{x}_{i|i-1} ]

如果实测值比理论值大,说明量测噪声被低估了,应该调大R;反过来则调小R。AEKF就是在每个滤波周期做一次这样的比较,然后在线修正R矩阵(有的实现也修正Q),让滤波器对噪声变化保持敏感。

3.2 自适应调节的实际效果:一个直观的案例

我在一个植保无人机项目里做过对比实验。无人机沿田垄飞行,轨迹跟踪系统融合RTK-GNSS和机载IMU。正常情况下RTK精度在1-2厘米,GNSS量测噪声R设为0.01量级就能跑得不错。但无人机飞到田边树林附近时,RTK信号开始出现间歇性多路径效应,定位误差短时间跳到0.5米以上。

用固定R的EKF时,轨迹在树林段明显鼓起一个包,因为滤波器仍然以0.01的方差去相信这批已经被污染的观测数据。切换到AEKF后,滑窗新息协方差检测到残差突然变大,自动把R调高了几个数量级,滤波器转为更信任IMU的预测值,轨迹包被压下去了。图中那个位置,轨迹偏差从0.4米降到0.15米以内。

但这套方法不是免费的。滑窗长度N的选择直接影响自适应速度。N太小,单个异常残差就会剧烈扰动R的估计,导致权重分配震荡;N太大,R的修正滞后,等滤波器反应过来传感器噪声已经恢复原状了。我试过N取5、10、20、50四档,实测下来在20Hz量测频率下N取10-15表现最稳,既能在一秒内响应噪声突变,又不会因为单点异常产生较大波动。

3.3 AEKF的工程实现时序

下面是我实际用过的AEKF实现流程,用的是位置速度模型加GNSS量测:

  1. 预测步骤:用上一时刻状态和IMU积分推进状态先验,同步更新协方差先验。
  2. 量测到达后计算新息:(e_k = z_k - H\hat{x}_{k|k-1})。
  3. 维护一个固定长度的新息滑窗,窗口长度N取10。
  4. 用窗口内所有新息计算实测新息协方差。
  5. 理论新息协方差与实测值对比,按比例调整R矩阵对角元素,并做上下限限幅。
  6. 用调整后的R计算卡尔曼增益,完成状态和协方差更新。

限幅这步非常关键。我踩过的坑是把R调没了下限,结果连续几个异常残差把R推到极小值,滤波器之后狂信已经失准的量测,轨迹反而发散。后来给R的每个对角元设了(10^{-6})到(10^0)的范围,稳定性立刻上来了。

AEKF适合处理的是量测噪声变化较慢、有统计规律的场景。如果你的传感器噪声是瞬间阶跃的,而且阶跃幅度很大,AEKF的滑窗响应可能不够快,这时候需要的是多模型切换或者鲁棒滤波的思路。

4. AUKF的进阶:没有雅可比也能处理强非线性

4.1 无迹变换的理念:用采样点逼近分布

EKF和AEKF都依赖雅可比矩阵做线性化,这带来两个问题:一是复杂模型的雅可比推导非常痛苦,容易出错;二是线性化在强非线性区域误差很大,泰勒展开丢掉的高阶项可能就是决定成败的部分。

UKF的思路完全绕开了线性化。它不再对函数做近似,而是通过对状态分布做近似——选取一组带权重的sigma点,让这些点的均值和协方差等于当前状态分布的均值和协方差,然后把每个点都经过非线性函数传递,用传递后的点重新计算均值和协方差。

在轨迹跟踪里,最典型的强非线性场景是动目标的纯方位跟踪:量测是方位角 (\theta = atan2(y - y_s, x - x_s)),这个非线性函数在目标经过传感器正侧方时,方位角变化率急剧增大,EKF在这个区域的线性化误差会明显放大。UKF因为直接采样传递,对这类非线性有天然优势。

4.2 AUKF的自适应:和AEKF的差异

AUKF的自适应机制和AEKF类似,也是通过新息协方差匹配来在线调整噪声矩阵。区别在于基础滤波器换成了UKF,预测和更新步骤的处理对象从"高斯分布的解析传递"变成了"sigma点的样本传递"。

一组常用的尺度参数配置是:(\alpha=0.001)控制sigma点的散布范围,(\beta=2)用于高斯分布的最优拟合,(\kappa=0)或取(3-n)保证协方差半正定。实测下来,(\alpha)取值非常敏感:小于(10^{-4})时sigma点分布太集中,非线性传递的信息量不足;大于0.01时分布过宽,协方差被高估,增益过小导致响应迟钝。我在多源融合里选的是(\alpha=0.001),(\beta=2),效果稳定。

4.3 计算代价与工程权衡

要提醒的是,AUKF不是免费的午餐。UKF需要(2n+1)个sigma点逐一通过非线性函数,n是状态维度。如果状态是6维(位置3+速度3),那就是13个点要跑一遍量测模型,计算量是EKF的好几倍。对实时性要求高的系统,这个开销和稳定性收益需要仔细平衡。

我在一个地面无人车的轨迹跟踪项目里做过多算法对比。融合数据是轮速计、IMU和LiDAR位置量测,状态维度12维(位置、姿态、速度、角速度),轨迹包括急转弯和加减速段。AUKF在急转弯段的位置误差比EKF低约23%,但单周期耗时从0.3ms涨到1.1ms。100Hz的控制周期下依然远有余量,但如果换到200Hz以上的嵌入式环境,就得考虑降维或者改用平方根形式。

5. 三种算法的对比实验与选型指南

5.1 我在同一套数据上的实测对比

我在公开的KITTI数据集和自己采集的AGV数据集上都跑了三类算法的对比实验,评价指标是RMSE位置误差、最大误差和单帧耗时。实验设置是:状态量位置加速度,量测源是GPS风格的低频绝对定位加高频惯导推算,模拟场景包含直线、大曲率弯道、短时信号丢失去和噪声突变。

算法位置RMSE(m)最大误差(m)单帧耗时(ms)调参难度
固定R的KF/EKF0.321.200.2低
AEKF0.240.620.3中
AUKF0.190.451.0高

AEKF相对EKF的RMSE提升约25%,最大误差降低约50%,核心收益来自对噪声突变的自适应响应。AUKF相对AEKF的RMSE又提升约20%,主要收益来自强非线性段的估计精度改善。

5.2 我自己的选型法则

纯从工程角度,我的选型逻辑是分级的:

  • 系统线性度好,传感器噪声稳定,RTK加惯导的组合,直接用固定R的KF就够了,没必要上自适应,多一层机制多一个故障源。
  • 系统线性度还行,但传感器会受环境影响波动(GNSS进树荫、视觉进弱纹理区),AEKF性价比最高,改动小、收益明显。
  • 系统存在明显非线性环节(大曲率转弯、纯方位跟踪、视觉重投影模型),或者传感器噪声变化剧烈、间歇性失效,值得上AUKF。但前提是你有足够的算力和调参耐心。

调参顺序上我的建议是:先用固定R的EKF把基础状态模型调顺,确认运动模型和量测模型本身没错,再切换到AEKF测试自适应效果,最后才考虑AUKF。很多人一上来就AUKF,结果调了两个月发现是状态定义有问题,白白浪费时间。

6. 实战案例分析:AGV轨迹跟踪的多传感器融合设计

6.1 系统构成和数据流

我在一个工厂AGV项目里完整落地过这套方案。AGV在仓库里以最高1.5m/s的速度行驶,轨迹跟踪需要提供20Hz的位置输出用于闭环控制。传感器配置是:

  • 编码器轮速计:50Hz,短时精度高,但有累计漂移
  • IMU:100Hz,提供角速度和加速度,用于状态预测
  • 反光板激光定位:2Hz,绝对位置量测,硬币大小精度

整套系统最核心的设计决策是:高频的轮速计和IMU负责状态预测,低频的激光定位只负责修正漂移,中间加一层AEKF做噪声自适应。一开始用固定R跑,AGV在反光板密集区域效果不错,走到货架深处反光板被遮挡时,激光量测频繁失效,轨迹逐渐偏出车道。后来给AEKF加上量测有效性判断:激光定位的质量评估分数低于阈值时,直接把对应的量测噪声调到极大值(相当于丢弃该量测),靠惯导推算撑过遮挡区。这个策略让系统在遮挡区的最大偏差从0.6m降到了0.2m,完全满足AGV对接精度要求。

6.2 数据对齐的关键实现

时间对齐这个坑再强调一遍。我是用一个环形缓存做的:激光定位消息带时间戳到达后,在缓存里找到最近两个IMU/轮速计状态,线性插值出"恰好和激光定位同一时刻"的预测状态,然后拿这个插值状态去做量测更新。插值公式很简单:

[ x(t_{lidar}) = x(t_1) + (x(t_2) - x(t_1)) \cdot \frac{t_{lidar} - t_1}{t_2 - t_1} ]

但t1和t2的选择很讲究。我一开始用缓存里最新一帧和前一帧插值,后来发现问题在于IMU积分本身有漂移,插值出来等于在两个有漂移的状态之间做线性组合,误差没有消除反而被"平均化"了,轨迹会出现小幅锯齿。最后改成在滤波器预测阶段就记录中间状态,每次预测之后把状态缓存一份,插值时用缓存里的状态而非单独维护的里程计状态,锯齿消失了。

不确定度也要按时间对齐做处理。不同传感器的量测噪声标准差,必须在同一时间基准下定义才有意义。我的做法是在离线标定时,先让AGV走一段已知真值轨迹,统计每个传感器在每个时间偏移下的误差特性,再在在线阶段用查表方式设置初始R,AEKF在此基础上做动态修正。

6.3 初始化阶段的一个细节

多传感器融合系统的初始协方差矩阵不能随便设。设太大滤波器初始收敛慢,前几秒钟的轨迹是反的或者严重滞后;设太小又过早锁死先验值,如果初始状态给偏了会很难拉回来。我的经验是:初始P设置为协方差对角元素([\sigma_p^2, \sigma_v^2]),其中(\sigma_p)取初始定位不确定度(比如激光定位精度0.02m),(\sigma_v)取0.5m/s量级。然后前50个滤波周期用较大的量测噪声R,让系统快速收敛,之后再切入正常R值。

实测下来这个策略比"从一开始就用精确R"的收敛速度快很多,而且不会出现初始震荡。很多人忽略这个细节,融合系统一启动就轨迹飞出去,然后又怀疑算法本身有问题,其实只是初始协方差没给对。

7. 工程落地的其他拦路虎:协方差矩阵退化与数值稳定性

7.1 协方差矩阵是怎么退化掉的

做多传感器融合做得久了,一定会遇到协方差矩阵退化问题。症状是滤波器运行一段时间后,状态协方差矩阵的某些对角元变得异常小,或者矩阵不再对称正定,卡尔曼增益计算出现NaN,整个估计器当场失效。

我遇到过一个真实案例:AGV长时间直行,横向位置没有量测激励,协方差的横向分量被不断压缩到接近机器精度,这时候一个微小的数值误差就能让矩阵失去正定性。后来我加了两个防护:一是对P矩阵做周期性对称化(P = (P + P^T)/2),并在对角元上加(10^{-9})的极小值保证正定性;二是对Q矩阵做下限限幅,防止过程噪声在某些维度被压到零从而导致协方差"冻结"。

7.2 平方根滤波是更稳的备选方案

如果上述防护还挡不住数值风险,可以考虑平方根UKF(SR-UKF)或平方根KF。它的核心思路是不直接传递协方差P,而是传递其Cholesky分解的下三角矩阵S,每次更新直接对S做QR分解和Cholesky更新,从数学上保证协方差矩阵半正定。

我在一个需要连续运行8小时以上的巡检机器人项目里用过SR-UKF,和普通UKF对比了协方差矩阵的最小特征值变化趋势,普通UKF在4小时后最小特征值就跌到(10^{-12})量级,SR-UKF一直在(10^{-6})以上,数值稳定性差距肉眼可见。代价是实现复杂度更高,sigma点更新和Cholesky更新的代码量大约多出40%。

7.3 量测一致性检验:别让坏数据进入滤波器

多传感器融合的最后一个隐形杀手是数据异常没有过滤就进入滤波器。自适应滤波能应对噪声的渐变,但对突发的粗大误差(比如激光误匹配、GNSS周跳)应对能力有限。我在所有项目里都会加一个量测门控:

[ e_k^T S_k^{-1} e_k < \chi^2_{0.99} ]

这里(e_k)是新息向量,(S_k)是新息协方差,左侧计算出来的是马氏距离的平方。如果超过(\chi^2_{0.99})门限,说明这个量测和当前估计严重冲突,直接丢弃。这个门控逻辑实现成本极低,但对系统稳定性的收益非常大。实测中,有门控的系统在激光偶尔误匹配的情况下连续运行一周不发散,没有门控的系统平均两三个小时就会出一次大跳变。

我在AGV项目里用的门限取值是:位置量测2维自由度,(\chi^2_{0.99} = 9.21),超过即丢弃。这个值也可以根据调试情况放宽,但不要超过15,否则门控就失去意义了。

8. 把三种算法的选型思路串起来:一个可落地的决策框架

到这一步,整体的思路已经比较清楚了。KF、AEKF、AUKF三者不是替代关系,而是针对不同传感器噪声特性、不同系统非线性程度的三档工具。工程上不用执着于"一定要用最新的算法",我见过很多量产项目用固定R的EKF跑得非常稳,也见过硬上UKF结果调参调崩的项目。

如果让我给一个直接的落地建议,大概是这样的:

  • 第一天做融合:直接用标准KF,把状态定义和传感器时间对齐问题解决清楚,这是整个系统能不能跑通的地基。
  • 第一周做优化:确认基础功能稳定后,引入AEKF的自适应机制,重点看量测噪声变化场景下的轨迹改善。
  • 后续按需升级:如果发现系统存在明显的非线性环节导致EKF线性化误差不可接受,再迁移到AUKF。

我在实际项目中还有一个体会:调参时不要把注意力全放在算法参数上,传感器本身的误差特性摸底越透,滤波参数越容易确定。花半天时间让传感器动起来,记录不同工况下误差分布的真实数据,比盲调R和Q十天都有用。量测噪声到底给0.01还是0.1,不是拍脑袋定的,是从误差分析中算出来的。

另外建议所有做轨迹跟踪的团队都建立一个离线回放调试环境:记录传感器原始数据,离线跑同样的融合算法,这样每次调整参数都能在同一段数据上对比效果。我吃过太多亏——在实车上改参数,改完环境变了,根本分不清是参数变好还是工况变好。离线回放加上定量指标,才是调参的正确姿势。

最后再分享一个小技巧:AEKF和AUKF自适应调节R时,对R矩阵的每个对角元分别做限幅和滤波,而不要让不同维度的量测噪声互相影响。比如视觉量测的噪声和GNSS量测的噪声应该完全独立地自适应,如果用一个标量统一缩放所有维度,某个维度异常会把其他正常维度的权重也带偏。这个细节我在多个项目里都验证过,分开调节的效果稳定得多。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询