使用加速度计和陀螺仪独立于方向跟踪手机运动

时间:2013-04-07 17:56:42

标签: ios accelerometer gyroscope core-motion

我一直在尝试使用Coremotion APIS,其目标是将坐标从电话参考系统转换为“地球”参考系统,作为存储在CMAttitude对象中的坐标。 我到现在为止尝试的是获取CMRotationMatrix

CMRotationMatrix r = motionManager.deviceMotion.attitude.rotationMatrix;

并使用

进行矩阵乘法
CMAcceleration a = motionManager.deviceMotion.gravity;

按以下方式(typedef float vec3f [3])

vec3f accelerationInReferenceSystem;
accelerationInReferenceSystem[0] = a.x * r.m11 + a.y * r.m12 + a.z * r.m13;
accelerationInReferenceSystem[1] = a.x * r.m21 + a.y * r.m22 + a.z * r.m23;
accelerationInReferenceSystem[2] = a.x * r.m31 + a.y * r.m32 + a.z * r.m33;

但是,没有运气。我并不热衷于3D图形,并且没有太多关于如何使用各种CMRotationMatrix,四元数等的文档。在这之前,我尝试记录d.attitude.pitch,d.attitude.roll的值。和d.attitude.yaw。对于我所读到的,它不是要走的路,但除此之外,我发现d.attitude.pitch返回的值仅跨越PI弧度,因此我需要在计算俯仰角时包括偏航。 0到2PI,以了解手机的头部朝向哪里。在我看来,使用旋转矩阵将是一个很好的方法。另外,我想知道我是否需要使用与当前旋转矩阵相反的矩阵,以便将坐标带入由r.attitude标识的系统中,谢谢你,如果你能帮忙的话!

1 个答案:

答案 0 :(得分:0)

我不确定我明白你想做什么.. 但是如果通过'地球'参考系统你指的是一个固定的参考系统,'坐标'你的意思是x,y,z坐标< / em>,那么你不可能做你想要做的事情(或者至少,不可能做到准确)。 因为您可以使用它们来计算设备的位移,这是不可能令人满意的 - 请参阅此示例:How can I find distance traveled with a gyroscope and accelerometer?