Android 位置传感器融合码

Android 位置传感器融合码,android,gps,kalman-filter,Android,Gps,Kalman Filter,我正在为我正在做的一个小型虚拟现实POC寻找户外定位。 我想用GPS和IMU传感器控制游戏角色的移动(而不是用IMU完成的旋转) 我需要融合GPS和ACC传感器,以尽可能减少延迟和错误。有没有这样的融合,或者我必须从头开始发明它 该代码将用于此开源项目 编辑: 本文建议卡尔曼滤波 但是这里的人总是认为加速计的误差太大,它不会工作。你当然不必从头开始“发明”它——GPS/INS融合是一个在文学界广受关注的话题。只有两本著名的书: 法雷尔: 格罗夫斯:) 正如其他人所指出的(例如),Java/f

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

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

该代码将用于此开源项目

编辑: 本文建议卡尔曼滤波
但是这里的人总是认为加速计的误差太大,它不会工作。

你当然不必从头开始“发明”它——GPS/INS融合是一个在文学界广受关注的话题。只有两本著名的书:

  • 法雷尔:
  • 格罗夫斯:)
正如其他人所指出的(例如),Java/for Android中也有卡尔曼滤波器的实现

在您的具体案例中,卡尔曼滤波的问题是,需要满足实现卡尔曼滤波的几个要求*。从理论上讲,您需要确保噪声(未建模的测量误差)始终不相关。问题在于,您无法从内部接收器获得原始GPS测量值(可以近似地认为是白色的),而是已经过滤的解决方案(肯定会显示时间相关性)

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

尽管如此,可能有几种解决方案:

  • 使用速度推断位置更新之间的位置。(我没有在Android上这样做,但可能有助于获得速度。)如果用户的速度变化不太频繁(与位置更新频率相比),这在大多数情况下都会非常有效

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

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

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

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

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

莱卡·蒂尔·安德斯!:-)

感谢您的链接,但是github repo中的
README.md
中的一些使用示例会有所帮助。