【发布时间】:2011-12-23 01:27:43
【问题描述】:
当手机与当地地面水平时,磁力计的 X 和 Y 轴可用于计算北向。但是在滚动或俯仰手机时,我们应该使用滚动和俯仰度来消除倾斜误差。
现在,我想知道是否将重力传感器用作倾斜传感器来获取横滚和俯仰,以帮助提高向北行驶的准确性?
【问题讨论】:
标签: accelerometer heading magnetometer tilt
当手机与当地地面水平时,磁力计的 X 和 Y 轴可用于计算北向。但是在滚动或俯仰手机时,我们应该使用滚动和俯仰度来消除倾斜误差。
现在,我想知道是否将重力传感器用作倾斜传感器来获取横滚和俯仰,以帮助提高向北行驶的准确性?
【问题讨论】:
标签: accelerometer heading magnetometer tilt
这里我描述了如何获得设备相对于水平面和磁北的方向。从方向(旋转矩阵)获取磁航向只需 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提供了旋转矩阵,则只需一行代码即可获取磁航向。
【讨论】: