光センサの利用
光センサを用いることにより、最初で述べたように、フィールド上に描かれた図形などの色を検出することができる。厳密には、入力する反射光に対応した値(0〜100の相対値)が得られる。
よく用いられるのは、白(淡)色のフィールド上にある黒(濃)色部分の検知であり、プログラムとしては、光センサで読み取った値があらかじめ設定したスレシホールド値より大きい場合、黒(濃)色と判断する。筆者らのチームでは、FLL2005における「難破船のありかを示せ(旗を立てる)」ミッションの攻略に、この光センサを利用した。
このミッションでは、長辺に旗を付けたL字型の棒が、角を支点として回転できるように取り付けられており、これの短辺が垂直になるように数個ずつ3列に並んでいる。短辺を進行方向に押すことにより、L字型の棒が回転し、長辺が垂直になるように起き上がり、旗が立つ。3列の旗を全て立てると満点となるが、部分的に立てても得点が与えられる。
図2の(2)に示すように、旗の列の間には黒色のラインが引かれていることから、このラインをうまく利用する方法が考えられた。
このミッションでまず課題となったのが、ベースを出発したロボットが、旗の列の入口に正確に到達することである。回転センサを使用して、ベースから所定の距離だけ進むという制御方法も考えられたが、かなりの長距離(1m程度)のため誤差が大きくなることと、ベースからのスタート時の方向のブレにより、常にフィールド上の同じ地点に到達できるという保証はないことが問題であった。
そこで、光センサを用いることにより、黒色のラインの端に向かってロボットをスタートさせ、その部分を検出することとしたのである。
なお、光センサは図3の(1)の左下に示すように、ロボット本体の底部に1個を装着した。ただし、光センサとフィールドとの間の間隔により、精度が大きく異なる。試行錯誤の結果、チームメンバの中学生の提案により、フィールド面に垂直ではなくやや斜め方向に装着することとした。光センサの位置としては、ロボットの最前部に装着するのが普通であるが、着脱式のアタッチメントを装着した状態では、ロボット全体の中心に近い位置となってしまい、制御がやや難しくなってしまった。
また、黒色部分の幅に比べてロボットの走行スピードが速すぎると、うまく検知できずに通過してしまう。そこで、プログラムにおいて光センサの値を読み取る時間間隔を調節する必要がある。この調節には当然のことながら、黒色部分へのロボットの入射角(およびそのブレ)をも考慮する必要がある。
(画像をクリックすると別ウィンドウに拡大図を表示します)
ライントレース
「難破船のありかを示せ(旗を立てる)」ミッションの攻略における2つ目の課題は、ロボットを旗の列の間を正確に走行させることである。この解決のために、ライントレースに挑戦した。
ライントレースとは、ロボットの走路面に白黒などのコントラストの明確なラインがある場合、光センサを読み込みながら、ラインのエッジ(白黒の境界)に沿って走行させることである。
その基本的なプログラム論理は、図3の(2)に示すように、光センサの検出・判定結果が黒色ならば、ロボットを白色方向に進ませ(例:右側の車輪の回転を大きくする)、白色ならば黒色方向に進ませる(例:左側の車輪の回転を大きくする)というものである。
この時、上述の黒色部分検出の場合と同様に、センシング時間間隔と方向転換の角度およびロボットの走行スピードとの関係に注意する必要がある。例えば白色を検出・判定して黒色方向に進ませた後、次の光センサの値を読み取る時点でラインの反対側のエッジを超えてしまうと、以降ロボットは右にそれてしまう。
なお、光センサは外部の照明状況(照度、方向、反射の程度)などに対しても影響されやすい。そこで、実際の競技に際しては、競技会場でスレシホールド値のチューニングを行う必要がある。
FLLのミッションでは、ロボットを所望のポイントにいかに正確に移動させるかが、最も重要かつ困難な課題である。このとき、ユーザインターフェース(ロボット操作者の緊張など)も考慮する必要がある。
中世の航海士は、陸地の見えない海洋上で星をみて船の方向を定めたという。航空機は、地上からのレーダー標識と各種センサを用いた制御により、視界が悪い中でも正確に空を飛ぶことができる。車(カーナビ)は、GPSと回転センサやジャイロ(加速度)センサを用いた制御により、正確に自身の位置と進行方向を定めることができる。
マンンドストームには、上記課題の解決のために十分なセンサを利用することはできないが、それ故に工夫の余地が大きい。
以上で紹介した方法は、いずれも筆者らのチームの小中学生が考えたアイデアに基づくものであり、中には、さらに工夫を行い、最終的には紹介した方法とは異なる方法を採用したミッションもある。もちろん、よりよい方法も他にあるだろうと思われるので、読者も挑戦してみられてはいかがだろうか。
なお、NXTタイプでは、物体の認識のために超音波センサを使用することができる。早速試してみたが、精度はあまり良くない。FLLのミッションのように、小さな物体に対しては使えないのではないかと思われる。読者諸氏には試してみられてはいかがだろうか。
今回は、組み込みシステムにおける特徴の1つである、システム内外の環境情報を取得し、その情報に基づいてハードウェアの制御を行うという点に着目し、各種センサを使用したロボットの制御について、FLLにおけるミッション攻略の事例に基づいて紹介した。次回は、組み込みシステムにおけるもう1つの特徴である、ハードウェア/ソフトウェア協調設計に着目し、ロボット制御への応用事例を紹介したい。