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



我一直在试验Coremotion api,目标是将坐标从电话参考系统转换为存储在cattitude对象中的"地球"参考系统。到目前为止,我所尝试的是通过获取crotationmatrix

CMRotationMatrix r = motionManager.deviceMotion.attitude.rotationMatrix;

做一个矩阵乘法
CMAcceleration a = motionManager.deviceMotion.gravity;

(typepedef 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图形,并且没有太多关于如何使用各种crotationmatrix,四元数等的文档。在这样做之前,我已经尝试记录d.attitude的值。俯仰,俯仰,横摇,俯仰,偏航。就我所读到的,这不是要走的路,但除此之外,我发现d.attitude.pitch返回的值跨度只是PI弧度,所以我需要在计算从0到2PI的俯仰角时包括偏航,以便了解手机头部的方向。在我看来,使用旋转矩阵将是一个很好的方法。另外,我想知道我是否需要使用一个矩阵,这是当前旋转矩阵的逆,以便将坐标纳入由r.attitude识别的系统,谢谢你,如果你能帮助!

我不太明白你想做什么。但是如果你说的"地球"参考系是指一个固定的参考系,而你说的"坐标"是指x、y、z坐标,那么你就不可能做你想做的事(或者至少不可能准确地做)。因为你可以用这些来计算设备的位移,这是不可能令人满意的-看看这个例子:我如何找到用陀螺仪和加速度计移动的距离?

最新更新