2013-10-17 353 views
1

我試圖獲得GY-521(MPU 6050)的Z角旋轉角度,但如果我不移動傳感器,角度上升也是靜態的。有沒有辦法「過濾」他對我的情況是正確的角度?濾波器Z-角度旋轉MPU 6050 + Arduino

代碼:

float accel_z = accel_t_gyro.value.z_accel; 
float accel_angle_z = 0; 
float gyro_angle_z = gyro_z*dt + get_last_z_angle(); 
float unfiltered_gyro_angle_z = gyro_z*dt + get_last_gyro_z_angle(); 
float alpha = 0.96; 
float angle_z = alpha*gyro_angle_z + (1.0 - alpha)*accel_angle_z; 

輸出時不移動傳感器:

X = X-roatation角 Z = Z-roatation-天使

 x z 
    8.37 4.24 
    8.35 4.22 
    8.33 4.21 
    8.32 4.19 
    8.31 4.18 
    8.29 4.17 
    8.28 4.15 
    8.26 4.14 
    8.25 4.12 
    8.23 4.12 
    8.22 4.10 
    8.21 4.09 
    8.19 4.07 
    8.18 4.05 
+0

[您如何使用移動平均值濾除iPhone OS中的加速度計值](http://stackoverflow.com/questions/2272527/how-do-you-use-a-moving-average-在過濾器加速計數值在iphone-os) –

+0

它看起來像你已經有一個低通濾波器 - 也許你需要增加'阿爾法'的價值,以獲得更多的平滑? –

+0

爲我的問題找到了解決方案。無法讀取z軸上的旋轉角度變化,因爲沒有重力將陀螺儀保持在正確的位置;) –

回答

0
蒂莫

,看到你發現你的問題的部分解決方案(引用:「沒有引力使陀螺儀保持在正確的位置」)。我想詳細說明一下,因爲有辦法只從陀螺儀獲得相當好的結果。我不知道它對你的應用程序是否足夠好。以下是我使用相同硬件的結果:http://robokitchen.tumblr.com/post/68625623585/imu-with-gyroscope-only-i-tested-the-three-axes。在這個視頻中,我根本沒有使用加速計。

有兩點,可以幫助你獲得更好的效果:

1)除非你傳感器保持完全水平使用這個公式,你不能得到z軸旋轉:

float gyro_angle_z = gyro_z*dt + get_last_z_angle(); 

要解釋爲什麼,想象一下:如果你的陀螺儀圍繞x軸旋轉了90度,然後圍繞着Z軸旋轉了90度,那麼你將無法獲得與繞z軸旋轉90度相同的結果。這意味着您應該計算圍繞所有軸的旋轉,然後提取z軸旋轉。如果您不使用x和y軸,則結果將不正確(除非您的傳感器保持完全水平)。

計算圍繞所有軸的旋轉的一種有效方法是使用四元數。關於四元數有很多要說的,所以我讓你做你自己的研究,並在需要時提出更多的問題。

2)使用所有3個軸後,仍會有靜態漂移。這是因爲陀螺儀即使不移​​動也不會讀出完美的0。爲了改善這種情況,您可以校準陀螺儀。一個簡單的校準方法是當陀螺儀不移動時讀取大量(100+)的值,計算平均偏差,並在陀螺儀移動時從您的測量值中減去它。在此之後,仍然會有輕微的偏差,但並不像您現在可能遇到的那樣糟糕。

下面是我使用MPU-6050陀螺儀和加速度計得到的最好結果:http://robokitchen.tumblr.com/post/68626551378/imu-with-gyroscope-and-accelerometer-i-ran-the。如你所知,加速度計有助於穩定x和y軸,但不能穩定z軸。然而,z軸漂移很低,並且仍然可用於許多應用。例如,有幾個quadcopters不使用磁力計,並受z軸漂移影響,但仍然可用。