2010a/MemberOnly/進行状況A

2010a 目次

課題3:

1.全方向から2つの懐中電灯の方向を探しだし、懐中電灯を狙ってホイールを投げる。可能な限り正確な方向に投げること。

2.懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば一定の距離(懐中電灯から30cm以上離れた距離)まで近づいて懐中電灯を狙ってブロックを投げる。

3.全方向から2つの懐中電灯の方向を探しだし、40cmの距離に近づいて懐中電灯を狙ってホイールを投げ、懐中電灯に当てる。

メンバー

馬場 将寿・・・1担当

鎌倉 竜馬・・・2担当

目標

・強度、見た目にもこだわる。

・投げる→装填→投げる、ができるロボをつくる。

ロボットの説明

本体

カブトムシ2.jpg

こだわったのが光センサーの位置である。まるで目のように見える。 そしてアームを動かすモーターが鼻みたいである。

また今回のロボットは横はスリムになった。

発射台周辺

動力1.jpg

ここが今回の心臓である。すこし見にくいが回転が時計回りと反時計まわりの歯車が付いている。役割については以下。

マガジンと発射台 - コピ.jpg

静止画なのでわかりにくいので説明します。 課題3、1では2発ホイールを飛ばす必要がある。

‐茲擦討△襯曠ぁ璽襪鯣射する。

発射台が下がると第二発目のホイールをのせたボックスが逆回転をする

ボックスからホイールが落下し発射台に装填される。

全体像kai.jpg

問題点でも述べるのだか、物理的に落ちたものは滑るし、弾む、それで発射台に壁を設けた。

全体像2ji.jpg

問題点

・アームが重くなってしまい、ホイールがあまり前まで飛ばなくなってしまった。

・ホイールが思うに発射台に乗らなかった

問題点から工夫した点

・発射台周辺で述べたように壁を作りホイールを留めることに成功した

・ホイールが飛ばなくなった点は発射台の動く時間を少し長くしたら勢いよく飛ぶようになった。 原因は壁や装填ようのボックスを一つのギアで動かしていることにある。 あとは必要最低限までパーツの使用を抑えたこと。

・電池を新品のものに取り替えることでアームがスムーズに動くようになった。

馬場のプログラム

#define time 400                                                     //1周する時間を定義
#define right_turn OnFwd(OUT_C);OnRev(OUT_A);                        //右回りで回転
#define arm OnFwd(OUT_B);Wait(80);OnRev(OUT_B);Wait(80);Off(OUT_B);  //アームを動かし、ホイールを投げる
task main ()
{
 SetSensor(SENSOR_1,SENSOR_LIGHT);                                   //センサー1を光センサーに
 SetSensor(SENSOR_3,SENSOR_LIGHT);                                   //センサー3も光センサーに。ただしこのプログラムでは使用しない.
 repeat(2){                                                          //同じ動作を2回繰り返す
 ClearTimer(0);
 int light_max;                          //光の明るさの最大値を定義
 light_max=0;
   
 while(FastTimer(0)<time)                                          //時間がtime以内なら以下の動作を行う
       {right_turn                                                 //右回りでに回転
          if(SENSOR_1>light_max)
            {light_max=SENSOR_1;}                                  //光センサー1で明るさの最大値を更新
        }
 right_turn
 until(SENSOR_1>=light_max);                   //もっとも明るい場所に向け回転
 Float(OUT_A+OUT_C);                       //ロボットを停止
 arm Wait(100);                          //アームを動かしホイールを投げる
}}

鎌倉のプログラム

Task main(){
SetSensor(SENSOR_1,SENSOR_LIGHT_MODE_RAW); SetSensor(SENSOR_3,SENSOR_LIGHT_MODE_RAW);

高感度の光センサーを1、3に定義、

Int light_max;         

Int time_max;

ここが今回のキモである。光の一番強いところを回転しながら探すのだ。

ClearTimer(0);
while(FastTimer(0)<250){ OnRev(OUT_A); OnFwd(OUT_C);
         if(SENSOR_1>light_max) {
                                  light_max =SENSOR_1;
                                  time_max=FastTimer(0);      }
                        OnRev(OUT_A);OnFwd(OUT_C);
                              Wait(252 − time_max);}

250秒で一周する。そして一周したなかから光の最大値を感じた所を時間で記憶し、全体の回転時間から最大値を感じたまでの時間を引いた分まで回る。ここでo,o2多く数えてるのはセンサーが二つ前についていて、光を探すのはセンサー1だけで探しているため光に対して真正面に向くには0.02秒の差が出る。   

if(SENSOR_1>=light_max −10 &&SENSOR_3>=light_max −10){
                         ClearTimer(0);
                         OnFwd(OUT_A+OUT_C);Wait(10);
                        

もしセンサー1が最大値より10低くてかつセンサー3が同じ値にあるならば、光に対して真正面にあるということ。このときタイマーをリセット、スタート!

If(FastTimer(0)>300){
OnFwd(OUT_A+OUT_C);until(SENSOR_1>max+20); 
Off(OUT_A+OUT_C);

センサー1が先ほどの最大値よりも20高い値をとるまで前進する。 (この20という値はかなり不正確です。使うライトやセンサーなどにも左右されます。現時点ではセットを返却しましたので確かめようがありませんが・・。)

OnFwd(OUT_B);Wait(75);
Off(OUT_B);Wait(10);
OnRev(OUT_B);Wait(75);}
Off(OUT_A+OUT_C);
}

もしこの状態が3秒続いたのならばライトが止まっているのでBのモーターでホイールを打ち出す。ちなみにRev(OUT_B);で装填を行う。(2には必要ないが・・・)。一度投げたら役目は終了なので止まります。

else if(SENSOR_1<light_max −10 &&SENSOR_3>=light_max −10){
                            OnFwd(OUT_A);Wait(10);}

もしセンサー1が規定値より小さければライトは右にあると認識し右に曲がる。

else if(SENSOR_1>=light_max −10 &&SENSOR_3<light_max −10){
                            OnFwd(OUT_A);Wait(10);}

上と同様にセンサー3が規定値より低ければライトが左にあると認識し左に曲がる。  

まとめ

鎌倉のまとめ

最大値を見つけ出すプログラムがなかなかできなかった。最大の弱点としてこのプログラムでは最初から真正面にライトがあった場合でも回転してしまうことがあり、ライトにたどり着く前に回転をやめてしまうことがあった。それは時間の調節によって解決。

馬場のまとめ

光の最大値を更新するプログラムを使うのが難しかったが、先輩のレポートなどを参考にして、うまく動かせるようになった。

繰り返しや関数を用いることでシンプルなプログラムにすることができた。

全体のまとめ

積極的にロボットを作る時間を確保できてロボットを作るのは比較的にスムーズにできた。一番の問題はホイールがなかなか狙ったとこに落ちてくれなかったことである。 壁をつけたら重くなってしまったりと一難去ってまた一難状態であった。

コメントをどうぞ

  • 一人目のプログラムは、二回とも同じ懐中電灯に投げてしまう可能性はないのでしょうか?二人目に関しては、プログラムをうまく貼れていないみたいなので、貼りなおしてみてください。工夫した点やロボットの説明など書くべき点は書けています -- FI? 2010-07-31 (土) 07:33:06
  • 同じ動作を二度繰り返すのでは、2つの懐中電灯の方向に必ず投げられるわけではないと思います。1回目に投げた方向を除外する、または光量に関して2つの変数を使って最大と2番目を見つけるプログラムなどが考えられます。2人目は、懐中電灯の方向を探すところから始めていますし、細かいところまで考えているのは良いです。ただ、30cmのところまで近づくという条件が抜けているので補ってみてください。(セットは返してしまったかもしれないので、使うのは大まかな値で良いです) -- FI? 2010-08-07 (土) 01:19:22
  • 1人目のプログラムでは、同じ動作を繰り返すだけでは課題を達成できない気がします -- FI? 2010-08-31 (火) 17:00:32

 


添付ファイル: file全体像kai.jpg 149件 [詳細] file全体像2ji.jpg 161件 [詳細] fileマガジンと発射台 - コピ.jpg 155件 [詳細] fileカブトムシ2.jpg 149件 [詳細] file発射台1.jpg 108件 [詳細] file発射台.jpg 118件 [詳細] file動力1.jpg 233件 [詳細] file全体像2.jpg 121件 [詳細] file全体像.jpg 108件 [詳細] file説明.png 118件 [詳細] file顔.jpg 111件 [詳細] fileマガジンと発射台.jpg 113件 [詳細] fileマガジンと発射台 - コピー.jpg 111件 [詳細] fileマガジン4.jpg 121件 [詳細] fileマガジン3.jpg 129件 [詳細] fileマガジン2.jpg 115件 [詳細] fileマガジン1.jpg 115件 [詳細] fileストッパー.jpg 113件 [詳細] fileカブトムシ.jpg 119件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-08-31 (火) 17:00:32 (3220d)