各種センサとその基本的使用方法
LEGOのロボットから組み込みシステム開発について学ぶ本連載であるが、第2回の今回はハードウェア制御について取り上げる。
組み込みシステムにおいては、システム内外の環境情報を取得し、その情報に基づいてハードウェアの制御を行うことがよくある。
この時のハードウェア制御では「時速3.6kmで1mだけまっすぐ走って停止せよ」といった、いわゆる「高レベル」のインターフェースが利用できる訳ではなく、例えば「左右のモーターを同時に1秒間だけ前方回転した後に停止せよ」といった「低レベル」の直接制御を行わなければならないことが多い。特に、ロボットのような自律動作を行うシステムにおいては、期待通りの動作をさせるために、これを的確に行うことが求められる。
今回は、FLL(FIRST LEGO League)のロボットにおいて環境情報の取得のために使用可能なセンサについて説明するとともに、それらのセンサを用いてロボットの動作をうまく制御するためのプログラム論理について述べる。
LEGOのマインドストームでは、3種類のセンサが用意されている。1つ目が「タッチセンサ」で、物体への接触(contact)を検出するもので、オン/オフの値が得られる。2つ目が「回転センサ」で車軸の回転数の累積値を得るものだ。角度センサとも呼ばれ、主に走行距離の測定のために利用される。
3つ目は「光センサ」で、内蔵のLEDから発せられた光の反射光に対応した値(0〜100の相対値)を得るものだ。主な用途は、フィールド上のスポット検出であり、例えば白色のフィールドに黒色の部分があると、これを検知することができる。
また、センサではないが「タイマ」はロボット内部の状態情報を得てプログラム制御に使用することができる。「タイマ」は所定時間だけモーターを回転させるためなどに使用する。「電源電圧」の詳細は第4回で説明するが、マインドストームのコントローラーでは電源電圧の変動があり、これがモーターの回転に影響する。その結果、ロボットの走行距離の制御上無視できないことがある。その場合に、電源電圧の値を使用して、厳密な制御を行うことができる。
それでは、FLLでのロボット制御において、これらのセンサを有効活用した事例を紹介しよう。
(画像をクリックすると別ウィンドウに拡大図を表示します)
タッチセンサの利用
FLL2006のミッションのうち、「個々の原子操作」と呼ばれるものがあった。これは、第1回で紹介したが、図1の(1)に示すように、不安定な平板台の上に並べられた、背の高い白色と低い赤色の原子(ブロック)各8個が交互に並んだ配列のうちから、3個以上の白い原子を台から落とすものである。ただし、赤い原子を落とすと、無得点となるので、白い原子の上方部を押してやる必要がある。
このミッションの効果的な攻略方法をチームメンバのある中学生が考案した。それは、図1の(2)のように上部にクレーンを装備したロボットを用いて、台の近くまで移動した後、図1の(3)のように原子配列の間にクレーンを降ろしてその先端に付けたアームを前後に動かすことにより、白い原子だけが落ちるようにするというものである。アームを前後に動かすのは、ロボット本体を前進・後退させることにより行う。
ここでのポイントは、いかに正確に原子配列の間にアームを降ろすか、ということである。白い原子間の間隔は2cm程度であり、この間に0.5cm程度のアームがうまく入るように、ロボットの本体を移動させる必要がある。図1の(1)に示すように、ベースからは1m程度の距離があり、高精度を確保することは難しそうである。
彼が考案したこの課題を解決する方法は、タッチセンサを用いるものであった。
図1の(2)に示すように、ロボットの前方下部に取り付けられたカギ型の突起が、原子の並ぶ台の下部と接触すると、それが上方に伝えられ、ロボットの上部に据えられたタッチセンサが押されることになる。
プログラムとしては、ロボットを前方に進ませた後、タッチセンサの「オン」を検出すると停止するように組む。その後、所定の距離だけ、ロボットを後進して停止させる。ここで、ロボット上部に据え付けられたアームを降ろし、まず前進することにより奥の原子を押し倒し、次に戻る時に手前の原子を引き倒すのである。
このように、タッチセンサの利用により、台から思い通りの距離の位置にロボットを移動させることができる。ただし、適当な障害物がない場合には、タッチセンサを使用することはできない。それではどうするか。 次のページ