今回のノード大会ではNXTで挑戦したMですが・・・
新しいことに挑戦したMに、いくつもの障害が立ちふさがりました。
何でもないライントレースで誤発見したり、坂道を転げ落ちたり・・・つい、先日はモーターパワーを100にしたらバグり、50にしたら正常に動く・・・という、もうどうにでもしてくれ状態です。
そういえば、ロボット杉並21のロボット競技会でNXTマシンで参加したYに、審判からインタビューで「モーターのサーボ機能を使用していますか?」と質問があったのですが、Yは「サーボ」という言葉が分からずに、首をひねって「使っていません」と答えました。 メンターの私ですら、使い方を知りませんでした。
このモーターの使い方です。
Mはロボットを直進させると、必ず右に曲がることに気が付きました。
単に、右のモーターの方が弱いようです。
ですので、直進するときに、左のモーターパワーを少し弱めて設定していました。
OnFwd( OUT_A,70 );
OnFwd( OUT_C,75 );
こんな、感じです。
私も、「NXTは簡単に回転スピードを調整できるからすごい」などと考えていました。
しかし、それだけじゃないんです。
2つのモータを同期させて回転することができるんです。
こんなプログラムを作ってみました。
task main()
{
int ra,rc;
ResetTachoCount( OUT_AC );
OnFwd( OUT_AC,75 );
Wait(4000);
Off( OUT_AC );
ra=MotorTachoCount( OUT_A );
rc=MotorTachoCount( OUT_C );
ClearScreen();
TextOut(0,LCD_LINE1,"A=");
NumOut(16,LCD_LINE1,ra);
TextOut(0,LCD_LINE2,"C=");
NumOut(16,LCD_LINE2,rc);
Wait(4000);
}
4秒間直進して、左右のモーターの回転数を表示します。
やってみると、
A=2113
C=2053
と表示され、A(左)のモーターの方が多く回っていることが分かります。(右に曲がる)
次にモーターの記述を
OnFwdSync( OUT_AC,75,0 );
に変えてみると。
A=2037
C=2040
と、ほとんど変わらなくなります。(真っ直ぐに進みます。)
たったこれだけのことですが・・・感動です!
(同期を取ると、同じ時間でも進む距離が少なくなりますね。)
ロボットを真っ直ぐ進ませる・・・このごく当たり前のことができなかったのですが、それを簡単に実現してしまえるNXT恐るべしです。