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

时间:2012-05-08 07:28:34

标签: c# iphone accelerometer kinect

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

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

我在每一帧重复这些计算,然后获得一系列加速度。

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

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

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

1 个答案:

答案 0 :(得分:2)

iPhone上的加速计数据以g-force为单位提供。 x轴与手机屏幕的上边缘对齐,y轴与左边缘对齐,如果您正在观察,z轴将直接从屏幕朝向您。因此,当您的手机面朝上放在桌子上时,您应分别为x,y和z轴获得(0, 0, -1)的值。如果你放弃手机,它会在自由落体时使用(0, 0, 0)

假设你在移动时保持手机对齐,以获得以每秒平方米为单位的三维加速度:

- (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力并不难实现(例如,如果你拍手一起),所以你可能超过它们,积累数据的技术将不会非常可靠。