2013-02-21 142 views
2

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

我需要融合GPS和ACC传感器以获得尽可能少的延迟和错误。有没有这种融合,或者我必须从头开始创造它?

的代码将在这个开源项目使用https://github.com/AndersMalmgren/FreePIE

编辑: 本文建议卡尔曼http://www.codeproject.com/Articles/326657/KalmanDemo 但这里对这样的人suggets该加速度计的误差太大,它不会工作。

回答

3

你肯定不会从头开始“发明” - GPS/INS融合是文学界很好的一个话题。就在著名的书:

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

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

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

话虽这么说,可能有几种解决方案:

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

  • 实现一个完整的卡尔曼滤波器:结合绝对位置测量与加速度计是很常见的,通过上面提到的书指出,即使有便宜的MEMS级惯性传感器。为了减少Acc传感器引起的误差,在卡尔曼滤波器状态向量中估计这些误差。通常,卡尔曼滤波器估计一个滤波器中的位置,速度,姿态和Acc/Gyro偏差。如果你想假设这些已知的足够好,你可以放弃态度和陀螺仪。即使您的传感器可能会出现更多的错误,估计偏差通常也足以在位置更新之间进行估计。

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

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

*从理论的角度来看 - 你总是可以无视理论,只是尝试。有时它仍然会工作:-)

0

我知道这有点晚,但我有一个开源项目,用Kalman Filtering和Rauch-Tung-Striebel为Java进行平滑(反向kalman)。 如果您的过程模型和/或测量模型是非线性的,那么也支持扩展和无迹的过滤和平滑。

https://github.com/karnstrand/Kalman4J

Lycka直到安德斯! :-)