我正在开发一个与Android传感器合作的新项目。我想要找到的是设备被移动到任何维度的程度。例如:如果我将起点设为(0,0,0)并将设备移至(4,10,15),我想找到这些新的坐标(4,10,15)。
答案 0 :(得分:0)
这是一个非常有趣的问题,已经在机器人技术中使用了几年(不是专门用于android),其中惯性测量单位(IMU)数据用于跟踪设备随时间的位置。
Android设备通常配备加速度计和陀螺仪,两者都可以为您提供有关手机的不同信息。
是解决问题的最简单方法问题是来自加速度计的读数非常噪声,并且在非常小的时间步长内才真正准确。您可以通过卡尔曼滤波器传递读数,以更好地启用状态估计。另请阅读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