blog.kur.jp

バイオリンと山、自転車をこよなく愛するkurのチラシの裏。たまには技術的なことを書いたりするかも知れません。

MINDSTORMS NXTでライントレースしてみる

MINDSTORMSはセンサからの入力によって動作を変更させることができる. この事は前回の記事でも書いたし,一般的なプログラムと同じ.入力によって出力が変わる.

なので,実際にロボットを作成して任意の動作をさせたいと思ったら,センサからの値をいかに利用して,いかにモータを制御するかってのが重要になる.

たとえば,地面に黒線があって,この線のとおりに移動させたいとき,どうすれば良いか?

どのセンサを使えば良いのか?どのモータを動かせば良いのか.ってことを考えていくわけです.これが非常に楽しい.

私が実装した処理内容はこんな感じ.もちろん他にも方法はあると思うし,これが一番効率が良いとは思ってない.でも,動く.だから楽しい.笑

  1. 左右についているモータのうち,片方モータを回す.
  2. センサの色が変わったら回転しているモータを停止させ,回転していないモータを回転させる.

ちなみに,使用したセンサは色センサを利用した.このセンサは,センサが取り込んだ色によって,明度を数字を返す.黒なら0,白なら50見たいな感じで.

実際のソースコードはこんな感じです.

#include "NXCDefs.h" #define THRESHOLD 40 #define DISTANCE 10 task main() { SetSensorLight(IN_3); OnFwd(OUT_B,75); while(true){ if(Sensor(IN_3) > THRESHOLD){ Off(OUT_BC); if(direction == 1){ OnFwd(OUT_B,75); Wait(100); until(Sensor(IN_3) <= THRESHOLD) ; }else{ OnFwd(OUT_C,75); Wait(100); until(Sensor(IN_3) <= THRESHOLD) ; } direction *= -1; } } }

実際には,走行させる床の材質やら,光の加減なんかでうまく行かない場合もあったんだけど,ほとんどの場合はうまく動いたのでOKってことで.笑