如何解释来自iPhone的加速度计读数

6
我正在尝试构建一个基于Kinect和iPhone的应用程序。
我正在尝试计算每个X Y和Z轴上我的手的加速度,基于Kinect返回的轨迹。基本上,我选择了一个标准时间间隔为0.5秒或15帧(dt),并且在这段时间内有3个点x0,x1和x2,它们之间相隔0.5秒。首先,我必须提到的是,这3个点的位置是以米为单位的。通过使用这些点,我计算出两个速度(v0 =(x1-x0)/ dt和v1 =(x2-x1)/ dt)。最后,通过使用这些速度,我计算出x1和x2之间的加速度为acc =(v1-v0)/ dt。
我在每个帧上重复这些计算,并获得一系列加速度。
正如我所说,我还有一个iPhone,我想知道我拿着iPhone的哪只手,左手还是右手。我想通过尝试将我的手的加速度与保持正确位置的iPhone的加速度匹配来实现这一点,以便我拥有相同的坐标系。
唯一的问题是,我的加速度与手机加速度之间存在巨大差异。
手机加速度读数在每个轴上都在-2到2之间,而我的加速度在-10到10之间。我应该如何解释iPhone的加速度数据以获得与我的相似的米/秒度量?

基本上,我已经计算了iPhone在给定时间间隔内的读数和Kinect加速度之间的平方误差和。然而,由于值的不同比例,所得到的结果并不是很可靠。 - Simon
1个回答

2
在iPhone上,加速度计数据以g力为单位提供。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
}

请注意,您必须减去地球引力的影响,以获得相对于您的起居室而不是相对于四维时空的加速度。
另外,请注意iPhone加速计非常嘈杂,即使手机静止,这些值也会抖动,因此您需要应用一些平滑处理。但是,如果您使用类似于您似乎正在处理位置数据的技术,将每个帧中的值放入数组以获得过去0.5秒内的滚动平均值,则已经为您平滑了数据。
还要注意的另一件事是,iPhone加速计的峰值约为2.3g。这些g力并不难实现(例如,如果您拍手),因此您可能会超过它们,并且累积数据的技术将不太可靠。

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