1

I try to get the Z-angle rotation of a GY-521 ( MPU 6050 ) but the angle rise static also if i don't move the sensor. Is there a way to "filter" the angle that he is correct for my case ?

Code:

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;

output when sensor not moved:

x = x-roatation-angle z = z-roatation- angel

      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
4

1 に答える 1

1

ティモ、問題の部分的な解決策を見つけたことがわかりました(引用:「ジャイロスコープを正しい位置に保持する重力はありません」)。ジャイロスコープのみからかなり良い結果を得る方法があるため、詳しく説明したいと思います。それがあなたのアプリケーションにとって十分かどうかはわかりません。あなたと同じハードウェアを使用して得た結果は次のとおりです。このビデオでは、加速度計をまったく使用していません。

より良い結果を得るのに役立つ 2 つのポイントがあります。

1) センサーが完全に水平のままでない限り、次の式を使用して z 軸の回転を取得することはできません。

float gyro_angle_z = gyro_z*dt + get_last_z_angle();

理由を説明するために、これを想像してみてください。ジャイロスコープが x 軸を中心に 90 度回転し、次に z 軸を中心に 90 度回転した場合、z 軸を中心に 90 度だけ回転した場合と同じ結果は得られません。これは、すべての軸の周りの回転を計算してから、z 軸の回転を抽出する必要があることを意味します。x 軸と y 軸を使用しない場合、結果は不正確になります (センサーが完全に水平のままでない限り)。

すべての軸の周りの回転を計算する効率的な方法の 1 つは、クォータニオンを使用することです。クォータニオンについては言いたいことがたくさんあるので、自分で調べて、必要に応じてさらに質問してみましょう。

2) 3 つの軸すべてを使用した後でも、静的なドリフトが発生します。これは、ジャイロスコープが動かなくても完全な 0 を読み取らないためです。状況を改善するために、ジャイロスコープを調整できます。キャリブレーションの簡単な方法は、ジャイロスコープが動いていないときに多数 (100 以上) の値を読み取り、平均ドリフトを計算して、ジャイロスコープが動いているときに測定値から差し引くことです。この後もわずかなドリフトが発生しますが、現在経験しているほど悪くはありません。

MPU-6050 ジャイロスコープと加速度計を使用して得た最良の結果は次のとおりです: http://robokitchen.tumblr.com/post/68626551378/imu-with-gyroscope-and-accelerometer-i-ran-the . ご存知のように、加速度計は x 軸と y 軸を安定させますが、z 軸は安定させません。ただし、z 軸のドリフトは低く、多くのアプリケーションで引き続き使用できます。たとえば、磁力計を使用せず、z 軸のドリフトに悩まされながらも使用可能なクワッドコプターがいくつかあります。

于 2013-12-16T14:18:11.487 に答える