6

コンパスを使ってロボットを動かそうとしています。コンパスを使用してロボットを直線的に動かします。2つの車輪を使用しており、動きが少し異なります。そのため、方向として0〜359の値を設定し、現在の方向を確認してエラーを計算し、修正します。エラーのように=current_direction-実際の方向。

問題は、たとえば、初期化方向が90度で、ロボットが45度の場合、エラーは45度になり、修正されることです。0の場合、エラーは90になり、修正されます。問題は、それが0より少し大きく移動し、たとえば359になる場合、エラーは-269になるため、一方の方向に90を移動する代わりに、もう一方の方向に-269を移動することです。

エラーのサインを使用して、方向を固定するために移動するホイールを決定します。それを修正する方法はありますか?

4

4 に答える 4

6
if (error > 180) {
   error -= 360;
}

if (error < -180) {
   error += 360;
}
于 2011-04-05T13:02:11.640 に答える
2

エラーが180°より大きい場合は、360からラックに入れて、記号を反転する必要があります。そうすることで、ロボットが常に最短方向に移動することを確認できます。

于 2011-04-05T13:03:28.527 に答える
1

エラーが180度を超える場合は、補正アルゴリズムを切り替えて、反対方向に移動して補正を計算します。単純なif-elseステートメントで十分です。

于 2011-04-05T13:03:29.360 に答える
1

NXTとマインドストームについてはよくわかりませんが、基本的には円運動でよくある問題です。2つの異なる座標系を使用して、相互に変換することができます。これが最もエレガントな方法です。そうでなければ、符号が負の場合、エラーから360を引くことができますが、それはハックであり、問​​題を解決するためのエレガントな方法ではありません;-)

于 2011-04-05T13:04:10.127 に答える