久しぶりのNXTねたです。
レスキューのロボットは、被災者を発見したあとに、再び黒線をたどるために、ロボットを回転させて黒線を見つけるチームが多いです。
「M&Y」もそうしています。
そのために、普通は左右のモータをお互いに逆回転して、その場で旋回します。(これを「超信地旋回」と言うらしいです。)
もし、左右に回転しても黒線が見つからないときには、再び最初の姿勢になるようにしているようなのですが・・・きちんと前を向きません。
タイヤと床がスリップしているというのも、原因の一つとは思いますが・・・
単純な話、右に90度回転、左に180度回転、右に90度回転したときに、もとの方向に向いていなければなりません。 しかし、やっぱりちょっとズレます。
どうも、NXTのモーターにも、「個性」があるようです。
左右のモーターの同期を取って真っ直ぐ前に進むのは
OnFwdSync( OUT_AC,75,0 );
とするか、進む距離が決まっていれば
RotateMotor( OUT_AC,75,1080 );
とすれば、まあまあ真っ直ぐに進みます。
ところが、左右のモーターを逆回転させる「超信地旋回」をやると、とたんに回転数が合わなくなります。
調査の結果、同期を取って真っ直ぐ進むを指定した場合には左右のモータの回転角度は0.1%程度のズレです。 しかし、同期を取って「超信地旋回」をすると、14%もズレてしまいます。
やっぱNXTはその程度か!
ロボットを持ち上げて、「超信地旋回」を実行すると、左右の回転数は、ほぼ同じになります。
つまり、「同期を取る」指定で回転させても、モーターに負荷が掛かると、単に回転量が少なくなります。 片方のモーターの回転量が少なくなったとしても、もう片方はそれには合わせないよ。 ということみたいです。
いろいろ実験した中では、「超信地旋回」に有効なのは、「同期を取る」のではなくモーターのスピードを一定に保つ指定でした。
OnRevReg( OUT_A,75,OUT_REGMODE_SPEED );
OnFwdReg( OUT_C,75,OUT_REGMODE_SPEED );
こうすると、左右の回転角度は、2.5%のズレでした。
2009.6.7追記
表題を超信地回転から超信地旋回に変更しました。