问题标签 [kalman-filter]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1833 浏览

opencv - 使用卡尔曼滤波器更好地估计单应性?

我正在创建一个 AR 应用程序,它跟踪特征、计算单应性,然后从 3D-2D 点对应关系中获取对象的姿势,并使用它来渲染任何 3D 对象。

我正在选择一个特定区域来检测源图像上的特征(通过遮罩)。然后将其与在后续帧上检测到的特征进行匹配。然后我过滤这些匹配并估计未屏蔽区域的单应性。

问题在于单应性估计。它每次都不同(非常轻微,但仍然不同)。效果是:即使我的相机保持静止,我也会在我的跟踪区域周围得到一个振动矩形,我使用估计的单应性绘制它。

我已经发布了一个题为“ 使用 ORB 进行不稳定的单应性估计”的问题,并对我正在考虑的一个事实感到放心(如果该区域的位置与其上一个位置相似,则不重新计算我的单应性)。

然而,我最近知道了卡尔曼滤波器,它通过将我们的先验知识与我们的测量观察相结合,可以更好地估计位置。

因此,在查看了各种示例(特别是http://www.youtube.com/watch?v=GBYW1j9lC1I)之后,我为我的场景建模了一个卡尔曼滤波器(而不是 4 个,用于矩形区域的每个点) :

4 个状态变量(x、y 中的位置和 x、y 中的速度)。

2 个测量变量(x,y 中的位置)

1 个控制变量(加速度)

遵循每次迭代所采取的步骤

这个模型几乎不能纠正我的测量值

现在我的问题是:

  1. 卡尔曼滤波器适合我的场景吗?它会给我带来更好的结果吗?
  2. 如果是,那么缺少什么?我建模对吗?而是为矩形的四个点创建 4 个过滤器,我是否应该以其他方式对其进行建模(例如,根据距离获取 10 个最强匹配并将其用作过滤器的输入)
  3. 如果卡尔曼滤波器不适合,我还能做些什么来为估计的单应性提供更多的稳定性?

任何帮助将不胜感激。谢谢。

0 投票
1 回答
363 浏览

android - android 移动设备上的原始 gps 坐标是否已经通过 Kalman 得到改进

我正在开发一个用于在 android 上导航的应用程序。这基本上意味着返回的 gps 坐标的质量对我来说至关重要。该应用程序主要用于三星 Galaxy S3,最低 SDK 版本为 15。我曾想过使用卡尔曼滤波器来改善我的位置数据,但我不太确定这是否能给我带来一些进步。我听说 android 设备上的 gps 数据已经用 Kalman 进行了预处理,但我不太确定这是否属实。因此,如果有人知道,知道来自位置传感器的返回坐标是否已经用卡尔曼预处理,如果答案是肯定的,关于卡尔曼滤波器中使用的状态描述,即其他传感器用于描述的状态描述,这对我来说非常重要系统的状态。

预先感谢您的回答。

0 投票
1 回答
9774 浏览

c++ - 带加速度的卡尔曼滤波器

我正在尝试使用速度加速度模型来实现基于卡尔曼滤波器的鼠标跟踪(首先作为测试)。

我想试试这个简单的模型,我的状态转移方程是:

使用它,我基本上写下了以下代码:

这是代码的输出:http ://www.youtube.com/watch?v=9_xd4HSz8_g

如您所见,跟踪非常非常慢。我不明白模型有什么问题以及为什么估计如此缓慢。我不希望有任何控制输入。

谁能解释一下?

0 投票
2 回答
2310 浏览

c++ - OpenCV卡尔曼滤波器堆栈溢出

我正在尝试在 OpenCV 2.2 中实现用于 3D 跟踪的卡尔曼滤波器。状态变量是坐标 x,y,z 后跟速度 Vx,Vy 和 Vz,我只能测量 x,y 和 z。

我使用了《Learning OpenCV from O'reilly》一书中的一个例子来开始,但是当我试图让这个例子适应我的问题时,事情变得有点混乱。

这是我的实现(我试图将代码减少到相关部分,并且我已经发表了很多评论,希望能够简化阅读)。

问题是,当我运行代码时,我得到一个“test.exe 中 0x55a3e757 处的未处理异常:0xC00000FD:堆栈溢出。” 在 cvKalmanCorrect 行。

也许我已经将其中一个矩阵初始化为错误的预期大小,但我真的不知道如何检查这个。

有什么想法吗?

0 投票
3 回答
14747 浏览

c++ - Opencv卡尔曼滤波器预测没有新的观察

我想使用 Opencv Kalman 滤波器实现来平滑一些噪声点。所以我试着为它编写一个简单的测试。

假设我有一个观察(一点)。我收到新的观察的每一帧,我称卡尔曼预测和卡尔曼正确。opencv卡尔曼滤波器正确后的状态是“紧跟其后”,没关系。

然后假设我有一个缺失的观察,无论如何我都希望更新卡尔曼滤波器并预测新状态。这里我的代码失败了:如果我调用 kalman.predict() ,则该值不再更新。

这是我的代码:

我认为这段代码很好地说明了我不理解的内容。我试图遵循一些理论和一些实际例子,但仍然不明白如何获得对未来位置的新预测..

任何人都可以帮助我理解我做错了什么?

0 投票
1 回答
942 浏览

matlab - Matlab and then c implementation: Smooth data

I have some data that is slightly noisy. I want to clean it as well as the derivative. A very simple "filter" such as Y(n)=0.2*X(n)+0.8*Y(n-1) suits me well: in other words, the output is smooth enough. Here is an example with both data and its derivative:

Top: data, Bottom: derivative of data

Nevertheless, as it's real-time, I cannot accept a big lag in data. For the derivative, the lag is around 10 iterations: 5 iterations (to get the filtered data) and then another 5 iterations (to get the filtered derivative data).

How can I implement an algorithm in Matlab - in fine, I need a c implementation - that produces a similar result but with very little lag, such as a maximum of 3 iterations EVEN and ESPECIALLY for the derivative.

Here is the Matlab code:

0 投票
1 回答
1582 浏览

python - 网格数据上的高效卡尔曼滤波器实现

我编写了一个非常简单的卡尔曼滤波器,它对时间序列进行操作(包括数据间隙)。它工作得很好,但我碰巧有一个数据立方体(比如说一个 shape 数组Nt, Ny, Nx),我想对数据立方体中的每个像素应用我的时间卡尔曼滤波器。我已经完成了明显的(在最后两个维度上循环),但这需要相当长的时间。

最终,我总是不得不从单个“像素”中提取数据,并构建相关的矩阵/向量,所以这个过程很慢(请注意,每个单独的时间序列中的间隙是不同的,通常 H将状态与观察联系起来的矩阵)。我不熟悉 cython,它可能会有所帮助(只是我不熟悉它)。

我只是想知道对问题的巧妙改写或巧妙的数据结构是否可以更有效地进行时间过滤。我宁愿这只使用 numpy/scipy,而不是 OpenCV,否则它会很麻烦,这取决于额外的包。

0 投票
2 回答
2431 浏览

python - Python 使用卡尔曼滤波器来改进模拟但得到更差的结果

我对将卡尔曼滤波器 (KF) 应用于以下预测问题时所看到的行为有疑问。我已经包含了一个简单的代码示例。

目标:我想知道 KF 是否适合使用现在(在 t 时)获得的测量结果来改进前一天(在 t+24 小时)的预测/模拟结果。目标是使预测尽可能接近测量值

假设: 我们假设测量是完美的(即,如果我们能得到预测与测量完美匹配,我们很高兴)。

我们有一个测量变量(z,真实风速)和一个模拟变量(x,预测风速)。

模拟的风速 x 是由 NWP(数值天气预报)软件使用各种气象数据(对我来说是黑匣子)产生的。模拟文件每天生成,每半小时包含一次数据。

我尝试使用我现在获得的测量值和现在的预测数据(在 t-24 小时前生成)使用标量卡尔曼滤波器来纠正 t+24 小时的预测。作为参考,我使用了: http ://www.swarthmore.edu/NatSci/echeeve1/Ref/Kalman/ScalarKalman.html

代码:

-------------------------

观察:

1)如果昨天的预测过度预测(正偏差),那么今天,我会通过减去偏差来进行修正。在实践中,如果今天我碰巧预测不足,那么减去正偏差会导致更糟糕的预测。我实际上观察到更广泛的数据波动,整体拟合较差。我的例子有什么问题?

2) 大多数卡尔曼滤波器资源表明卡尔曼滤波器最小化后验协方差 p_j = E{(x_j – x^_j)},并且有证据选择 K 来最小化 p_j。但是有人可以解释最小化后验协方差实际上如何最小化过程白噪声 w 的影响吗?在实时情况下,假设实际风速和测量风速为 5 m/s。预测风速为 6 m/s,即。有一个 w = 1 m/s 的噪音。残差为 5 – 6 = -1 m/s。您通过从您的预测中取 1 m/s 来纠正 5 m/s。这就是过程噪声的影响最小化的方式吗?

3)这是一篇提到将KF应用于平滑天气预报的论文。http://hal.archives-ouvertes.fr/docs/00/50/59/93/PDF/Louka_etal_jweia2008.pdf。有趣的一点是在第 9 页 eq (7) 中,“一旦新的观测值 y_t 已知,在时间 t 的 x 估计值变为 x_t = x_t/t-1 = K(y_t – H_t * x_t/t- 1)”。如果我要根据实际时间来解释它,那么“一旦现在知道新的观察值,现在的估计就变成了 x_t ...。” 我了解 KF 如何让您的数据实时接近测量值。但是,如果您要使用 t=now 的测量数据来修正 t=now 的预测数据,那又如何成为预测?

谢谢!

更新1:

4) 如果我们希望卡尔曼处理数据与测量数据时间序列之间的 R2 从未处理数据中改进,我在代码中添加了一个延迟,以研究预测比从当前测量计算的当前偏差晚多少与测量数据。在此示例中,如果测量用于改进预测 6 时间步(从现在起 3 小时),它仍然有用(R2 从 0.183 变为 0.295)。但是,如果使用测量来改进 1 天后的预测,那么它会破坏相关性(R2 下降到 0.075)。

0 投票
2 回答
765 浏览

kalman-filter - EKF - 如何检测过滤器是否收敛?

我实现了一个EKF。该算法运行良好,但我需要一个标准来检测初始化后滤波器何时收敛。最好/最常见的方法是什么。我有两个想法:

1.) 当创新达到预定限度时。2.) 当估计的方差达到预先定义的限制时。

有什么建议么 ?

0 投票
0 回答
918 浏览

matlab - 距离线性加速卡尔曼滤波器

我正在计算加速度计运动的位移,并使用卡尔曼滤波器来提高位移精度。请注意,我知道在真实场景中使用加速度来获得位移是无效的,但在我的情况下,位移非常小(比如 2-3 秒内 10 厘米)。

我正在关注这篇论文(PDF)。在本文中,有两个矩阵,QR,用于噪声建模,它们的设置使得位移误差最小化。作者使用已知协方差的合成加速度数据对上述内容进行了测试,以便在矩阵QR.

我决定改变特定的协方差并找到其相应的最小位移误差。但就我而言,在任何协方差值下位移都没有变化。有什么帮助吗?