如何解读 iPhone 的加速度计读数

2024-04-05

我正在尝试构建一个基于 Kinect 和 iPhone 的应用程序。

我试图根据 kinect 返回的轨迹计算我的手在 X、Y 和 Z 轴上随时间变化的加速度。基本上我选择 0.5 秒或 15 帧的标准时间间隔(dt) 和 3 点, (x0, x1 and x2)随着时间的推移,间隔 0.5 秒。首先我要提一下,这 3 个点的位置是以米为单位的。通过使用这些点,我计算两个速度(v0 = (x1 - x0) / dt and v1 = (x2 - x1) / dt)。最后,通过使用这些速度,我计算之间的加速度x1 and x2 as acc = (v1 - v0) / dt.

我在每一帧重复这些计算,并获得一组加速度。

正如我所说,我也有一部 iPhone,我想看看我哪只手拿着 iPhone,左手还是右手。我想通过尝试将我的手的加速度与保持在正确位置的 iPhone 的加速度相匹配来实现此目的,以便我拥有相同的轴系统。

唯一的问题是我的加速度和手机的加速度有很大的差异。

每个轴的手机加速度读数在 -2 和 2 之间,而我的读数在 -10 和 10 之间。我应该如何解释 iPhone 加速度以获得与我的类似的测量值(以米/秒为单位)?


iPhone 上的加速计数据以 g 力为单位提供。 x 轴与手机屏幕的上边缘对齐,y 轴与左边缘对齐,如果您正在看屏幕,则 z 轴会直接从屏幕指向您。因此,当您的手机正面朝上放在桌子上时,您应该得到以下值(0, 0, -1)分别为 x、y 和 z 轴。如果您的手机掉落,当它处于自由落体状态时,您应该得到(0, 0, 0).

假设您在移动手机时保持手机像这样对齐,以获得以米/秒平方为单位的 3 维加速度:

- (void)accelerometer:(UIAccelerometer*)accelerometer didAccelerate:(UIAcceleration*)acceleration
{
    float g = 9.80665f;
    float x = acceleration.x * g;
    float y = acceleration.y * g;
    float z = (acceleration.z + 1.0f) * g;
    // x, y, and z now hold the absolute acceleration in ms^-2
}

请注意,您必须减去地球引力的影响才能获得相对于您的客厅而不是相对于 4 维时空的加速度。

另请注意,iPhone 加速计的噪音非常大,即使手机处于静态,这些值也会抖动,因此您需要应用一些平滑处理。但是,如果您使用与处理位置数据类似的技术,将每帧的值放入数组中以获得过去 0.5 秒的滚动平均值,这已经为您平滑了数据。

另一件需要注意的事情是 iPhone 加速度计的峰值约为 2.3g。这些重力并不难实现(例如,如果您拍手),因此您可能会超过它们,并且积累数据的技术不会非常可靠。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何解读 iPhone 的加速度计读数 的相关文章

随机推荐