当手机与当地地面保持水平时,磁力计的X和Y轴可用于计算北方航向。但是当滚动或投球时,我们应该使用滚动和俯仰度来消除倾斜误差。
现在,我想知道重力传感器是否用作倾斜传感器以获得滚转和俯仰,以帮助提高向北航行的准确性?
答案 0 :(得分:3)
这里我将介绍如何获得设备相对于水平面和磁北的方向。从方向(旋转矩阵)获得磁航向只需1行代码。
将加速度计和磁力计读数 a 和 m 作为3维向量。无论手机的方向如何, a x m cross-product都指向东方或西方。交叉积指向东方还是西方取决于您的符号约定(向上是正面还是负面)以及坐标系的左右手(左手或右手)。
在计算跨产品之前,您可能希望至少将a simple moving average应用于您的数据。
一般来说,it is not a good idea使用滚动,俯仰和偏航,所以请不要。无论如何,你不需要它。
加速度计读数 a ,交叉积 a x m ,以及加速度计读数和叉积的交叉积 a x( a x m )为您提供3对成对的垂直向量。通过将它们与它们各自长度的倒数相乘来使它们成为单位向量。这3个单位向量将为您提供a rotation matrix。
旋转矩阵等效于设备的方向。在我的应用中,磁航向为atan2(R[Y][Y], R[Y][X])
,其中R是旋转矩阵。您可能必须采用旋转矩阵的不同元素,并可能更改符号,具体取决于您遵循的约定。
如果设备的API提供了旋转矩阵,那么它只是在代码行上获得磁性航向。