目次

1,トレースマシンとは?

トレースマシンとは、光センサーを使うことにより、外部の明るさを感知し、黒線の上を動くことのできるロボット。前回の書道ロボットでは初めからプログラミングされている動作を実行するのに対し、今回のトレースマシンは、外部からの明るさという情報によって動きが変わる。その入ってきた情報をどう認知するかを予測し、プログラミングさせたのがトレースマシンである。

光センサー

値40を境とし、白と黒を分ける。40以下なら黒・つまりコース上、40以上なら白・つまりコース外と認知する。

ok

2,コース

初めは写真にもうっすら写っているようにもう少し急なカーブと、交差点が垂直に交わっていないコースでしたが、斜めに交わる交差点が難所だったので少しはなだらかに変えました。

course

3,コースの攻略ポイント

  • カーブ
  • 交差点
  • 衝突時
  • 音楽

カーブ

cabu
 if((SENSOR_1>THRESHOLD)&&(SENSOR_3<THRESHOLD))    //センサー1がコースから外れでセンサ−3が
{                               コース上のとき
OnFwd(OUT_A);                     //右折する
Off(OUT_C);
}

if((SENSOR_3>THRESHOLD)&&(SENSOR_1<THRESHOLD)) //センサー1がコース上でセンサ−3がコース
{                              からはずれたとき
OnFwd(OUT_C);                     //左折する
Off(OUT_A);
}
if((SENSOR_1>THRESHOLD)&&(SENSOR_3>THRESHOLD))  //センサー1、3ともにコースから外れている
{                               とき
OnFwd(MOTOR);                     //直進する
}

交差点

cross

今回最大の課題であろう交差点。初めはセンサーがともに黒を感知したときにタイマーを作動させ一時停止を可能にしようと思った。しかし、コースを横断するときにもセンサーがともに黒を感じてしまうので、この考えは失敗に終わった。そこで、Wait()の間は他の指令が実行されないことを利用し、単純なOff()とOnFwd()で書くことにした。

 if((SENSOR_1<THRESHOLD)&&(SENSOR_3<THRESHOLD))  //センサ−1、3ともに黒を感知したとき
{
Off(MOTOR);Wait(100);            //モーターが止まり1秒待つ
OnFwd(MOTOR);Wait(150);           //その後1.5秒間直進する
}

衝突時

タッチセンサーを使うことにより、衝突したときに、数秒間停止するプログラムを組んだ。

arm
 if(SENSOR_2==1)                              //タッチセンサーが感知したとき
{
Off(MOTOR);Wait(300);                 //モーターが止まり3秒待つ                
OnFwd(MOTOR);                    //その後直進する
}

4,全体プログラム

これまでの、カーブ、交差点、衝突を組み合わせると・・・

 #define THRESHOLD 40             //闘値を定義
#define MOTOR OUT_A+OUT_C           //MOTORはOUT_A+OUT_Cとおく
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);     //センサー1は光センサーであると定義
SetSensor(SENSOR_2,SENSOR_TOUCH);   //センサー2はタッチセンサーであると定義
SetSensor(SENSOR_3,SENSOR_LIGHT);     //センサー3は光センサーであると定義

 while(true)
{
if((SENSOR_1>THRESHOLD)&&(SENSOR_3<THRESHOLD)) //コースを左にそれてしまったと
{                         ときに右折する
OnFwd(OUT_A);
Off(OUT_C);
} 

if((SENSOR_3>THRESHOLD)&&(SENSOR_1<THRESHOLD)) //コースを右にそれてしまったと
{                         ときに左折する
OnFwd(OUT_C);
Off(OUT_A);
}

if((SENSOR_1<THRESHOLD)&&(SENSOR_3<THRESHOLD)) //センサー1・3がともに『黒』と
{                         感知したとき1秒止まり、その
Off(MOTOR);Wait(100);               後1.5秒間のみ直進する
OnFwd(MOTOR);Wait(150);
}

if((SENSOR_1>THRESHOLD)&&(SENSOR_3>THRESHOLD)) //センサー1・3がともに『白』と
{                         と感知したとき直進する
OnFwd(MOTOR);
}

if(SENSOR_2==1)                //センサー2に『触った』という情
{                        報が伝わってきたとき3秒間止ま
Off(MOTOR);Wait(300);              り、その後直進する
OnFwd(MOTOR);
}
 
}
}

5,工夫点

  • 光センサーをどの位置につけるか。黒線を挟むように作るか、黒線の上を通るように作るかで悩んだ。結論としては、写真を見て分かるように、黒線を挟むようにつけた。理由としては、黒線の太さは2cmで、はみ出た瞬間に曲がるプログラムを組むため、あまりにも小刻みな動きをしてしまうため。黒線を挟むことで、多少ぎざぎざな動きになるものの、直進とあまり変わらない速度で動くことが可能になった。
  • タッチセンサーをどこにつけるか。前か後ろか。それぞれにメリット、デメリットがある。前につけると、重さが前に偏ってしまう。後ろにつけると、読み取る位置が後ろになってしまい、黒線上を動く時に、不思議な感じになってしまう。もしくはタイヤを逆回転させなければならない。これを決めた、最大の理由は、前につけるとカブトムシに見える!
  • やはり交差点。『 Wait()の間は他の指令が有効でない 』と、いうことを使ったことにある。

6,感想

  • 今回は、前回のプログラミングとは異なり、細かい微調整がいらず面倒なことはあまりなかった。しかし、until()の使い方をしっかり理解していなかったために、途中混乱することもあったが、until()if()の違いがわかってからはあっという間にプログラムが仕上がり、心折れることなく、最後まで完成させることができた。
  • また、授業のはじめの段階で習ったWait()の本当の意義について明確に理解でき、新めて今までしてきたプログラムの理解にも繋がったと思う。今後の課題にもWait()の性質を生かしていきたいと思う。
  • また、プログラミングをしていて『〜なとき』という条件を頻繁に打ったと思います。前回との大きな違いである『入ってきた情報で動く』という課題の特性を大いに感じました。
  • 発表のときは交差点の優先道路ではないときに、一時停止しなければならないということを忘れてプログラムを作ってしまいました。今度はそれを踏まえて作り直しました。
  • アドバイス等お願いします! -- 10L? 2007-06-20 (水) 09:49:58
  • 個々のプログラムの解説と、全体のプログラムとの関係がよくわからない?のですが。 -- まいける(TA) 2007-06-21 (木) 10:29:00
  • 図示しているのは良いが、全体としてのまとまりをもう少し持たせると良いのでは。 -- ヒロヤ? 2007-06-21 (木) 13:39:21
  • 音楽を演奏するプログラムをウェブ上に掲載する際には、著作権に関して十分注意してください。その曲の著作権者の了承を得るか、自分で作曲した曲や著作権の切れた曲を使用しましょう。 そもそもこの課題は音楽を演奏するプログラムを作成することではありません。-- 松本 2007-06-25 (月) 17:50:20
  • 採点する人の立場になってレポートを作成しましょう。ひとつひとつの文をよく吟味してください。例えば感想の後半の文章は何を伝えたいのかよくわかりません。 -- 松本 2007-06-25 (月) 17:59:31


添付ファイル: fileコース.jpg 259件 [詳細] filearm.JPG 252件 [詳細] filesannrinn2.JPG 127件 [詳細] filehikari!.jpg 255件 [詳細] filehikari.JPG 130件 [詳細] filecross.jpg 287件 [詳細] filecourse.jpg 126件 [詳細] filecabu.jpg 250件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-07-02 (月) 21:04:10