使用带有传感器融合的 9DOF IMU 在 C++ 中双重积分加速

ImQ*_*009 3 c c++ accelerometer numerical-integration inertial-navigation

我花了几个小时研究数值积分和速度/位置估计,但我真的找不到一个可以被我的大脑理解或适合我的情况的答案。

我有一个 IMU(惯性测量单元),它有一个陀螺仪、一个加速度计和一个磁力计。所有这些传感器都处于融合状态,这意味着例如使用陀螺仪我能够补偿加速度计读数中的重力,而磁力计补偿漂移。换句话说,我可以使用这样的设置获得纯加速度读数。

现在,我正在尝试根据加速度准确估计位置,您可能知道这需要双重积分,并且有多种方法可以做到这一点。但我不知道哪一个最适合这里。有人可以分享一些有关此的信息吗?另外,如果您能在不使用任何复杂的数学公式/符号的情况下向我解释它,我将不胜感激,我不是数学家,这是我在寻找信息时遇到的问题之一。

谢谢

Gou*_*uda 6

您可以通过简单地将加速度向量乘以时间步长(IMU 的周期)相加来获得速度,然后将速度乘以时间步长相加以获得位置,从而对加速度进行积分。您可以根据您选择的方向表示(欧拉角、四元数、姿态矩阵 (DCM)、轴角等)使用各种方法来传播(不整合)方向。

然而,你有一个更大的问题。

长话短说:除非您拥有海军级 IMU(200,000 美元以上),否则您不能简单地整合加速度和角速率来获得准确的姿势(位置和方向)估计。

我假设您使用的是低成本(低于 1,000 美元)IMU - 您的加速度计和陀螺仪会受到噪声和偏差的影响。这些将使得无法通过简单的积分获得准确的姿势。

实际上,要执行您的意图,需要融合位置的“校正”测量值和可选的方向。IMU“预测”位置/方向,而另一个传感器模型(相机功能、gps、高度计、距离/方位测量)采用预测位置并“校正”它。有多种融合这些数据的方法,其中最多产的是扩展卡尔曼滤波器或错误状态(间接)卡尔曼滤波器。

回到你原来的问题;我会将方向表示为四元数,您可以通过使用误差四元数导数和陀螺仪的角速率来传播四元数方向。

编辑:

使用高通滤波器可以部分解决噪声问题,但您到底在谈论什么样的偏差?

您应该阅读MEMS 加速度计中的误差来源:恒定对准偏差、随机游走偏差、白噪声和温度偏差。正如您所说,您可以通过高通滤波器来减少噪声的影响 - 但是这并不完美,因此存在显着的残留噪声。残余噪声的双重积分给出了二次增加的位置误差。即使在去除了重力加速度之后,也会由于这些误差源而测量到显着的加速度,这将使位置估计在不到 1 秒的积分时间内变得不准确。