5

私は車両制御に取り組んでおり、9DOFセンサー(加速度計、磁力計、ジャイロスコープ)を使用しています。ヨー角については、ピラジアンで不連続性の問題があります。(180度)。PIDコントローラーで車両を制御していますが、車両が180度以上回転すると、符号が突然変化し(180から-180)、コントローラーの動作がおかしくなります。-180度以上回転しても同じ問題が発生します。

方法として、方向余弦行列を使用してオイラー角を計算しています。(sparkfunセンサーの推奨方法。)

私の質問は、どのようなアプローチを使用すべきかということです。PIDコントローラーを使用してヨー角を制御する場合のこの不連続性への対処方法。

4

2 に答える 2

1

私は同じ問題を抱えていて、次のことをしています:

#define MOD(a) ((a > 180.0) ? (a - 360.0) : ((a < -180.0) ? (a + 360.0) : a))

2 つの角度の差は、このような式で単純に -180d/+180d に戻すことができます。

于 2013-01-03T20:36:52.147 に答える
0

これはあなたの問題ですか?

After desired angle changes it's sign(ie. 180->-180) 
then suddenly control input(ie. P * error) becomes bigger.

例えば。

--------------------------------
|  desired  |  real  |  error  |
|-----------|--------|---------|
|    170    |   160  |   10    |
|   -170    |   160  |  -330   |
--------------------------------

あなたの問題が私が理解したのと同じなら、これはどうですか? 先に進む前に、すべての角度値が [-pi,pi] の範囲内にあると想定されていることに注意してください。

error = desired - real;
if(error > 180)
   error = error - 360;
else if(error < -180)
   error = error + 360;
else
   error = error;//do nothing

この方法では、常に制御入力が小さくなる方向を選択します (方向には 2 つの選択肢があることをご存知でしょう)。

于 2015-07-06T07:52:48.570 に答える