0

我想构建类似于欧拉指南针的东西,我需要一些指导。使用加速度计和磁传感器,我设法计算了偏航角、俯仰角和滚动角(弧度)。现在,下一步应该是什么?我在互联网上搜索了几个小时,但找不到相关的东西。我应该根据参考轴组成角度吗?

4

1 回答 1

4

我假设您指的是 Android Play Store 上的 Euler Compass?
加速度计和磁罗盘读数非常嘈杂。如果您还考虑陀螺仪,可能会使用卡尔曼滤波器或类似的东西,您会得到更好的结果。在 Windows 平板电脑上,大部分复杂的数学运算已经为您完成,但在 Android 和 iPhone 上,您必须自己完成:

我建议您从表示设备方向的变换矩阵开始。如果您只对方向感兴趣,则可以使用 3x3 矩阵,如下所示:
1 0 0(第一行是指向 X 轴的向量)
0 1 0(第二行是指向 Y 轴的向量)
0 0 1(第三行是指向Z轴的向量)

首先将陀螺仪旋转应用于您的矩阵。
陀螺仪为您提供围绕每个轴的加速度。
乘以时间,得到角速度。(速度)
再次乘以时间,得到角距离。(度)
短期内,陀螺仪与其他两个传感器相比非常准确和稳定,但它没有固定的参考点,与其他两个传感器一样。即它只给你你移动的角距离,因为你以前的阅读,所以随着时间的推移,舍入误差会导致它慢慢偏离路线。这就是其他两个传感器进来的地方......(用它们来抵消陀螺仪的漂移。)
加速度计和磁力计在排序术语中非常嘈杂,但您可以通过取几个连续读数的平均值来获得更准确的结果。(低通滤波器)这使它们变得迟缓,但从长远来看更准确......陀螺仪的相反弱点。因此,诀窍是将它们结合起来,以充分利用两者。;)

加速度计代表向下矢量,磁力计代表北向矢量。所以,看看你的矩阵向下向量和加速度计的向量之间有什么区别,然后将你的矩阵向加速度计的方向旋转。不是一路...只是小步,以避免引入噪音,但足以抵消陀螺仪的漂移。(不断重新校准。)然后对磁罗盘进行同样的操作。

现在你应该有一个相当准确地代表你的设备方向的旋转矩阵。接下来,您只需在矩阵中添加一个空白行和列,并将其传递给 OpenGL,这样您就可以渲染您的图形。

我希望这有帮助。

雷内

于 2014-07-22T13:13:05.670 回答