如何使用传感器找到Android手机的运动(在所有三个维度)?

时间:2016-02-17 03:36:03

标签: android accelerometer android-sensors

我正在开发一个与Android传感器合作的新项目。我想要找到的是设备被移动到任何维度的程度。例如:如果我将起点设为(0,0,0)并将设备移至(4,10,15),我想找到这些新的坐标(4,10,15)。

1 个答案:

答案 0 :(得分:0)

这是一个非常有趣的问题,已经在机器人技术中使用了几年(不是专门用于android),其中惯性测量单位(IMU)数据用于跟踪设备随时间的位置。

Android设备通常配备加速度计和陀螺仪,两者都可以为您提供有关手机的不同信息。

是解决问题的最简单方法
  1. 找到加速度计读数
  2. 从中减去重力的影响(想想如何)
  3. 将读数整合两次以从参考中找到位置估计值。
  4. 问题是来自加速度计的读数非常噪声,并且在非常小的时间步长内才真正准确。您可以通过卡尔曼滤波器传递读数,以更好地启用状态估计。另请阅读here。通过比较,陀螺仪数据噪声较小,但测量误差仍随时间漂移。

    您将遇到的问题是加速度计的位置测量值不是线性函数(您必须进行两次积分),因此您需要使用Extended Kalman Filter甚至是Unscented卡尔曼滤波器。< / p>

    这个问题在机器人技术中是一个很受欢迎且非常重要的问题,就我所知,尽管你可能在网上找到了库和实现,但你只能用Android API进行高精度估算。由其他人。

    Accelerometer提供加速度数据。

    如果

    对于某些重力g和加速度a,

    x`` = -g + a + e,误差e

    对于某些对x

    有贡献的初始速度v0,

    x` = -gt + at + et + v0

    然后,

    x = -0.5gt ^ 2 + 0.5at ^ 2 + 0.5et ^ 2 + v0t + x0表示初始位移x。

    作为t&gt;&gt; 0,误差e的贡献平方增加,大大改变了你的实际结果。

    请参阅An Introduction to the Kalman Filter中的4.3作为示例,但我建议阅读整篇文章以及书中的章节Probabilistic Robotics