位置传感器融合代码

And*_*ers 4 gps android kalman-filter

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

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

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

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

Phi*_*ipp 5

您当然不必从头开始“发明”它 - GPS/INS 融合是文献中广泛讨论的主题。就两本著名的书:

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

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

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

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

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

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

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

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

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