ホーム » スタッフ » 斉藤徹 » LEGO基本ライントレース車体の高速化

2010年9月
« 8月   10月 »
 1234
567891011
12131415161718
19202122232425
2627282930  

最近の投稿(電子情報)

アーカイブ

カテゴリー

LEGO基本ライントレース車体の高速化

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% ;
}
}