[[2008b/MemberOnly/進行状況A]]
*目次 [#bbb662ff]

#contents
*課題2:黒い線に沿って動くロボット [#e42741d7]
CENTER:製作者: 零崎 Y田
**1. 課題の説明 [#ffe6fdc2]
各チームで作成する、白紙に黒い線を引いたコースに沿って動くロボットをつくる。

条件として、

・速さと正確さを追求する。

・交差点で優先側を走っていない場合には、一時停止する。

・前方にあるもう一台のロボットに接触した場合には停止して相手のロボットが行き過ぎる、あるいは距離が離れるのを待つ。

・コースを3周したら自動的に止まる。
 
という4点をクリアしなくてはいけない。

**2. 制作過程 [#ob7b848b]
最初はマニュアルと同じように作ってみたけど案の定曲がりきれない。
かといってタイヤをでかくしてみると今度は曲がりきれない。

そこでセンサーの反応する値を変更してみると右回転はできるのに、左回転ができませんではないですか。
どうも左のRCXの制御が弱い様子。ここで早さをいったん押さえて左が曲がりきれるようにプログラムとマシンで左回転を補佐することに。

結果的にはマシンは基本のドライブベースはそのままに、タイヤは二輪で後ろにキャスターをつけて回転性を高くしてみました。 自分たちは早すぎると曲がりきれない部分が出てくるので曲がりきれてかつ早くなるようタイヤを使って調整しました。
プログラムは後述いたします。


**3. ロボット紹介 [#l346c357]
前述したロボットです。下図

|>|CENTER:COLOR(#808080):&ref(2008b/A7/課題2左/masuin.jpg,75%,マシン);|


こちらキャスター

|>|CENTER:COLOR(#808080):&ref(2008b/A7/課題2左/kyasuta.jpg,75%,マシン);|

(後ほど張ります12/4現在)
キャスターは色々試しましたがこの形が一番よく回ってくれました。タイヤをあげて早くしたかったのですが左の調子がどうも悪いみたいなのでなくなく下げて曲がりきれることを第一に制作しました。
こちらアーム
|>|CENTER:COLOR(#808080):&ref(2008b/A7/課題2左/armall.jpg,75%,マシン);|

Y田制作。本人いわくエヴァ○ゲリオンイメージ。起伏対策に実は浮いてるんです!
|>|CENTER:COLOR(#808080):&ref(2008b/A7/課題2左/arm.jpg,75%,マシン);|
浮いてるんです。これのお陰で起伏があっても誤作動しません!暴走なんてしませんよ!Y田クオリティです
**4. コース紹介 [#rec26116]
a)はじめに制作したコース
|>|CENTER:COLOR(#808080):&ref(2008b/A7/課題2左/map.jpg,75%,マシン);|
何も考えずに制作したところ、予想外の難易度になってしまった。

鋭角・交差点をどうがんばっても通過できなかったため、闇に葬られた。

b)作りなおしたコース
|>|CENTER:COLOR(#808080):&ref(2008b/A7/課題2左/ko-su.jpg,75%,マシン);|
いろいろグループでもめた結果こうなりました。図は後ほど12/4現在
しかもその後相談もなしに加筆修正が、、、


前回の反省をもとに制作したコース。かなり難易度が下がったように思われる。
**5. プログラム [#w510e493]
  /*  黒い線をトレースするロボット のプログラム  */

 #define THRESHOLD 42
 #define THRESHOLD2 47 // 閾値
 #define  RUN_TIME 5
 #define  RUN2_TIME 3

  int c; 
 int c_max=9; 
 task main ()
 {  SetSensor(SENSOR_2, SENSOR_TOUCH);
    SetSensor(SENSOR_1, SENSOR_LIGHT);
  SetSensor(SENSOR_3, SENSOR_LIGHT);
  c = 0; 
     while (true) {
     until(c >=c_max){    
     SetPower(OUT_A,7);  // A出力のモータの出力を3にする (0〜7まで指定できる)
    SetPower(OUT_C,2);  // A出力のモータの出力を3にする (0〜7まで指定できる
     if (SENSOR_1 < THRESHOLD2) {   // 黒線上にいるとき
     ClearTimer(1);   
             OnFwd(OUT_C); OnRev(OUT_A);
        if(FastTimer(1) >=RUN2_TIME){
     OnFwd(OUT_C);
             OnRev(OUT_A);
             } } else {                      // 黒線から外れたとき
           OnFwd(OUT_C);
             }
     if (SENSOR_3 < THRESHOLD) { 
             ClearTimer(3);    // 黒線上にいると・                   //     Timer(3) をリセット
             OnFwd(OUT_A);
             Off(OUT_C); if(FastTimer(3) >=RUN_TIME){
     OnFwd(OUT_A);
             OnRev(OUT_C);
             }
         } else {                      // 黒線から外れたとき
                 OnFwd(OUT_A);
         }
         if(SENSOR_1 < THRESHOLD && SENSOR_3 < THRESHOLD){
         Off(OUT_A+OUT_C);
         Wait(200);
         OnFwd(OUT_A+OUT_C);
         Wait(55);c=c+1;
         }
         if(SENSOR_2){
         OnRev(OUT_A+OUT_C) ; Wait(50); 
         Off(OUT_A+OUT_C);
             }      
            
            }
             Off(OUT_A+OUT_C);
     }}
**6. 課題発表会にて [#yc06013a]
スタートしようとしたときに、まさかの動かないという事態に。即座にプログラムを再度書き込むことで解決。

心配だった紙のしわによるタッチセンサーの誤作動はアームを浮かすことで回避プラス、みんなで紙をぴっちりはりました!これぞチームワーク!
さいごの一周でまさかのショートカットを見せましたが合格をもらえてよかったです!
しかし、みている間ははみ出ないか非常に怖かったです。

**7. 苦労した点 工夫した点 [#s2dab87e]
1 右回転はできるけども、左回転が無理ですって、、 どれだけやっても左回転が無理  でしたが、発表当日の朝にやっとこさギア比を調節して回転させることに成功!  
  プログラムは一緒なのに動かないことを学びました。

2 プログラムでのタイマーの使い方が難しかったです。なんとかできるようになったと思います。

3 工夫したのはスピード調整のためのタイヤとキャスター。タイヤを小さくしてスピードを抑え脱線しないように踏ん張らせました。

4 なんといってもアーム! 他に類を見ないデザインのお陰でとてもほめてもらえました!
 
5 前回の反省をいかし、構想を考えてからプログラム作成。実験はこまめに行い問題点は逐一見つけ修正できていったと思います 
**8 大変だったんですよ [#o72d4d69]
11月 マシンの初期は早くに完成。後はプログラムを残すのみ
12/2 Y田バイトが大変!零崎はロボットを作ってもらったのでプログラムがんばります
12/3 Y田パスタ作りが忙しい。零崎はやっぱり左回転ができない。今日もタイムアップ
12/4 零崎は最後まであきらめません!!朝からロボット!! AM10;00ついに完成! 涙がとまりません。Y田にこれで顔向けできますね!
発表会も無事に終わりました!当然ながらうちの子が一番輝いてましたよ!


**コメントをどうぞ [#z265b2cc]
- ソースちゃんとはってね -- [[なかむら]] &new{2008-12-11 (木) 15:25:27};

#comment
書くべきことは書けています。図や写真を積極的に使うともっとわかりやすくなります。  FI

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS