使用互补滤波器进行传感器融合

3

我正在尝试学习传感器融合技术,并通过一个安卓应用记录了加速度计、陀螺仪和磁力计的原始数据。

我发现卡尔曼滤波器太复杂了,无法理解。我不想只是拿来一段代码就实现,而没有透彻的理解。

然后,我找到了这个关于互补滤波器的链接,看上去非常有前途,因为很容易理解。所以我有以下疑问(这是我第一次处理所有这些传感器,所以我会问出我所有的问题):

  1. 互补滤波器从传感器中提取信号并输出俯仰角、横滚角和偏航角的方位。这是否意味着它过滤时间域信号并以角度形式提供输出?如果是这样,能否获得经过滤波的时间域信号?

  2. 我看到了这个著名的Google Talk视频,在其中他提到要获得线性加速度,需要从原始加速度计数据中减去重力。如何获得重力向量?

  3. 我对于为什么需要将加速度信号转换成地球坐标系也有些困惑。我读了一些文件,但仍然感到困惑。我可以看出来这是为什么,但不知道所需的旋转矩阵是如何计算的。

  4. 最后(但肯定不是最终的),我如何估计航向?

因此,基本上,我有传感器数据,并想跟踪设备的方向,以及人物的前进方向。这些问题可能听起来很基础,但我需要一些专家在这个话题上的澄清,这样我就可以去工作一些花哨的算法。

如果有人能指点我正确的方向,我将不胜感激。

最好的问候

Chintan

1个回答

2
根据我的经验,没有任何AHRS算法能够与扩展卡尔曼滤波相比较,就准确度而言。而准确度对于计算用户加速度非常重要,因为旋转矩阵的不准确性会导致用户加速度的漂移。
对于问题1: 我不太明白您所说的过滤时间域信号是什么意思。测量样本始终提供时间戳。
对于问题2和3的回答: 为了计算用户加速度,您需要事先计算出姿态(旋转矩阵)。因为您需要使用AHRS算法计算出的姿态将传入的ACC数据从“手机空间”旋转到“世界空间”。这样,无论手机处于哪种方向,上移动都会使用户加速度的Y值增加。希望您能理解我的意思。现在我们在世界空间中拥有原始加速度计数据并减去重力(vector3(0,9.81f,0))。因此,如果没有运动,我们的新用户加速度将始终显示(0,0,0)。
这是简单的部分。现在我们在世界空间中拥有用户加速度。但是我们想要一个位置偏移(路径)。您不能只将加速度积分到速度,然后将速度积分到路径/路程。(请原谅我的英语;-))因为加速度计的测量样本永远不够精确,无法推导出2次路径。您必须编写约束条件来控制您派生的速度,以便在加速度的值和斜率为零时将其设置回零。否则,始终会剩余一定数量的速度,导致随时间漂移的计算路径巨大。我自己编写了这个程序,它可以工作,但不是很准确。一个问题是,识别的运动取决于速度/加速度。运动越慢,加速度计的值就越低,直到它们在传感器噪声中丢失。另一个问题是要识别运动何时结束以消除其对结果速度的影响。
磁力计传感器不需要用于AHRS算法,因为它不够可靠,并且始终会引入误差。磁力计可能会受到环境的影响。例如,看看Google Cardboard的磁力计开关。打开传感器测试应用程序,在拉动Google Cardboard触发器时查看磁力计传感器。它将产生一个巨大的值,根本不代表方向。类似的事情可能会发生在微波等设备上。因此,要获得良好的北向头,您必须不断检查自从特定时间以来磁场的方向和大小是否未发生变化并且是否合理。然后,您可以将磁力计数据用作参考,旋转您从AHRS算法获得的方向旋转矩阵,以校正朝向北。
对于问题4的回答: 您可以从旋转矩阵中获取方向。
vector3 headingDirection = new vector3(rotMat[8], rotMat[9], rotMat[10]);

根据您的旋转矩阵形式(列主或行主),您可能需要调整索引。请参考John Schultz在此处的答案:http://www.gamedev.net/topic/319213-direction-vector-from-rotation-matrix/
通过将当前旋转速度(陀螺仪)乘以从上次估计旋转到现在所经过的时间来估算旋转矩阵。
注释:
我认为,如果您想尝试传感器融合和用户加速度,最好使用cardboard.jar中的扩展卡尔曼滤波器作为起点。您可以将其与您的算法进行比较。
请参见:https://github.com/Zomega/Cardboard/blob/master/src/com/google/vrtoolkit/cardboard/sensors/internal/OrientationEKF.java
虽然它有一个使用磁力计的方法(processMag),但该方法从未在cardboard-api中被调用。
链接文件中的“getPredictedGLMatrix”方法显示了Google如何估计“当前”旋转矩阵。
希望这回答了您的一些问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接