ロボジョイちゃれんじ教室

2-1 NXT ソフトウェア入門

第4回 ライントレースのプログラム

◆プログラムその5

先のプログラムを改良して、コースアウトを防止する機能を盛り込んだのがこちらです。
処理を増やしたので、かなりの超大作になってしまいました。

[DOWNLOAD]作成したプログラムその5(NXTソフトウェア用)

プログラムには3つの変数が必要です。これらはすべて「ロジック」という形式で、「正」と「偽」の2種類のうちどちらかが入ります。

  1. 変数名「ロジック1」:偽=白を検出/正=黒を検出
  2. 変数名「変数_1」:偽=検出中/正=検出終了
  3. 変数名「変数_2」:偽=左旋回/正=右旋回

プログラムは長いので、3つに分割して紹介します。

序盤の1/3です。
変数の初期化のあと、モーターを回してロボットの右旋回または
左旋回を行います。

中盤の2/3です。
白検出または黒検出をしています。 検出が終わると終了フラグが「正」になります。 タイマーのスイッチがコースアウトの判定処理です。もし、1秒以内に白/黒の境界を検出できない場合には
強制的にループを終了させます。こうすると、白/黒を探し続けて
旋回しすぎるということがなくなるはずです。

終盤の3/3です。
白検出←→黒検出のフラグを反転します。そして、白検出が終了したタイミングで、左右の旋回フラグを反転します。こうすることで線の上をジグザグに進むことができます。

実際に動かしてみました。コースアウトすると、自動的に旋回の
向きが戻ります。
ただし、戻りの量が足りず、脱線したラインに復帰できなくなる
ケースが多いようです。もう一工夫が必要です。
意図的に機首を左右に振るようにしてみましたが、移動の効率はあまり向上していないように思えます。
速くて確実なロボットを作るのは難しいなと思いました。
ロボットをさらに改良するアイデアを紹介します。参考にしてみてください。

  1. ライトセンサーを左右に2個取り付ける。センサーで反応した時だけ方向転換をさせれば、ジグザグ移動しなくて済むのでは?
  2. 左右のモーターを完全に止めないようにしてみる。
    急には曲がれなくなるが、直進性は増すのでは?
  3. タイヤの角度を動かせる機構を付けて、方向転換をさせる。