我想建立一个应用程序,计算准确的距离由iPhone (不是长距离)使用Gyro+Accelerometer。这里不需要GPS。
我应该如何处理这个问题?
发布于 2011-07-11 16:41:18
这个问题背后的基本演算是在表达式中
(和y和z中的位移的类似表达式)和基本几何是勾股定理
因此,一旦你的加速度计信号通过一个低通滤波器,并以采样间隔dt进行时间分组,你就可以找到x中的位移as (对不起,我的C...)
float dx=0.0f;
float vx=0.0f;
for (int i=1; i<n; i++)
{
vx+=(acceleration_x[i-1] + acceleration_x[i])/2.0f*dt;
dx+=vx*dt;
}
对于dy和dz也是如此。这里
float acceleration_x[n];
包含从测量开始到结束的时间为0,dt,2*dt,3*dt,...(n-1)*dt.
要求出总位移,您只需执行以下操作
dl=sqrt(dx*dx + dy*dy + dz*dz);
这不需要陀螺仪,但如果你测量线性距离,你可以使用陀螺仪读数来控制设备的旋转不是太大。如果旋转太强,请让用户重新进行测量。
发布于 2011-07-11 18:03:49
你可以通过两次积分线性加速度来得到位置,但是的误差是可怕的。它在实践中是无用的。
这里是23:20的an explanation why (Google Tech Talk),强烈推荐这个视频。
类似的问题:
更新(2013年2月24日):@Simon是的,如果你对运动有更多了解,例如一个人在行走,传感器在他的脚上,那么你可以做更多的事情。这些被称为
领域特定假设。
如果假设不成立,它们就会很糟糕地崩溃,而且实现起来可能相当繁琐。然而,如果它们起作用了,你可以做一些有趣的事情。请参阅室内定位的my answer Android accelerometer accuracy (Inertial navigation)中的链接。
发布于 2011-07-11 16:30:49
您应该像Simple iPhone motion detect中所述那样使用核心运动界面。特别是所有的旋转都可以非常精确地跟踪。如果你计划做一些与直线运动相关的事情,这是非常困难的事情。看看Getting displacement from accelerometer data with Core Motion吧。
https://stackoverflow.com/questions/6647314
复制相似问题