状态估计:从有噪声的测量推断真实状态
状态估计把不完整、延迟且带噪声的传感器读数,与运动模型结合成机器人当前最可信的内部世界。
为什么“读传感器”仍不等于“知道状态”
编码器读到关节位置,却不能直接给出关节速度;IMU 的角速度很快,但积分后会漂移;相机能提供相对位姿,却可能遮挡并带几十毫秒延迟;轮速计在地面打滑时会系统性出错。状态估计的任务是明确描述不确定性,并随新证据更新判断。
概率方法把状态写成条件分布 \(p(\mathbf x_k\mid\mathbf z_{1:k},\mathbf u_{1:k})\),意为在截至时刻 \(k\) 的全部测量和输入条件下,状态可能在哪里。贝叶斯滤波分两步。预测利用运动模型:
更新利用新测量:
直觉上,预测把昨天的判断沿运动模型推到今天,同时增加不确定性;更新拿今天的测量重新收紧分布。符号 \(\propto\) 表示右边还要归一化,使总概率为 1。
卡尔曼滤波:高斯世界里的最优线性融合
在线性、高斯噪声假设下,系统写为
其中 \(\mathbf w_k\sim\mathcal N(0,\mathbf Q)\) 是过程噪声,\(\mathbf v_k\sim\mathcal N(0,\mathbf R)\) 是测量噪声。滤波器用均值 \(\hat{\mathbf x}\) 和协方差 \(\mathbf P\) 表示估计。预测阶段为
收到测量后,创新为 \(\mathbf y_k=\mathbf z_k-\mathbf H\hat{\mathbf x}_{k|k-1}\),卡尔曼增益为
随后
\(\mathbf Q\) 越大,滤波器越不信运动模型;\(\mathbf R\) 越大,越不信传感器。它们代表噪声统计,随意把它们当作“平滑旋钮”会破坏一致性。调得过小会让滤波器过度自信,真实误差已经很大,协方差却很小,后续测量也拉不回来。
机器人系统是非线性的。扩展卡尔曼滤波(EKF)在当前估计附近用雅可比做局部线性化;无迹卡尔曼滤波(UKF)传播一组确定性采样点;粒子滤波用许多带权样本表达多峰分布。机器人可能位于两条外观相似的走廊时,多峰分布很自然,单一高斯会把两个可能位置“平均”到墙中间,粒子滤波更合适。
滤波只使用当前及过去测量,适合在线控制;平滑还使用未来测量重新估计历史状态,离线精度通常更高。固定延迟平滑保留最近一段时间窗口,在可控延迟下利用晚到测量。因子图把运动、传感器和先验写成连接状态变量的因子,通过最大后验优化求一段最一致的轨迹;视觉惯性里程计和 SLAM 经常采用这种形式。选择时要明确允许多大延迟、历史窗口多长和何时边缘化旧状态。
可观测性与偏置
有滤波器并不保证状态能被估出来。可观测性问:从一段输入和输出,能否区分不同初始状态。静止的 IMU 无法仅靠自身区分某些姿态与加速度组合;单目相机在没有已知尺度时无法直接恢复绝对尺度;轮式机器人长直线运动可能难以校准部分外参。
传感器偏置尤其危险。陀螺仪测量可写为
\(\mathbf b_g\) 是缓慢变化的偏置,\(\mathbf n_g\) 是快速噪声。若把偏置当成零均值噪声,积分误差会持续积累。常见做法是把偏置也纳入状态向量,让视觉、重力方向或静止约束逐步校正它。
时间戳、延迟与离群值
融合算法的输入必须在同一时间基准上。相机图像在 \(t\) 时刻曝光,神经网络在 \(t+80\text{ ms}\) 才输出结果;若估计器把结果当成当前测量,快速运动时会产生明显位置偏差。解决方式包括硬件同步、时间戳校准、状态缓冲和延迟更新。
离群测量也不能被高斯模型无条件接受。常用创新马氏距离
判断测量与当前估计是否相容。\(d^2\) 太大时可拒绝、降权或进入重新定位流程。连续拒绝同一传感器也可能说明模型错了,系统应上报健康状态,不能悄悄长期忽略。
工程例子:轮速计与 IMU 融合后仍然漂移
差速底盘使用左右轮编码器估算里程,IMU 提供角速度。短时间内融合能让转向更平稳;在光滑地面急加速时,轮子打滑,轮速计高估位移;IMU 又无法直接提供稳定的平面绝对位置,所以系统仍会漂移。增加相机或激光定位可以提供外部位置约束。
若融合后转弯总有固定偏差,应检查轮径、轮距、IMU 零偏和坐标轴;若偏差只在急转时出现,应检查打滑、饱和和时间同步;若估计突然跳变,应检查重定位离群值。把所有问题归因于“滤波参数没调好”会掩盖传感器和标定故障。