位置传感器融合代码

时间:2013-02-21 15:58:20

标签: android gps kalman-filter

我正在寻找户外定位我正在做的一个小虚拟现实POC。 我想用GPS和IMU传感器控制游戏角色的移动(不是用IMU完成的旋转)。

我需要融合GPS和ACC传感器以获得尽可能少的延迟和错误。有没有这样的融合或我是否必须从头开始发明它?

该代码将在此开源项目https://github.com/AndersMalmgren/FreePIE

中使用

修改 本文建议卡尔曼http://www.codeproject.com/Articles/326657/KalmanDemo 但是这里的人们认为加速度计的误差太大而且无法正常工作。

2 个答案:

答案 0 :(得分:3)

你当然不必从头开始“发明”它 - GPS / INS融合是文学中很好的主题。只有两本着名的书:

正如其他人所指出的那样(例如Kalman Filter for Android),在Java / Android中也有卡尔曼滤波器的实现。

在特定情况下卡尔曼滤波的问题是需要满足实现卡尔曼滤波器的若干要求*。从理论上讲,您需要确保噪声(未建模的测量误差)始终为white且不相关。问题是你没有从内部接收器(可能大致被认为是白色)获得原始GPS测量结果,而是已经过滤的解决方案(它肯定表现出时间相关性)。

另一个问题是,在卡尔曼滤波器中,您需要进行一些调整,即您需要设置测量噪声等参数。这些参数取决于所用传感器的质量 - 因此它们在不同设备之间有所不同。这可能会降低某些设备的估计质量。

话虽如此,可能有几种解决方案:

  • 使用速度推断位置更新之间的位置。 (我没有在Android上做过这个,但this question可能有助于获得速度。)如果用户的速度变化不太频繁(与位置更新频率相比),这在大多数情况下应该可以正常工作例。

  • 实施完整卡尔曼滤波器:如上所述,即使使用廉价的MEMS级惯性传感器,将绝对位置测量与加速度计相结合也非常普遍。为了减少由Acc传感器引起的误差,在卡尔曼滤波器状态向量中估计这些误差。通常,卡尔曼滤波器估计一个滤波器中的位置,速度,姿态和Acc / Gyro偏差。如果你想假设这些已经足够熟悉,你可以放弃态度和陀螺仪。即使您的传感器可能会出现更多错误,估计偏差通常足以估算位置更新之间的差异。

    实施完整的卡尔曼滤波器也可能意味着您考虑了测量的时间相关性,例如:使用称为Schmidt-Kalman-Filter的技术(参见上面引用的书籍)。这也可能意味着您使用自适应卡尔曼滤波来估算滤波器的某些参数,以考虑不同设备中的不同传感器。但请注意,这些事情需要在导航领域有一点经验:实现通常很简单 - 只需几行矩阵操作,但调整可能非常耗时。但这并不意味着你不应该尝试它!

  • 仅使用上述滤波器的偏差估计值:通过估算Acc偏差,您可以通过使用加速度计测量值外推速度来改进第一种方法(使用速度外推位置)。

*从理论的角度来看 - 你总是可以忽略理论而只是尝试。有时它仍然有效: - )

答案 1 :(得分:0)

我知道这有点晚了,但我有一个开源项目,卡尔曼过滤和Rauch-Tung-Striebel为Java平滑(向后卡尔曼)。 如果您的过程模型和/或测量模型是非线性的,则还支持扩展和无味过滤和平滑。

https://github.com/karnstrand/Kalman4J

Lycka直到安德斯! : - )