フォトセンサによるライントレース
1 フォトリフレクタの取り付け
1-1 フォトセンサとは
1-2 フォトリフレクタモジュールTCRT5000
1-3 フォトリフレクタモジュールの取り付け
2 ライントレース
2-1 2つのセンサでライントレース
3 3つのセンサでライントレース
3-1 センサ配置1
3-2 センサ配置2

ロボット講座の12回目・13回目です。2週間にわたって、フォトセンサの取り付け、調整、ライントレースプログラムの作成とライントレースに挑戦しました。

前回までは超音波センサを使って、左右や正面にある壁を回避して走行させ、壁に囲まれたクランクを自動走行させることを目標にロボットカーを制御しました。
今回から、床面に引いた黒い線を認識して、この線に沿って走行するライントレースに挑戦していきます。
1 フォトリフレクタの取り付け
1-1 フォトセンサとは
フォトセンサは文字通り光を感じるセンサです。光の有無、強さ、種類などを検知して、物体の有無や距離、色など様々な情報を取得します。当然フォトセンサは光がないと情報を得ることが出来ません。市販されているフォトセンサには大きく分けて次の2つのタイプがあります。

通り抜けてきた光を検出するのか、反射してきた光を検出するのかの違いで、光を発する部分が光を検知するセンサと分離されているか一体となっているかなどの違いがあります。今回は外部から入ってくる光の影響を避けるため赤外線フォトセンサを使いますが、色を判別する場合などは可視光を利用します。
1-2 フォトリフレクタモジュールTCRT5000
反射型のフォトリフレクタモジュールTCRT5000を使用しました。投光部から発した赤外線が、床の黒いラインと白い部分を検知し、ロボットカーを走らせる眼になります。

フォトリフレクタモジュールTCRT5000はライントレースロボットや物体の接近検知で非常によく使われる定番の赤外線センサです。感度調整ボリュームがついていて、ドライバーで回すだけで「どのくらいの距離でセンサを反応させるか」を調整できます。
デジタル出力(DO)もあって、コンピュータ側で複雑な計算をしなくても、「物体があれば1、なければ0」という信号を直接受け取れることができます。また、 反射光を検知したときに光るLEDが基板上に載っていて、テスターがなくても正しく動作しているか一目でわかります。
配線も楽で、 電源(VCC)、GND、信号(OUT)の3〜4本のピンを繋ぐだけで動作します。
今回のライントレースは白い板面にある黒い線を感知して、その線に沿って動くロボットを製作しようとしているので、インジケータLEDが消灯し、モジュールの出力端子D0がハイであれば、黒い線上にセンサーがあることがわかります。感知の調整を可変抵抗で行います。
1-3 フォトリフレクタモジュールの取り付け

TCRT5000センサを5V電源とし、センサ出力を分圧してGPIOピンに入力する予定でしたが、3.3V電源でも対応できることと、使用電流も50mA以内に収まると考えられるので、5V電源は使用しないこととしました。センサモジュールは次の手順で取り付け、調整を行いました。
①センサの場所は後で調整することとし、シャシーの下の適当な位置に投光部と受光部が床面から2.5mm~10mm程度離れるように取り付ける。
②センサの下に黒いテープを貼ったハガキをセットする。
③ラズパイの電源を入れる。
④下のハガキの黒テープがセンサを横切ると、LEDインジケータが消えることを確認する。
⑤床面に黒いテープをつけたはがきを置き、その黒いラインの上にくるとLEDインジケータが消えるように可変抵抗を回して調整する。そのとき、多少車輪ががたついても安定して反応できるように微調整する。
その際、取り付け高さがとても重要で、一つ一つのセンサの感度を確認して、取り付け軸にワッシャーを入れて高さを調整する。
⑥次にプログラムでしっかり動作できているか確認する。

2 2つのセンサでライントレース
赤外線フォトリフレクタは赤外線を発信して、その反射光を受信しています。環境に赤外線を発するものがあるとセンサに影響を与えます。太陽光や白熱電球などの下では、対策が必要になります。蛍光灯も量は少ないものの赤外線を含んでいて、交流電源を使っているため、フリッカー(ちらつき)を生じています。このため、赤外線受信モジュールが誤検知する可能性があります。LED照明は赤外線をほとんど含まず、フリッカーも少ないため、赤外線フォトセンサへの影響は小さくなります。環境も考慮しつつ、センサをどの位置に取り付けるか考えました。

左図を参考に、センサの取り付け幅を検討しました。
・Aのようにセンサ間隔を狭くした場合、ラインからはずれにくいけれど、センサのon・offがはげしく、その分、速度が遅くなります。
・Dのようにセンサ間隔が広いと、on・offは少ないけれど、ジグザグ走行となる。
・一般的にはセンサの中心間距離がライン幅の1.5~2.3倍程度が適切といわれています。

次に、センサの取り付け位置を考えました。車軸からの位置Lの寸法が大きい場合、車輪の少しの動きで、センサがラインを離れたり、近づいたりするので、細かな動きでラインをとらえやすくなりますが、暴走しやすくもなります。
Lの寸法が小さい場合は、車輪が大きく動かないとラインをとらえにくく、細かな動きが出来ず、ジグザグ走行になります。
そこで、一般的には車輪幅の1/3~3/4程度が適切とされています。


コースは直線と半径25cmのカーブで作られているので、まずは直線コースと半径25cmの円弧をうまく走行できるかどうか確かめました。プログラムの●●の箇所を各自のロボットカーに合わせたデューティ比を入れ、モーターの出力を加減しました。

実際のコースを確実に走行できるようにいくつかのケースを想定してプログラムを作成しました。左側の図のようにAからBに移動して、左側のセンサがラインを踏んだ時、どのくらいの曲がりを指示したらよいでしょうか。
ラインが直線と分かっていればよいのですが、直線とカーブが混在する場合は、カーブを中心に考える必要があります。
さまざまな場合の必要なデューティ比を調べておけば、そのデータを活用して的確な指示ができます。①センサが確実に動作しているか確認する、②速度を遅くする、③センサの間隔を調整する、④stop や brake を入れてみる など試行錯誤しました。


3 3つのセンサでライントレース
より正確にライントレースを行うために、フォトリフレクタモジュールTCRT5000を3つ取り付けることにしました。センサの取り付け検討しました。


センサ配置の違いによる長所短所は表のとおりです。センサの数を増やして、Aの方式で車輪のかなり前に配置すれば、事前に曲がり角度が把握できて、スピードも調整しやすくなりますが、センサ3つでも、on・offで制御するのではなく、アナログ的に受光量を確認して制御する場合はA方式で問題はないと考えられます。5連のセンサユニットも販売されていて、これを使用したロボットカーも製作されていますが、今回は3つのセンサを、ラインの先取りのしやすさを考慮してB方式である中央センサを前に出す配置で行いました。いろいろな方法があるのでいろいろ確かめてどの方式がよいか考えることが大切です。

中央のセンサをどの程度前に出したらよいかは、ロボットの性能や速度によって変わります。スピードを速くすると、その分、惰性で動く量も多いため、曲がり切れずにラインを外れてしまうので、プログラムでは、中央のセンサが黒いラインからはずれたら、スピードを落とし、曲がりやすくする工夫をしました。
中央のセンサがラインからはずれた場合、コンピュータはどちらへ曲がればよいかわからりません。カーブラインが次にくるぞと認知できる状態まで進んで、やっとどちらに曲がればよいか理解できるようになります。であれば、2つのセンサだけと同じではないかと疑問が生じます。では、何のために中央のセンサを付けるのか考えてみましょう。


実際にコースを走らせてみました。ジグザグ走行をしたり、コースを外れたり、実際に走らせるとなかなかうまくいきませんが、その都度調整していくと次第にきれいに走行するようになりました。まだまだプログラムの工夫が必要ですが、完成に大きく近づきました。

