ソフトの砂場(ライントレース)

最終更新日:1999年05月12日

 床の上に描かれた線をトレースするロボットをシミュレートするプログラムを作ってみました。下図で、青い部分がロボットであり、赤と緑の点は床の線をとらえるセンサーです。このロボットが、黒い線のうえをたどって動きます。

ライントレース実行例

動作

 上図の青いロボットは、センサからの情報を基に、黒い線をたどって動いていきます。センサは、ロボットの前方に3個あり、その下に線がある時は緑色、線がないときは赤色で表示します。

 ロボットは初期状態では左上に下向きで配置されます。ロボットの大きさは、幅10ドット、長さ20ドットで、センサはロボットの先端に付いています。ロボットの初期座標は、ロボットの中心が左上を原点として、(5, 10)に配置されます。

 ロボットの駆動部は中心にあると想定していて、ロボットが回転する場合は、ロボットの中心が回転の中心になります。

 現在実装しているアルゴリズムでは、ロボットが直進状態で3つのセンサの下に線がなければ、ロボットは線を見失ったと判断して停止します。ロボットが回転状態の場合、3つのセンサの下に線がなくなっても、回転動作を続けます。したがって、直角に曲がる線を描いたりすると、ロボットがそこで停止することがあります。。

操作方法

 起動した後、メニューの[ファイル|開く]で、トレースするデータをビットマップファイルで指定します。この指定を行うと、自動的にロボットが初期位置に描画されます。その後、メニューの[実行|起動]を選択すると、ロボットが動作を開始します。

 トレースする線のビットマップファイルは、ペイントを使うと容易に作成することができます。ファイルの種類は、大きさが横500ドット、縦400ドットで、フルカラーのBMPファイルです。トレースする線は、黒(RGBがすべて0)で描画する必要があります。ロボットの初期位置が決まっているので、そこから線を描く必要があります。線の太さは、4ドット以上にしないと、センサが線を検出できないかもしれません。サンプルのデータを添付しているので、参考にしてください。

ダウンロード

雑感

 以前にマイクロマウスがはやった時期があり、その後廃れたのかと思っていましたが、[1]のような雑誌が出るなど、根強い人気があるようですね。このプログラムは、[1]を参考に作りました。

改造

 元のプログラムを作っているときから思っていたのですが、アルゴリズムを後から変更できるようにしてみました。実行プログラムと同じディレクトリにlinetrc.iniというファイルを置いておくと(アーカイブにサンプルを同梱しています)、このファイルからアルゴリズムなどを読みとって動作します。

 linetrc.iniファイルには、サンプルを見ていただければわかると思いますが、初期位置、センサの位置、アルゴリズムを設定できます。アルゴリズムは、ステートマシンで、次のように記述します。

現状態-センサ=方向, 速度, 次状態

センサの値は、左センサの下にラインがあれば1、右センサの下にラインがあれば2、中央センサの下にラインがあれば4となり、複数のセンサの下にラインがあればそれらの値の和になります。例えば、次のように記述すると、現状態1で左センサと中央センサの下にラインがあれば(1+4=5)、反時計回りに7度回転し、標準速の1.5倍で進み、次の状態は状態2になります。

1-5= 7.0, 1.5, 2

 回転は、現在の進行方向からの回転角を、反時計回りを正、時計回りを負の値で記述します。速度は、毎回、標準速の何倍かを記述します。つまり、前回の速度に関わらず、今回の速度として0.8を指定すると、標準速の0.8倍で移動します。

 状態は、初期状態は状態1であり、状態0になると停止します。状態は1〜20の範囲を自由に使えます。サンプルでは、状態1が直進状態、状態2が反時計回りの回転状態、状態3が時計回りの回転状態、状態4〜6がラインを見失った状態で、状態6でもラインを見つけられない場合、状態0になって停止します。

参考文献

  1. ロボコンマガジン No.3, オーム社, 1999

ホーム