4

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

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

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

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

4

2 回答 2

5

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

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

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

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

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

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

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

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

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

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

于 2013-03-04T11:35:47.393 回答
0

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

https://github.com/karnstrand/Kalman4J

Lycka 直到 Anders!:-)

于 2016-05-20T14:28:15.807 回答