• 締切済み

ライントレース アルゴリズム

LEGO社のmindstormsを用いてライントレーサを作っています。センサは前方に1つで前輪2つで後輪が1つ。 アルゴリズムは if(センサの色が黒){    左側の車輪を動かす  }else{    右側の車輪を動かす } としますとぎこちない走りになります。 どのようなアルゴリズムがいいのか教えていただけないでしょうか? また点線を走るアルゴリズムも教えてください。 ヒントだけでもお願いします。

みんなの回答

  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.1

回答が付かないようですね。 LEGO社のmindstormsというのがどういうものかは分かりませんが、たしかにその方法だとラインのふちをバウンドするような動きになるでしょうね。 普通に車の運転をしていると考えれば、ライン上のときはまっすぐ走って、そうじゃないときはラインに戻るようにハンドルを切ると思います。 問題は、ラインに戻るときにどちらにハンドルを切る(どっちの車輪を動かす)かを判断できるかどうかです。 センサーは1つしか付けられないのでしょうか。 センサーが二つあれば、ラインを外れたときの時間差を利用して容易に方向を決めることができますが、1つだと難しいと思います。 ラインが1本の直線だけだったら、ラインを外れたとき、それまでにどっちの車輪を多く動かしていたかを判断して、少ないほうを動かすというやりかたが考えられます。 たとえば、1秒前から現在までの左右の車輪の動きを比べて、右が多かったら左を、左が多かったら右を、同じなら2秒前からの動きを比べる、それも同じなら3秒前からの動きを比べる...というように。 しかし、ラインが曲線だったり複数の直線の場合はどっちに曲がっているかは予測できないので、ラインを外れたときにどっちに曲がればいいかは判断できません。車の首を振りながらラインを探すしかないでしょう。ただ、どっちを優先して探すかは、上記の直線の場合を参考にしてもいいと思います。 首の振り幅は試行錯誤しながら適正なものを見つけるしかありません。 点線はさらに難しいでしょう。メモリーが十分にあるならメモリー上に地図を描いて次の点線を予測できるとは思いますが、それでもやはりセンサーは1つしかないというのはネックですね。 もし、mindstormsが上記のようなことができない言語だったらあしからず。 見当違いの回答でしたら無視してください。

関連するQ&A