卡尔曼滤波器 3D 实现

Posted

技术标签:

【中文标题】卡尔曼滤波器 3D 实现【英文标题】:Kalman filter 3D implementation 【发布时间】:2016-02-11 13:06:53 【问题描述】:

我想在 OpenCV 中为 r3(X、Y、Z 坐标)中的移动对象实现卡尔曼滤波器。 我试图理解OpenCV documentation 但这真的没有帮助而且非常罕见。

初始化的语法是:

KalmanFilter::KalmanFilter ( int dynamParams, int measureParams, int controlParams = 0, int type = CV_32F)

就我而言,是 dynamParams = 9measureParams=3

就我而言,transitionMatrix 是什么?

【问题讨论】:

【参考方案1】:

在这种情况下,转换矩阵 A 看起来像:

A = [1, 0, 0, v, 0, 0, a, 0, 0;
     0, 1, 0, 0, v, 0, 0, a, 0;
     0, 0, 1, 0, 0, v, 0, 0, a;
     0, 0, 0, 1, 0, 0, v, 0, 0;
     0, 0, 0, 0, 1, 0, 0, v, 0;
     0, 0, 0, 0, 0, 1, 0, 0, v;
     0, 0, 0, 0, 0, 0, 1, 0, 0;
     0, 0, 0, 0, 0, 0, 0, 1, 0;
     0, 0, 0, 0, 0, 0, 0, 0, 1]

v = dt
a = 0.5*dt^2

见http://campar.in.tum.de/Chair/KalmanFilter

【讨论】:

【参考方案2】:

我发现,对于 3D 案例,通常使用位置、速度和加速度。这意味着,对于 OpenCV 实现 dynamParams=9 和 measureParams=3 是正确的。

【讨论】:

以上是关于卡尔曼滤波器 3D 实现的主要内容,如果未能解决你的问题,请参考以下文章

卡尔曼滤波器的实现以过滤加速度并找到速度和位置

如何处理卡尔曼滤波器中的异步数据

卡尔曼滤波器使用旋转矩阵平滑加速度计信号

卡尔曼(Kalman)滤波--卡尔曼滤波的应用: 四元数卡尔曼滤波(QKF)的C代码实现姿态解算

实现卡尔曼滤波器进行预测

卡尔曼滤波器中的 dt