从IMU的原始加速度计数据中移除重力 - >请批准数学和算法

时间:2012-05-29 15:14:54

标签: accelerometer sensor gravity

我正在使用这个设备(http://www.sparkfun.com/products/10724)并且基于这种http://www.x-io.co.uk/node/8#open_source_imu_and_ahrs_algorithms实现的磁力计,加速度计和陀螺仪数据的融合成功实现了一个非常好的工作方向估计。现在我想计算动态加速度(测量没有静态重力加速度的加速度)。为此,我提出了以下想法。

计算原始加速度计数据的运行平均值。如果原始加速度稳定一段时间(运行平均值和当前测量的原始数据之间的差异很小),我们假设设备不移动,我们正在测量原始重力。现在将重力矢量和当前方向保存为四元数。这种方法假设我们的设备在没有重力的情况下不能持续加速。

为了计算没有重力的加速度,我现在正在进行四元数计算:


RA = Quaternion with current x,y,z raw acceleration values
GA = Quaternion with x,y,z raw acceleration values of estimated gravity
CO = Quaternion of current orientation
GO = saved gravity orientation

DQ = GO^-1 * CO // difference of orientation between last gravity estimation and current orientation

DQ = DQ^-1 // get the inverse of the difference

SQ = DQ * GA * DQ^1  // rotate gravity vector

DA = RA - SQ // get the dynamic acceleration by subtracting the rotated gravity from the raw acceleration

有人可以检查这是否正确?我不确定因为在测试时我在旋转传感器板时获得了一些高加速度,但是如果移动设备而不旋转它,我能够获得一些加速度数据(但是比旋转期间的加速度小得多)。 / p>

此外,我还有一个问题,即如果加速度计是否在某个位置旋转,加速度计是否也在测量加速度!

2 个答案:

答案 0 :(得分:3)

另一种方法是将accel区分为jerk(使用有限差分,j =(a2-a1)/ dt)。通过衰减/泄漏函数运行反射(使用半衰期衰减计算值而不是简单的乘数)。然后积分加加速度(梯形法则,a = dt *(j1 + j2)* 0.5),它将消除直流偏移(重力)。再次通过衰减函数运行此信号 衰减函数避免了螺旋关闭的值,但会降低您看到的动态加速度值的大小,并会对信号进行一些整形。因此,您不会再获得“准确”m / s / s读数的值。但它对于短时间运动很有用。

当然,您可以使用高通滤波器,但通常需要固定的采样率,如果使用卷积(有限脉冲响应滤波器),可能计算成本更高。

答案 1 :(得分:2)

这比你想象的要容易。你可能想看看我的帖子: http://www.varesano.net/blog/fabio/simple-gravity-compensation-9-dom-imus