我想建立一个基于Kinect和iPhone应用程序。
我试图计算我手中的加速随着时间的推移每个基于Kinect的返回轨迹的XY轴和Z轴的。 基本上我选择的0.5秒或15帧(一个标准的时间间隔dt
)和3点,( x0
, x1
和x2
)上,其是通过0.5秒separeted时间。 首先我要指出的是,3点的位置在米被提及。 通过使用这些点我计算两个速度( v0 = (x1 - x0) / dt
和v1 = (x2 - x1) / dt
)。 最后,通过使用这些速度,我计算之间的加速度x1
和x2
作为acc = (v1 - v0) / dt
。
我重复这些计算在每个帧和我获得加速度的阵列。
正如我已经说过,我也是一个iPhone,我希望看到哪只手,我有我的iPhone,左手或右手。 我想试图通过我的手的加速度与iPhone的在正确的位置上,使我有同样的轴系统的加速度匹配做到这一点。
唯一的问题是,有我的加速度和手机的加速度之间的巨大差异。
手机acceelaration读数是介于-2至2之间为每个轴,而我的是-10到10之间,我应该怎样理解iPhone的加速度,以获得类似的措施以米/秒,以我的吗?
在iPhone上的加速度计数据以g力单元提供。 x轴与手机屏幕的顶部边缘对齐,y轴与左边缘对齐,以及Z轴来直出对你的屏幕,如果你正在寻找它。 因此,与您的手机在桌子上休息面朝上,你应该得到的值(0, 0, -1)
为X,Y和Z轴分别。 如果你放下你的手机,而它在自由下落,你应该得到(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.3克峰值出来。 这些G力并不难实现(例如,如果您合掌),所以你可能会超过他们,积累的数据会不会很可靠的技术。