[[2007a/A10/課題2右]]
#contents

*黒い線に沿って動くロボット [#fe4c331d]
*課題2:黒い線に沿って動くロボット [#fe4c331d]

#ref(./Image094~01.jpg)

**製作メンバー [#wb984525]
田丸、藤原
**製作者 [#wb984525]
タマヂャン、りさちゃん
**ロボットの紹介 [#ve977490]
【全体図】

最初は、ダブルバンパー+光センサ×2で、上の写真のような構造にしていました。が、タッチセンサの反応が良くなかったので、交差点で、もう1台のRCXと衝突したときに巻き込まれる可能性を危惧して作りなおしました。
上のバンパーの感度の問題が発生したため、苦し紛れにタッチセンサに頼らない方法を考えました。


考えてできたのが上の写真です。
煩わしいバンパーをスッキリ取り払い、光センサーをライントレース用と障害物感知用にしようと考えました。
一見、良いアイディアだと思ったのですが、ライントレース用の光センサが一つしかないため、「黒(暗い部分)」を感知させ、なおかつ今回の課題の「速く、正確に」を実現させるためにプログラムを並列にしなければならなかったので、このパターンも断念しました。

#ref(./Image095~00.jpg)

結局、最後は無難なシングルバンパー+ライントレース用光センサ×2の形に落ち着きました。

**コース[#wf78d630]
#ref(./Image095~01.jpg)
↑最初のコース
交差点直後のカーブで脱線するために変更することに
#ref(./Image096~01.jpg)
変更後のコース 
交差点直後のカーブを修正



**プログラム [#fec0dfd7]

 #define THRESHOLD 40                      //閾値を40に設定
 #define MOTOR OUT_A+OUT_C

 task main()
 {
  start line_trace;                        //ラインのトレースをスタート
  start check_touch;                       //衝突の感知をスタート
 }
 task line_trace()
 {
  SetSensor(SENSOR_1,SENSOR_LIGHT);        //センサ1に光センサを宣言
  SetSensor(SENSOR_3,SENSOR_LIGHT);        //センサ3に光センサを宣言

 while(true){
      if(SENSOR_1 > THRESHOLD){
         if(SENSOR_3 > THRESHOLD){         //両方のセンサが白を感知
           OnFwd(MOTOR);                   //前進する
         }else{                            //センサ1が白、センサ3が黒 を感知
          OnFwd(OUT_A);Off(OUT_C);        //左に曲がる
         }
      }else{
         if(SENSOR_3 > THRESHOLD){         //センサ1が黒、センサ3が白を感知
             OnFwd(OUT_C);Off(OUT_A);      //左に曲がる
         }else{                            //両方のセンサが黒を感知
             Off(MOTOR);Wait(400);         //4秒間停止する
             OnFwd(MOTOR);Wait(100);       //1秒間前進
         }
       }
     }
 }

 task check_touch()
 {
 SetSensor(SENSOR_2,SENSOR_TOUCH);         //センサ2にタッチセンサを宣言 

 while(true){
 if(SENSOR_2 == 1){                        //バンパーが衝撃を受けると
  stop line_trace;                         //ラインのトレースを一時停止
  Off(MOTOR);Wait(300);                    //3秒間停止する
  start line_trace;                        //ラインのトレース再開
 }
 }
 }

**工夫&苦労した点 [#l9e53d55]
 

(プログラム) 
交差点で一時停止した後、再発進させるプログラムに"Wait"を使ったため交差点でタッチセンサが反応しないという問題が出てきました。
解決策としてタッチセンサ、ライントレースをそれぞれ"task"を分けて書くことで解消しました。
**感想 [#scfce757]
(田丸)
(たまちゃん)

今回のメインはプログラムだと思っていたので、ロボットの構造は、あまり気に掛けていなかったのですが、
シンプルな構造にすればする程プログラムが複雑になっていったので正直なところ参りました。
(結局は時間がなくて光センサは二つ使ったのですが)
前回の課題から、「タイヤの摩擦」について改善しようと思っていたのですが時間がなくできなかったのが残念です。
今回の課題で、入力センサの仕組みが少し分かったので、次回は他の関数も使ってみたいと思います。

(藤原)

今回私は、プログラミングなどは田丸さんにやってもらってしまったので、コースを書くということしかしませんでした。コースを書くときは、交差点をどこにつくるかということや、線の太さなどによってセンサの反応が変わってしまったので、修正を加えるのが難しかったです。中でもコースのカーブ部分で脱線してしまったり、うまく動かすことができない箇所の修正が最も大変でした。ロボット全体としては音楽を入れれば機能のバラエティに富んで良かったかもしれません。次回は、ちゃんとプログラミングもしたりしてがんばろうと思います。

***コメントをお願いします [#o24aa411]
-シンプルでわかりやすいです。次は音楽もぜひ入れてみてください。 -- [[ヒロヤ]] &new{2007-06-21 (木) 13:36:49};
-最後の感想を読んで一言。この授業の目的や目標は理解されていると思いますが、今回の課題を行う上で重要なことは論理式や制御構造の理解です。つまりセンサがどういう値の時にどういう動きをさせたいのか論理的に考えてプログラムを作成することです。逆に言えば今回の課題はそのための課題です。コースの作成はその学習のための準備にすぎません。いったんコースを作成したならばあとはコースではなくロボットやプログラムを改良すべきです。もしこの課題を行う上で必要なことを自分は理解していないと感じたならば、理解するための努力を放棄しないでください。相方にうるさがられるくらいしつこく質問してください。二人とも行き詰まった時には過去のレポートを参考にしたり、他のチームやTA、教員に質問してください。とにかくこの授業で重要なのは、自分から積極的に学習しよう、考えよう、より良いものを作ろう、という意欲です。音楽を入れるくらいなら今からでもできます。他のチームのページや過去のページを見ればヒントはたくさん見つかるでしょう。次回と言わす、いますぐやってください。 -- [[松本]] &new{2007-06-22 (金) 08:32:08};

#comment


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS