kalman filter and state estimation



0.Perface

花了一晚上读懂了一篇综述中提及的滤波方法下的SLAM鼻祖论文MonoSLAM中提到的vSLAM下的Kalman滤波方法, 为了避免自己遗忘,特意撰写此文。本文将从符号推导到具体数值案例,系统地讲解MonoSLAM中的EKF状态估计方法。

1.Foundation

1.1. 相机模型,相机坐标系,归一化平面

相机内参矩阵 描述了相机坐标系到像素坐标系的映射关系:

其中 为焦距, 为主点坐标。

对于世界坐标系中的点 ,其在相机坐标系下的坐标为 ,其中 为由四元数 得到的旋转矩阵, 为相机位置。

归一化平面坐标为 ,像素坐标为:

1.2. 状态方程,观测方程,系统方程

状态方程

状态向量 描述系统在时刻 的完整状态。对于MonoSLAM:

其中 为相机位置(3维), 为相机姿态四元数(4维), 为线速度(3维), 为角速度(3维), 为第 个地图点坐标(3维)。

状态维度:

观测方程

观测方程描述状态到观测的映射:

其中 为投影函数, 为观测噪声。

对于单个地图点 ,其观测预测为:

其中 为透视投影函数。

系统方程(运动模型)

系统方程描述状态随时间的演化:

其中 为运动模型函数, 为过程噪声。

对于匀速运动模型:

(地图点假设为静态)

2.Kalman Filter 符号推导

2.1. 初始设置

世界坐标系与相机参数

首先我们有一个世界坐标系,假设机器人在世界坐标系中移动,相机在机器人上的某个位置。初始相机位置为 。我们拥有 个靶点的真实位置,第 个靶点坐标为

相机内参矩阵为:

状态向量构造

构造输入卡尔曼滤波器的第0帧状态向量:

其中相机状态 包含:

各分量含义:

  • :相机在世界坐标系中的位置(3维)
  • :相机姿态四元数(4维)
  • :相机线速度(3维)
  • :相机角速度(3维)

地图点 为第 个靶点在世界坐标系中的位置

状态向量维度

2.2. 协方差矩阵与噪声模型

初始协方差矩阵

维的对角矩阵,表示初始状态的不确定性:

对角线元素反映了各状态分量的初始不确定性(方差)。

过程噪声协方差矩阵

什么是过程噪声?

过程噪声描述了运动模型的不完美性。我们假设相机做匀速运动,但实际运动会有抖动、加速、减速。 量化了这种"假设不成立"的程度。

为什么需要

如果没有 (即 ),意味着完全相信运动模型是完美的。随着预测进行,状态估计的不确定性会越来越小,滤波器会变得"过度自信",完全忽略新的观测数据,导致估计发散。

的作用是在每一步预测中,为状态的不确定性注入一个"最小保障量",防止滤波器过度自信。

如何设置

通常设为对角矩阵,假设各状态分量的噪声相互独立:

对角线元素含义:

  • :位置预测噪声方差,单位 。值越大,表示越不相信匀速模型能准确预测位置。
  • :姿态预测噪声方差,单位
  • :速度预测噪声方差,单位
  • :角速度预测噪声方差,单位
  • :地图点噪声方差。由于地图点假设为静态,通常设为0或极小值。

物理意义示例

  • 位置噪声方差 表示位置预测可能有约 米的误差
  • 姿态噪声方差 表示约 "rad"或 度的误差

观测噪声协方差矩阵

什么是观测噪声?

观测噪声描述了传感器测量的不精确性。特征点提取算法(如FAST、ORB)无法完美定位像素坐标, 量化了这种测量误差。

为什么需要

告诉滤波器观测数据有多"嘈杂"。如果 很小,滤波器会更信任观测;如果 很大,滤波器会更信任自己的预测。

如何设置

对于单个特征点观测 矩阵:

通常假设 方向的误差独立且方差相同:

(单位:像素²)

这表示特征点提取精度约为 像素(标准差)。

在卡尔曼增益中的作用

卡尔曼增益 的计算:

关键权衡

  • 如果 相对于 很大(观测不可靠),则 大, 小,更信任预测
  • 如果 相对于 很小(观测精确),则 小, 大,更信任观测
  • 影响: 更信任观测

2.3. 运动模型假设

假设运动模型为匀速运动模型:

状态转移雅可比矩阵

对于匀速模型, 是分块对角矩阵:

其中:

2.4. EKF预测步骤

状态预测:

协方差预测:

2.5. EKF更新步骤

观测残差:

观测雅可比矩阵:

创新协方差:

卡尔曼增益:

状态更新:

协方差更新:

3.Kalman Filter 具体数值案例

本节通过一个完整的数值案例,演示MonoSLAM中EKF的工作过程。

3.1. 场景设定

相机参数

  • 内参矩阵

  • 图像尺寸: 像素
  • 帧率:30fps,

初始地图点(世界坐标系)

假设有4个特征点在同一平面上( ):

初始相机状态(帧0)

(相机在 米上方)

(无旋转)

m/s沿X轴)

(无角速度)

噪声参数

过程噪声协方差

各分量含义:位置噪声 ,姿态噪声 ,速度噪声 ,角速度噪声 ,地图点噪声

观测噪声协方差

(单位:像素²)

3.2. 初始化(帧0)

状态向量

维度:

具体值:

各分量:位置 ,四元数 ,速度 ,角速度 ,地图点

初始协方差矩阵

对角矩阵:

各分量:位置 ,四元数 ,速度 ,角速度 ,地图点

初始观测(帧0)

将地图点投影到图像:

对于

  • 相机坐标系:
  • 归一化坐标:
  • 像素坐标:

同理计算其他点:

  • 观测:
  • 观测: (超出图像)
  • 观测: (超出图像)
  • 观测: (超出图像)

注意:由于相机在 米上方看向 平面,部分点投影为负值。实际中只选择可见的点进行跟踪。

3.3. 帧1处理流程

预测步骤

运动模型预测

(无旋转)

地图点不变:

状态转移雅可比矩阵

对于匀速模型, 是分块对角矩阵:

其中 矩阵:

具体数值(位置部分):

协方差预测

由于 接近单位矩阵,且 较小:

对角线元素增加:

  • 位置协方差:
  • 速度协方差:

观测步骤

生成观测值

假设真实运动有轻微扰动:

使用真实位姿投影

归一化坐标:

像素坐标:

所以

预测观测值

使用预测位姿 投影

归一化:

像素:

观测残差

像素

更新步骤

观测雅可比矩阵

对于点 矩阵。

,投影:

计算

对于预测状态: 为单位矩阵

计算

所以 为稀疏矩阵,仅对位置 和地图点 有非零元素。

创新协方差

由于 近似对角,且 只有少数非零元素:

加上观测噪声

卡尔曼增益

对于位置 的增益:

状态更新

对于位置

协方差更新

由于 很小, ,但略有减小。

3.4. 状态扩展(帧2检测新点)

检测新特征点

假设在帧2图像坐标 检测到新点。

逆深度参数化初始化

从像素 反投影射线方向:

归一化:

初始逆深度: ,假设 米,则

深度不确定性: 米,则

新点坐标:

状态向量扩展

维度从25增加到28

协方差矩阵扩展

其中

表示新点与旧状态的协方差,初始设为0。

3.5. 关键数值总结

帧0初始值

  • 相机位置:
  • 点1观测:
  • 状态维度:25
  • 协方差迹:3.48

帧1预测值

  • 相机位置:
  • 点1观测:
  • 协方差迹:约3.58

帧1更新值

  • 相机位置:
  • 点1观测:
  • 协方差迹:约3.57

这个案例展示了MonoSLAM如何通过EKF逐步更新相机位姿和地图点,以及如何扩展状态向量处理新特征点。实际系统中会同时跟踪多个点,计算更复杂,但基本原理相同。

4. 总结

本文从符号推导到具体数值案例,系统地讲解了MonoSLAM中的EKF状态估计方法。关键要点:

  1. 状态向量:包含相机位姿、速度和地图点,维度为
  2. 过程噪声 :描述运动模型的不完美性,防止滤波器过度自信
  3. 观测噪声 :描述传感器测量的不精确性,决定对观测的信任程度
  4. 卡尔曼增益 :在预测和观测之间进行权衡,由 共同决定

通过具体数值案例,我们看到了EKF如何逐步更新状态估计,以及如何处理新特征点的加入。这些是理解MonoSLAM乃至所有基于滤波的SLAM方法的基础。