使用带传感器融合的9DOF IMU在C ++中进行双重集成加速

时间:2015-01-22 14:27:05

标签: c++ c accelerometer numerical-integration inertial-navigation

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

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

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

由于

1 个答案:

答案 0 :(得分:4)

您可以通过简单地将加速度矢量乘以时间步长(IMU的周期)求和来获得速度,然后将速度乘以时间步长来获得位置。您可以使用各种方法传播(不是整合)方向,具体取决于您选择的方向表示(欧拉角,四元数,姿态矩阵( DCM),Axis-Angle等。)。

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

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

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

在实践中,要做你想要的事情,需要融合和纠正'测量位置和可选的方向。 IMU'预测'位置/方向,而另一个传感器模型(相机功能,gps,高度计,范围/方位测量)采取预测的位置,并正确的'它。融合这些数据有多种方法,其中最多产的是扩展卡尔曼滤波器或误差状态(间接)卡尔曼滤波器。

回到原来的问题;我将方向表示为四元数,并且您可以使用错误 - quaternion derivative和陀螺仪的角速率来传播四元数方向。

编辑:

  

使用高通可以部分解决噪音问题   过滤,但你究竟在谈论什么样的偏见?

您应该阅读sources of error in MEMS accelerometers:恒定对齐偏差,随机行走偏差,白噪声和温度偏差。如你所说,你可以通过高通滤波器来减少噪音的影响 - 但这并不完美,因此存在明显的残留噪音。残余噪声的双重积分给出了二次增加的位置误差。即使在由于重力移除加速度之后,由于这些误差源将会测量显着的加速度,这将导致位置估计在不到1秒的积分内不准确。