第288話から始めたNXC言語シリーズは,筆者にしてはめずらしく,かなり長続きしている。NXCは以前扱ったNQC言語に比べ変数も関数も,制御文も充実しており,ロボットを動かしながら,プログラミングの基礎を学べる。そのため,高校や高専で初めて触れるプログラム言語として良いのではないかと思う。

 また,ハードウエアであるレゴ・マインドストームもRCXからNXTにバージョンアップしたことで,CPUも8ビットから32ビットになり,精度の高い制御が可能になっている。

 今回のテーマはライントレースにおいて,交差点に到達したと判断することだ。

 ロボットはコースである黒い線に合わせて,右に行ったり,左に行ったりして,交差点に進入する。そして,左右どちらかの光センサーが先に交差する黒い線を読み取る。

 問題なのはその後の処理である。上図の例で言うと,右側のセンサーが黒い線を見つけたあと,左側のセンサーも黒い線を見つけたら,交差点であると判断し,一定時間,右側のモーターを止め,左側のモーターだけを回す。その際,左側のセンサーが黒い線の上に来るのに要する時間が問題になるのだ。

 線にはある程度の幅があるので,交差する角度が一定であれば,50ミリ秒程度経過後に黒い線の上にいればというくらいのアバウトさでも構わないだろう。

 しかし,次の図のように交差する角度が違っていたら,どうだろう。

 一定の時間経過後にもう一方のセンサーが黒い線の上にあるかどうかで判断するわけにもいかないだろう。 では,黒い線が見つかるまでロボットの向きを変えればいいかというと,そういうわけにもいかない。

 上図のように単に角にロボットが来た場合でも,ぐるっと回って交差点であると判断してしまうからだ。では,どうすればいいかというとタイマ処理になる。制限時間を決めて黒い線を見つける処理を作成してみよう。