2012-05-29 85 views
4

我正在使用此設備(http://www.sparkfun.com/products/10724),併成功實現了基於磁力計,加速度計和陀螺儀數據融合的相當好的工作方向估計。這個http://www.x-io.co.uk/node/8#open_source_imu_and_ahrs_algorithms的實現。現在我想計算動態加速度(測量沒有靜態重力加速度的加速度)。爲此我提出了以下想法。從IMU的原始加速度計數據中去除重力 - >請批准數學和算法

計算原始加速度計數據的運行平均值。如果原始加速度穩定一段時間(運行平均值與當前測量的原始數據之間的差異很小),我們假設設備不移動,並且我們正在測量原始重力。現在將重力矢量和當前方向保存爲四元數。這種方法假設我們的設備無法在沒有重力的情況下不斷加速。

對於計算加速度沒有重力我現在正在做以下四元數的計算:


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 

可能有人檢查,如果這是正確的?我不確定,因爲在測試時我在旋轉傳感器板時獲得了很高的加速度,但是如果設備在不旋轉的情況下移動,我可以獲得一些加速度數據(但比旋轉過程中的加速度小得多)。

另外我還有一個問題,如果加速度計也在測量加速度,如果它在地方旋轉或不!

+0

恐怕我錯過了這裏重要的一點。如果你在傳感器融合之後得到了方位(並且你說你已經擁有了它),那麼你爲什麼不減去測量的加速度的重力?你做不到比這更好。我擔心我在這裏錯過了一些東西,請解釋一下。 – Ali

+0

我只能從任意起點看到設備的相對方向,我不知道世界空間中的當前位置。這就是爲什麼我用上述算法估算重力。 –

回答

2

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

+0

謝謝你的回答!我已經找到你的帖子了,你能解釋一下函數中的計算是什麼嗎?你認爲我們現在是世界座標中的絕對方向嗎?它是如何工作的? –

+0

如果你只有6dof IMU(沒有磁力計)會怎麼樣 - 我還能用這個嗎?我從其他人實施的擴展卡爾曼濾波器中獲得四元數。 –

+0

什麼是'q [3]'應該在你的代碼中? AFAIK,3D矢量有3個座標... –

3

另一種方法是區分加速度給予衝擊(使用有限差分,j =(a2 - a1)/ dt)。通過衰減/泄漏功能運行混亂(使用半衰期衰減計算值而不是簡單的乘法器)。然後綜合挺舉(梯形法則,a = dt *(j1 + j2)* 0.5),它將消除直流偏移(重力)。再次通過衰減函數運行此信號。
衰減函數可以避免數值上升,但會降低您看到的動態加速度值的大小,並會對信號引入一些整形。所以你不會得到'準確'm/s/s讀數的值。但它對於短時間運動很有用。

當然,您可以使用高通濾波器代替,但通常需要固定的採樣率,如果您使用卷積(有限脈衝響應濾波器),則可能計算量更大。

相關問題