6

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

我正在尝试根据 kinect 返回的轨迹计算我的手在 XY 和 Z 轴上随时间的加速度。基本上,我选择了 0.5 秒或 15 帧(dt)和 3 个点(x0x1)的标准时间间隔,时间间隔为 0.5x2秒。首先我要提一下,这 3 个点的位置以米为单位。通过使用这些点,我正在计算两个速度(v0 = (x1 - x0) / dtv1 = (x2 - x1) / dt)。最后,通过使用这些速度,我计算x1x2as之间的加速度acc = (v1 - v0) / dt

我在每一帧重复这些计算,我得到一个加速度数组。

正如我所说,我还有一部 iPhone,我想看看我的 iPhone 在哪只手上,左手还是右手。我想通过尝试将我的手的加速度与保持在正确位置的 iPhone 的加速度相匹配来做到这一点,这样我就有了相同的轴系。

唯一的问题是我的加速度和手机的加速度之间存在巨大差异。

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

4

1 回答 1

2

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。这些 g 力并不难实现(例如,如果您一起拍手),因此您可能会超过它们,并且积累数据的技术将不是很可靠。

于 2012-05-25T21:21:21.477 回答