加速度计测得的移动距离

9
我希望能够通过移动iPhone来移动屏幕上的对象(如矩形、圆等)。例如,我沿着X轴移动iPhone,对象也沿着X轴移动。Y、Z轴同理。
我该如何实现呢?是否有算法可供参考?
谢谢。
附注: 我查了一下,好像可以使用加速度计实现。
3个回答

15

您可以通过两次线性加速度积分来获取位置,但是误差非常大,在实践中无用。

这里是一个解释(Google Tech Talk),在23:20处。我强烈推荐这个视频。

然而,陀螺仪鼠标可能适用于您的应用程序,请参见视频中的37:00-38:25。

类似的问题:

如何跟踪没有GPS的iPhone的微小移动
当用于定位时,手机加速计的真实世界精度是多少?
如何从静止状态计算电话在垂直方向上的运动?
iOS:3D空间中的运动精度
如何使用加速度计为Android应用程序开发测量距离?
如何使用陀螺仪和加速度计找到行驶距离?


3

要准确地完成这项工作并不容易。加速度计只报告加速度,而不是运动。您可以尝试(数值上)随时间积分加速度,但很可能会累积误差,导致意外运动。

伪代码,显然未经测试:

init:
    loc = {0, 0, 0}    ; location of object on screen
    vel = {0, 0, 0}    ; velocity of object on screen
    t = 0              ; last time measured

step:
    t0 = time          ; get amount of time since last measurement
    dt = t0 - t
    accel = readAccelerometer()
    vel += accel * dt  ; update velocity
    loc += vel * dt    ; update position
    displayObjectAt(loc)

那么你的意思是在iPhone上做这件事情不切实际? - MeIr
1
正确。阿里的回复中的链接表明,这可能不会有用。 - user149341

2
为什么不直接使用加速度而不是移动距离呢?例如,如果你的加速度是1.4G向东,那么你的物体应该每秒向东移动14个像素,直到你的加速度改变。
这样,物体的运动就像是受到相对力的影响,我认为这更加真实。移动速度越快,影响物体的力就越大。
另外,请看:

http://www.freescale.com/files/sensors/doc/app_note/AN3397.pdf

使用加速度计、陀螺仪和指南针来计算设备在三维世界中的运动


1
当你进行移动,例如向左移动时,你会得到如下输出:-1g 0g 0g 0g 1g因为当你停止移动时,你会得到一个力,这个力是负的,与最初创建运动的力相反。你需要以某种方式对其进行过滤,这并不容易。 - Kamil Orzechowski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接