2024年11月12日
004-2.ライントレース入門-第5回「十字のコースを進む」
「ライントレースロボット」とは、床面にある線(ライン)を追いかける(トレースする)ロボットのことです。こうしたロボットには「入力」と「出力」という制御の基本が詰まっている(なおかつ奥が深い)ので、ロボット競技の世界では定番の要素となっています。
このコーナーでは、「教育用レゴ マインドストームNXT(以下、NXT)」を使ってライントレースロボットを作り、制御することの面白さをお伝えしたいと思います。(文/松原拓也)
◆ コースとロボットの作り方
今回はさらに難易度を上げて、「十字のコース上を走るロボット」を作ってみたいと思います。交差したラインはロボット競技の世界でもよく登場しますので、競技に参加する予習として考えてみてもいいかもしれません。

まずは、コースを作ります。
A4の紙を用意して、次のpdfファイルを印刷します。
[Download]印刷用シート(pdfファイル)

続いて、ロボットを作ります。
ロボットは第4回目に登場した「三輪型ロボット」の改良版をそのまま使います。
2つのモータは出力ポートのBとCにつなぎます。光センサは入力ポート3につなぎます。

ロボットの裏側です。写真を参考に組み立ててください。

コースにロボットを置いてみました。これで準備OKです。
◆ 十字の検出

今回は、ロボットを十字路まで進ませてみたいと思います。
ただ、ラインをトレースするだけではなく、「ラインが十字に到着した」ということを認識しなくてはいけません。

前回、使った直角のコースです。
プログラムでは「コースの直角に到着した」ことの合図として、光センサの反応を大きくなることで検出していました。

今回はその逆として、光センサの反応が小さくなる(黒いエリアに入った)ことで、「ラインが十字に到着した」と検出したいと思います。

前回作成した「直角のコースを走る」プログラムです。
ラインのトレース部分は前回のものをそのまま使います。
青ワクは、直角を検出してから「90度せん回」を行っている部分です。

青ワクの部分を移動ブロックの「停止」、そして、待機ブロックの「NXTボタン」にしました。これは、きちんとコースが認識できるかテストするためのものです。
そして、赤ワクの「比較ブロック」を書き換えます。
「7よりも大きいか」という比較の条件を、「-7よりも小さいか」に修正しました。これで、光センサが十字に入ったことを検出できるはずです。
[Download]ライントレースロボットのプログラム1(NXTソフトウェア1.0で作成)

では、プログラムを実行してみましょう。
、、、ロボットが十字に入ったところで止まりました。成功です。

今度は十字部分をまっすぐ通り抜けたいと思います。
ラインの赤い丸の部分を読み飛ばす必要があります。

読み飛ばす方法としては、ラインの幅のぶんだけモータを回してしまうことにしました。
[Download]ライントレースロボットのプログラム2(NXTソフトウェア1.0で作成)

先ほどのプログラムで、停止していたところを直して、前進するようにしました。
前進する距離はサバを読んで、多めにして40mmとしました。モータの回転角度は、タイヤの円周を176mmとすると約82度になります。

プログラムを実行した様子です。
見事、直進することができました。
◆ 十字の検出

、、、以上で、十字のコースは走破できたかと思ったのですが、少々問題がある点に気が付きました。
十字部分を渡っている最中、たまにコースアウトをしてしまいます。トレースに失敗しています。

失敗する原因は、ロボットの進む角度にあるようです。
ラインに対してまっすぐ進んでいれば問題ないのですが、少しでも傾いていると、十字を渡り終わったあとラインからズレで復帰できなくなってしまうようです。

そこで、ラインから多少ズレても戻れるようにしなくてはいけません。
考えられる方法として、光センサを2つにしてみました。こうすると、読み取る範囲が広がるので、コースに復帰しやすくなるはずです。
このプログラム方法については、次回に紹介します。
当ブログの内容は、弊社製品の活用に関する参考情報として提供しております。
記載されている情報は、正確性や動作を保証するものではありません。皆さまの創意工夫やアイデアの一助となれば幸いです。