第286話からの続きである。

 黄色いMINDSTORMS RCXでモーターを二つ使ったロボット・カーを真っ直ぐ走らせるのは,難しいことだった。モーターの回転速度に個体差があるからだ。真っ直ぐ走らせようとしたら,多くのモーターの中から,なるべく回転数が同じものを二つ探さなくてはならなかった。

 ソフトウエア的には,左右のモーターのパワーを微妙に変えて,バランスをとろうとするのだが,なかなかピタリと合わせることはできなかった。

 白いNXTはどうかと言うと,やはりモーターには個体差がある。

緑のライン上にロボットを置いて,次のプログラムを実行する。

 BとCのモーターをフルパワー(100)で1秒間(1000ミリ秒)回すNBCのプログラムだ。

 たった一秒の間に,ロボットはかなり曲がってしまう。へそ曲がりなヤツだ。

 しかし,NXTのモーターはエンコーダ(回転検出器)を仕込んだサーボモーターなので,RCXと違いモーターがどれだけ回転したかを検出することができるのだ。

 NBCではOnFwdReg関数で,サーボモーターのこの機能を使い,複数のモーターをシンクロさせることができる。

 上記のプログラムでは,BとCのモーターを最大速度(100)で回転させ,OUT_REGMODE_SYNC で同期させている。

実行すると,ほぼ真っ直ぐ進んだ。

 また,OnFwdSync関数でも,二つのモーターを同期させることができる。OnFwdSync (OUT_BC,100,0)と第一引数にモーターを,第二引数にパワー,第三引数に回転比率を指定する。第三引数の値が0のときは直進だ。

 少し曲がっているのは,ソフトウエアの問題ではなくて,RUNボタンを押すときにロボットの向きを少し傾けてしまったせいだろう。

 第三引数の値を100や-100にするとその場所でスピンする。マイナスを付けると回転方向が反対になるのだ。25などとすると,ぐにゃーと曲がる。

 NBC言語ではOnFwdReg(OUT_BC,100,OUT_REGMODE_SYNC)やOnFwdSync関数を使うと,回転数を測ってNXTのモーターを同期させることができるので,より正確にロボットをドライブすることが可能になるのだ。

つづく