タイマの利用
ロボットを所望の位置まで移動させる方法としては、タッチセンサの利用が最も確実である。タッチセンサは、前方あるいは後方に配置して壁などの障害物にぶつかったことを検知するために用いる。タッチセンサにより、壁などの基準となる物体への接触/衝突を検出してロボットを停止し、方向転換する。
しかしながら、壁などの障害物が存在しない場合には、タッチセンサを使用することはできない。では一般にロボットを所望の位置まで移動させる方法には、どのようなものがあるだろうか。
ロボットを所定の距離だけ移動させる方法はいくつかあるが、そのうちで最も簡便な方法は、タイマを用いるものである。
すなわち、ロボットのスピードをv、走行時間をtとすると、距離l=vtだけ移動することができる。プログラムとしては、vのスピードでモーターをスタートし、tの時間が経過した後ストップする。ただし、プログラムはロボットのスピードvの値をそのまま使用することはできず、モーターのパワー値を指定することができるだけである。
そのため、モーターのパワー値に対応するモーター軸の回転数を算出した上で、モーター軸とタイヤ軸とをつなぐギアの歯数比やタイヤの直径をもとにロボットの速度を計算する必要がある。ただし、実際にはロボットを動かしてみてその速度を測定することが多い。
ところが、電源電圧の変動や走路面の悪状態が原因のスリップなどにより走行状況が安定しないため、タイマを用いる方法では誤差が生ずる。そして、この誤差は走行距離が長くなればなるほど無視できなくなる。したがって、誤差がほとんど影響しない特別なケースを除き、所定距離の走行のためにタイマを用いることはない。
タイマを用いるケースとしては、先に例として挙げたクレーンを昇降する場合や、図2の(1)に示すFLL2005における「潜水艦を船体から海に降ろせ」ミッションの攻略のように、ロボットを壁に押し付けて進行方向の補正を行う場合など、ロボットの走行距離とは関係ない場合が基本である。
(画像をクリックすると別ウィンドウに拡大図を表示します)
回転センサの利用
ロボットをより精確に移動させるためによく用いるのは、回転センサである。通常、走行距離を測定するために、回転センサを車輪の軸に接続する。
RCXタイプの回転センサでは、360度を16段階(1段階は22.5度)に分割している。回転センサを車輪の軸に接続した場合には、読み取って得られる値aとタイヤの直径dから、計算により走行距離l=dπ×(a/16)を得ることができる。もちろん、実際にロボットを手動で動かしてみることにより、移動距離に対応した回転センサの増加値を得ることもできる。
なお、NXTタイプでは、回転センサはモーターのコンポーネントに組み込まれている。すなわち、モーターの軸に回転センサが接続されていることになり、得られる値はモーターの回転数である。したがって、ギア比とタイヤの直径とから、計算により走行距離を得ることになる。ただし、精度は格段に向上しており、1度刻みの回転数値が得られる。
筆者らのチームでは、図2の(1)に示す初期移動において、回転センサを用いた。プログラムとしては、回転センサの値をクリアした上でロボットを走らせた後、回転センサを読み取った値が、あらかじめ計算(あるいは実測)により得られた値より大きくなった時点で停止するように組む。
回転センサを用いる方法は、タイマに比べて誤差は少ないが、フィールド面の状態やロボットのスタート位置のブレが精度に影響する。また、何らかのトラブルによりタイヤが回転できなくなってしまった場合、回転センサの値のチェックのみで停止の要否を判断するような論理にしていると、制御不能に陥るリスクがある。
このようなリスクを回避するため、タイマと併用することが多い。つまり、回転センサの読み取り値に基づく判断において一定時間以上ロボットが停止しない場合には、何らかのトラブルが発生したとみなして、強制的に停止させるのである。
ところで回転センサは、一次元の制御、すなわちロボットの進行方向(前後)の移動の制御にしか使用できない。しかし、実際にはロボットの進行方向の左右についても、精度よく制御できなければならない。例えば、図2の(2)のように、フィールド上の特定のポイントにロボットを移動させたい場合には、前後・左右の二次元を考慮する必要がある。このようなケースにおいて利用可能なものとして、光センサがある。 次のページ