3、协方差矩阵调优:过程噪声协方差Q、测量噪声协方差R、初始协方差P0

好,咱们直接进入正题。前面聊完了状态量和观测量,接下来这块儿,才是EKF调参里最磨人的地方——协方差矩阵。

说白了,Q、R、P0这三个矩阵,就是EKF的“三驾马车”。你调得好,滤波器就听话;调不好,它要么反应迟钝,要么直接发散给你看。我在项目里见过太多人,算法公式背得滚瓜烂熟,一上手调Q和R就懵了。

嗯,今天我就把这三兄弟掰开揉碎了讲清楚。

3.1 初始协方差P0:给滤波器一个“起点”

P0代表的是,在刚开始那一时刻,我们对状态估计的不确定度。你想想看,无人机刚上电,IMU还没预热,GPS还没搜到星,这时候你对位置、速度、姿态的把握有多大?

我个人习惯,P0设得稍微“大方”一点。什么意思?

  • 位置P0:如果用的是GPS,初始位置误差可能在几米到几十米。我一般设 diag(10, 10, 10) 单位是米²。
  • 速度P0:悬停起飞的话,速度不确定度小一些,diag(1, 1, 1) 单位 (m/s)²。
  • 姿态P0:这个要小心。如果初始对准没做,欧拉角误差可能很大。我建议设 diag(0.1, 0.1, 0.1) 弧度²,大概相当于5.7°的不确定度。

核心原则:P0设得偏大,滤波器会快速收敛;设得太小,滤波器会“固执己见”,导致初期估计值迟迟追不上真实值。

我曾经在一个飞控项目里,把P0设得太小,结果无人机起飞后姿态估计一直有偏差,飞控以为自己是平的,其实已经歪了。嗯,那次差点炸机。

3.2 过程噪声协方差Q:对“模型”的信任程度

Q矩阵描述的是,我们的运动模型到底有多准。说白了,就是你对“IMU积分出来的结果”有多大信心。

Q越大,说明你觉得模型噪声大,滤波器就会更依赖测量值。Q越小,说明你觉得模型很准,滤波器就更相信IMU积分。

这里有个常见的坑:Q不是随便拍脑袋设的。它应该反映真实的物理过程。

举个例子,加速度计的噪声密度是 0.01 m/s²/√Hz,陀螺仪是 0.001 rad/s/√Hz。那Q该怎么设?

// 以离散时间系统为例,dt为IMU采样周期
// 加速度计噪声方差: (噪声密度)^2 / dt
// 陀螺仪噪声方差: (噪声密度)^2 / dt

float dt = 0.005;  // 200Hz IMU
float acc_noise = 0.01;  // m/s²/√Hz
float gyro_noise = 0.001; // rad/s/√Hz

float acc_var = (acc_noise * acc_noise) / dt;  // 约 0.02
float gyro_var = (gyro_noise * gyro_noise) / dt; // 约 0.0002

// 对于15维状态向量 [位置, 速度, 姿态, 加速度偏置, 陀螺仪偏置]
// Q矩阵对角线元素可以这样设:
// 位置过程噪声:很小,因为位置是通过速度积分来的
// 速度过程噪声:acc_var
// 姿态过程噪声:gyro_var
// 加速度偏置过程噪声:通常很小,比如 1e-6
// 陀螺仪偏置过程噪声:通常很小,比如 1e-8

我的经验:Q矩阵里,速度噪声和姿态噪声是最敏感的。我一般先根据传感器手册算一个理论值,然后在实际飞行中微调。如果发现估计值抖动厉害,就适当减小Q;如果发现跟踪滞后,就增大Q。

3.3 测量噪声协方差R:对“传感器”的信任程度

R矩阵和Q正好相反。R描述的是测量值的噪声有多大。R越大,说明你觉得这个传感器不准,滤波器就会更相信模型预测。

GPS的R怎么设?看HDOP和卫星颗数。气压计的R怎么设?看高度变化率。

我见过有人把R设成固定值,结果GPS信号差的时候,滤波器还把噪声很大的位置测量当宝贝,导致位置估计乱跳。

传感器 典型R值 备注
GPS位置(水平) 5~25 m² 根据HDOP动态调整
GPS速度(水平) 0.5~2 (m/s)² GPS速度一般比位置准
气压计高度 1~10 m² 受风影响大,动态调整
磁力计航向 0.01~0.1 rad² 受磁场干扰严重

注意:R设得太小,滤波器会“过拟合”测量值,导致估计值剧烈抖动。R设得太大,滤波器会忽略测量值,导致估计值发散。我建议在调试时,先让R偏大一些,保证稳定性,再逐步减小。

3.4 三者的关系:一张图看懂

为了让你更直观地理解Q、R、P0的关系,我画了一张流程图。这张图我每次培训必讲,因为它把EKF的核心逻辑说透了。

EKF协方差矩阵调优核心逻辑 初始协方差 P0 决定收敛速度 设太大→初期抖动 过程噪声 Q 决定模型信任度 设太大→跟踪滞后 测量噪声 R 决定传感器信任度 设太小→估计抖动 卡尔曼增益 K = P⁻ * Hᵀ * (H * P⁻ * Hᵀ + R)⁻¹ K 大 → 更相信测量;K 小 → 更相信模型 最终状态估计 P0、Q、R 共同决定估计精度与稳定性 调优顺序:先调P0保证收敛 → 再调Q/R平衡动态响应与噪声抑制

这张图你看懂了吗?P0决定了起点,Q和R决定了整个飞行过程中的“信任分配”。

3.5 实战调优步骤

说了这么多理论,来点实际的。我总结了一套调优步骤,你照着做就行。

  1. 先固定P0:按3.1节的方法设一个偏大的值,保证滤波器能收敛。
  2. 再调R:把无人机放在静止状态,观察估计值的噪声。如果噪声太大,增大R;如果估计值太“死”,减小R。
  3. 最后调Q:让无人机做小幅机动(比如前后晃动),观察跟踪延迟。如果延迟大,增大Q;如果抖动厉害,减小Q。
  4. 反复迭代:Q和R是相互影响的。调了Q可能要重新调R,反之亦然。别嫌麻烦,这是必经之路。

避坑指南:我曾经在一个项目中,为了追求极致的动态响应,把Q设得很大,R设得很小。结果无人机在悬停时,位置估计值像心电图一样上下跳动。后来花了整整两天,才找到一个平衡点。所以,别贪心,稳定第一。

好了,协方差矩阵这块儿就讲到这里。记住,P0、Q、R不是孤立存在的,它们是一个整体。你调好了一个,另外两个也得跟着动。嗯,下一节我们聊聊更具体的——怎么在实际代码里实现这些矩阵的更新。


专注资料整理