使用卡尔曼滤波器集成GPS和加速度计数据的伪代码

4

我有一些加速度传感器,每秒收集数据:

      AC.X  AC.Y AC.Z
9234 -0.98 -0.10 0.03
9235 -0.98 -0.10 0.03
9236 -0.98 -0.10 0.03
9237 -0.98 -0.10 0.03
9238 -0.98 -0.10 0.03
9239 -0.98 -0.10 0.03

GPS数据集被以较长的时间间隔捕获:

        X1        X2         X3 X4          X5 X6 X7 X8   X9   X10 X11  X12 X13 X14 X15 X16 X17 X18
81  $GPGGA 181553.00 4105.86029  N 08754.49966  W  1 06 1.90 00208   M -033   M     *53            
133 $GPGGA 181554.00 4105.86052  N 08754.49954  W  1 05 2.04 00208   M -033   M     *54            
185 $GPGGA 181555.00 4105.86002  N 08754.49950  W  1 06 1.90 00208   M -033   M     *59            
237 $GPGGA 181556.00 4105.85944  N 08754.49889  W  1 06 1.90 00207   M -033   M     *58            
289 $GPGGA 181557.00 4105.85952  N 08754.49877  W  1 07 1.30 00210   M -033   M     *52            
341 $GPGGA 181558.00 4105.85925  N 08754.49852  W  1 06 1.35 00209   M -033   M     *56  

我一直在学习如何使用卡尔曼滤波器来整合这些数据,我开始逐渐理解算法的工作原理。两个数据集都会引入不同类型的误差(加速度计数据会随着时间漂移,但基本上没有噪音;GPS数据漂移很小,但有很多噪音),而卡尔曼滤波器可以让我们利用这些误差特性来获得更好的导航数据。然而,我仍然难以将其转化为代码。我擅长使用R和Python编程语言,但我只是想要一些通用的伪代码来帮助我入门。您知道任何好的资源或者对这类问题有经验吗?

如果您需要使用JavaScript的帮助,我很乐意提供帮助。 - ProllyGeek
我非常感激那个.. 谢谢 @ProllyGeek - Stu
1个回答

2
卡尔曼滤波器是一种基于先前数据的算法。当您有可预测的运动(例如摆动的钟摆)时,实现起来很容易。然而,对于通用目的,正确实现可能会很困难。
我发现,如果您只想平滑GPS数据,实现更简单的LLS滤波器(线性最小二乘)会更容易(在某些情况下也更可靠)。以下是维基百科Wikipedia中考虑了2D空间中的三个点的Python示例,并且我将其用作我的代码起点:
import numpy as np
import matplotlib.pyplot as plt

x = np.random.rand(5,2)*10
a = np.matrix([ [1,x[0][0]], [1,x[1][0]], [1,x[2][0]] ])
b = np.matrix([ [x[0][2]], [x[1][3]], [x[2][4]] ])
yy = (a.T * a).I * a.T*b
xx = np.linspace(1,10,50)
y = np.array(yy[0]+yy[1]*xx)

plt.figure(1)
plt.plot(xx,y.T,color='r')
plt.scatter([x[0][0],x[1][0],x[2][0] ],[x[0][5],x[1][6],x[2][7] ]) 
plt.show()

如果您仍然有兴趣使用卡尔曼滤波器,这篇文章非常有用,可以在动态系统中实现加速度计的卡尔曼滤波器。

谢谢,但这并没有真正回答我的问题。平滑数据没问题,但我需要集成两个数据集,因为它们具有不同的误差配置文件。 - Stu
@Stu 抱歉,我可能一开始误解了你的问题。这个链接更符合你的需求吗?这篇文章非常详细地介绍了如何实现卡尔曼滤波器,我相信他的“Another Example”与你试图实现的内容是相同的。“Phil”在“Bob Zoo”提出的“gps smoothing”主题讨论中的回答也有一些示例实现,虽然不是用R / Python编写的,但仍应该有所帮助。 - Luke
是的!非常感谢。你仍然赚得了那150个声望值。 - Stu
很高兴能够帮忙。我发现Code Project是一个非常有用的网站,特别适合嵌入式编程项目,我会推荐它作为未来的资源。 - Luke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接