2024年12月17日

013-1.EV3ライントレース入門-第4回「カラーセンサーを2つ使ったライントレース」

この連載では「教育版レゴ マインドストームEV3基本セット」を使ったライントレースロボットの作り方を紹介していきたいと思います。ライントレースロボットはその名のとおり「線(ライン)を追跡(トレース)」するロボットのことです。(文/松原拓也)

◆ EV3カラーセンサーを2つ使う

今回はEV3カラーセンサー(反射光モード)を2つ使ったライントレースを行ってみます。前回のロボットを用意して、さらにカラーセンサーを1つ追加します。
カラーセンサーを2つ使うことには次のようなメリットがあります。
・測定範囲が広くなるので、コースアウトしにくくなります。
・明るさを差で判断するので、周りの明るさに影響されなくなります。
・ラインが無い状態や十字路で直進させることができます。
・ラインの中心を走るので、バランスが良くなります。
というわけで、良いことがたくさんあります。逆にデメリットとしては追加のカラーセンサーを入手しないといけないことと入力ポートを1つ使ってしまうことです。

カラーセンサーをロボットに取り付けると、このような感じになりました。
右側のカラーセンサーをポート1、左側のカラーセンサーをポート4に接続しています。

カラーセンサーの設置場所ですが、カラーセンサーはライトの中心ほど感度が優れています。このため、図のようにライトの中心を白/黒の境界に合わせるのが理想です。

実際に取り付けてみるとビームの幅の都合により、ぴったり境界に合わせることができませんでした。
これはしかたないので、あきらめます。
あと、取り付けてみて気が付きましたが、カラーセンサーのライトの光の範囲が左右で違っています。これも製品の個体差なので、あきらめます。

◆ カラーセンサーの特性を調べる

せっかくロボットが完成しましたが、カラーセンサーの特性を調べる必要がありますので、いったんカラーセンサーを90度横向きに変えます。
センサーの向きは写真のような状態になります。

カラーセンサーの特性を調べるためのプログラムを作ります(linetrace1.ev3)。
3つのループを同時に実行します。上段のループはロボットを10cm進める処理を行います。中段と下段のループはカラーセンサーを測定してグラフを描く処理を行います。

プログラムを実行すると、このようにロボットが10cmだけ進んで止まります。

画面にこのようなグラフが描かれました。
グラフの横軸は「時間」です。測定時間は8秒間です。 グラフの縦軸はカラーセンサー(反射光モード)の値です。 上のグラフが左側のカラーセンサー、下のグラフが右側のカラーセンサーです。
このグラフを見ると、左右のカラーセンサーがラインを通過したタイミングが分わかります。
あと、0.5秒おきぐらいに測定値にノイズのようなものが混ざっていますね。これは何が悪いのでしょうか。原因が不明なので、今回は気にしないことにします。

◆ カラーセンサーの差分を計算する

続いて、先ほどのプログラムを改良します(linetrace2.ev3)。 右側のカラーセンサーを「プラス要素」、左側のカラーセンサーを「マイナス要素」として考えて測定値の差を求めます。この差のことを「差分」と呼ぶことにします。処理としては数学ブロックを使って、「右カラーセンサーの値 - 左カラーセンサーの値」という引き算をするだけです。ここではグラフに描く必要があるため「64」を足しています。
結果、中段と下段にあった2つのループを1つに合体させることができました。

先ほどと同じようにライン手前にロボットを置いて、プログラムを実行すると、このようなグラフが描かれます。
波のような曲線が描かれました。グラフの横軸は時間。グラフの縦軸は右左のカラーセンサーの差分です。値が「0」の状態は、右左のカラーセンサーが釣り合った状態。つまり、「ラインの中心に位置している」ということになります。他にも床面が「真っ白」、もしくは「真っ黒」でも値は「0」になります。

カラーセンサーの差分を求める仕組みを図にしてみました。
左カラーセンサーの値をマイナス要素にするため、グラフを上下に反転します。そして、右カラーセンサーの値と足し合わせます。合計した結果が一番下のグラフです。 2つの値を足すことでセンサーの感度が2倍になります。

◆ ライントレースのプログラム

カラーセンサーの差分を求める方法をライントレースに応用したプログラムがこちらです(linetrace3.ev3)。
数学ブロックの計算式は「-(a-b)*c」です。「a=右カラーセンサーの値」「b=左カラーセンサーの値」「c=ゲイン」なので、当てはめると「-(右カラーセンサーの値 - 左カラーセンサーの値)*ゲイン」という意味になります。ゲインというのは計算に使う一定の値のことです。
カラーセンサーが1つの時に比べて、感度が2倍に上がっていますので、調節するためゲインを以前の半分(6→3)にしました。ゲインが大きすぎると蛇行してしまいます。

プログラムを実行すると、ロボットがスムーズにラインをトレースします。以前はラインの境界を走っていましたが、今回からはラインの中心を走っています。
コースにはシートの折り曲げで生じた段差がありますが、こうした段差は2つカラーセンサーで読み取ると差分は変化しません。そのため、ブレずにそのまま直進することができます。

グラフの表示結果です。
今回はプログラムをシンプルにしたかったので「ステアリング」ブロックを使っています。しかし、「Lモーター」や「未調整のモーター」を使ったほうが素早く床面に反応できると思います。ゲインの値も変更してみてもいいでしょう。さらに改造してみてください。

[DOWNLOAD]今回作成したプログラム(教育版EV3ソフトウェア用)
[movie]EV3ライントレース入門動画(Youtube)

当ブログの内容は、弊社製品の活用に関する参考情報として提供しております。
記載されている情報は、正確性や動作を保証するものではありません。皆さまの創意工夫やアイデアの一助となれば幸いです。