LEGO MindStorms NXTのライントレース処理で実験を行った。 プログラムはNXTソフトウェア2.0で記述した。 光センサーが1個しかない場合、白黒の境界に沿って車体をすすめることになるが、 「黒なら左折、白なら右折」の処理だと、 左右に車体を振りながらで余り速い動きにはならない。 NXTソフトウェアのブロック記述ではループ1周の速度も遅いため、 高速移動のために直進性を高めてモータ速度を上げると、 半径30cmほどのカーブでさえ曲がりきれない。 色々と条件を変えてみたけど、安定して半径20cm程を曲がるには、
for(;;) { // 実際はNXTソフトウェアのブロック if ( 光センサ==黒 ) 左前進0%,右前進30% ; else 左前進30%,右前進0% ; }
といったプログラムで、移動を高速化するのは難しい。

NXTソフトウェアでは状態遷移図は辛い…
NXTソフトウェアのループ周期で高速化しようとすると、 連続して黒or白なら高速カーブ、白黒が交互に変化するときは直進性を高めて左右にカーブという処理といった処理がしたくなってきた。 理想的には、状態遷移図で速度制御したいけど、 大人気なくC言語で書くのも気が引けるし、ROBOLABで1万円かけるのもイヤとなると、 状態遷移図的なコードも書きにくい。 色々と試し、以下のようなコードとしてみたら、それなりに高速化ができた。
# 直進時に速度 (30+0)/2 = 15% ⇒ 速度 (30%+50%)/4 = 20%
for(;;) { if ( 光センサ==黒 ) { 左前進0%,右前進30% ; if ( 光センサ==黒 ) 左前進0%,右前進100% ; else 左前進50%,右前進0% ; } else { 左前進30%,右前進0% ; if ( 光センサ==黒 ) 左前進0%,右前進50% ; else 左前進100%,右前進0% ; } }
