NXTのモ-ターはサーボ機能が内蔵されていて、回転数(回転角)を指定することができます。
それだけでも・・・凄い!
NXCでは、RotateMotor( ) や RotateMotorEx( ) 等で制御することができます。
また、モーターの回転角の状況を MotorTachoCount( ) で読み出すこともできます。
さらに、RotateMotorEx( ) では、ハンドル(ステアリング)を指定することができて、0なら直進
20なら右に曲がる(-20なら左に曲がる)というように指定できます。
例えば
RotateMotorEx(OUT_AC,-60,360,0,true,true);
を実行すると、タイヤ一回転分、真っ直ぐ前進します。
RotateMotorEx(OUT_AC,-60,360,20,true,true);
を実行すると、前進しながら右に曲がります。
じゃあ、
RotateMotorEx(OUT_AC,-60,360,20,true,true);
RotateMotorEx(OUT_AC,-60,360,0,true,true);
このように、連続して実行するとどうなるか・・・
普通に考えれば、前進しながら右に曲がって・・・その後に直進するハズです。
でも、なぜか、そうなりません。
実際にやってみると、前進しながら右に曲がって・・・ここまでは予想通り・・・
突然左回転しはじめ、左に曲がりながら前進します。
(ロボットの機体は最初と、ほとんど平行に戻ります)
な~ぜ~!?
ちなみに
RotateMotorEx(OUT_AC,-60,360,20,true,true);
Wait(100);
RotateMotorEx(OUT_AC,-60,360,0,true,true);
このように、2つの命令の間にWait文を入れると、想定どおりの動き(前進しながら右に曲がり、その後に直進)になります。
な~ぜ~!?