先のプログラムを改良して、コースアウトを防止する機能を盛り込んだのがこちらです。
処理を増やしたので、かなりの超大作になってしまいました。
[DOWNLOAD]作成したプログラムその5(NXTソフトウェア用)
プログラムには3つの変数が必要です。これらはすべて「ロジック」という形式で、「正」と「偽」の2種類のうちどちらかが入ります。
プログラムは長いので、3つに分割して紹介します。
序盤の1/3です。
変数の初期化のあと、モーターを回してロボットの右旋回または
左旋回を行います。
中盤の2/3です。
白検出または黒検出をしています。 検出が終わると終了フラグが「正」になります。 タイマーのスイッチがコースアウトの判定処理です。もし、1秒以内に白/黒の境界を検出できない場合には
強制的にループを終了させます。こうすると、白/黒を探し続けて
旋回しすぎるということがなくなるはずです。
終盤の3/3です。
白検出←→黒検出のフラグを反転します。そして、白検出が終了したタイミングで、左右の旋回フラグを反転します。こうすることで線の上をジグザグに進むことができます。
実際に動かしてみました。コースアウトすると、自動的に旋回の
向きが戻ります。
ただし、戻りの量が足りず、脱線したラインに復帰できなくなる
ケースが多いようです。もう一工夫が必要です。
意図的に機首を左右に振るようにしてみましたが、移動の効率はあまり向上していないように思えます。
速くて確実なロボットを作るのは難しいなと思いました。
ロボットをさらに改良するアイデアを紹介します。参考にしてみてください。