[[2006b/MemberOnly/進行状況A]] [[ロボティクス入門ゼミ]] [[2006b/A2]] *課題2:黒い線に沿って動くロボット [#o8ba7e78] #contents *黒い線に沿って動くロボット [#y0eef042] &ref(robo 上.JPG,center); &ref(robo 横.JPG); 黒い線に沿って動くロボットの上からの写真と横からの写真です。タッチセンサーとライトセンサーを前につけたため、かなり前が出っ張ってしまった。最初ライトセンサーを取り付けたとき、タッチセンサーよりも前につけてしまったために、タッチセンサーが反応できずうまくいかなかった。 &ref(robo 前2 編集.JPG); &ref(robo 後ろ 編集.JPG); そして、試行錯誤した結果、前・後ろとつけるのではなく、上下にセンサーをつけることにした。ライトセンサーとタッチセンサーを前につけるのに青いパーツが必要だったので、ロボットの後ろから持ってきた。そのパーツを後ろからとるために、ロボットを分解してはずしたため、かなりの時間と手間がかかった。 &ref(robotic #44.JPG); 黒い線の図だ、魚の形のように見える &ref(robotic #42.JPG); 二つのロボットが黒い線に沿いって動く。 *リンクのページ [#lcd91ab8] -[[2006/A2/tankn616のページ:http://yakushi.shinshu-u.ac.jp/robotics/?2006b%2FA2%2Ftankn616%A4%CE%A5%DA%A1%BC%A5%B8]] -[[2006/A2/jeunefilleの部屋:http://yakushi.shinshu-u.ac.jp/robotics/?2006b%2FA2%2Fjeunefille%A4%CE%C9%F4%B2%B0]] -[[2006/A2/michikoのページ:http://yakushi.shinshu-u.ac.jp/robotics/?2006b%2FA2%2Fmichiko%A4%CE%A5%DA%A1%BC%A5%B8]] -[[2006/A2/Rのページ:http://yakushi.shinshu-u.ac.jp/robotics/?2006b%2FA2%2FR%A4%CE%A5%DA%A1%BC%A5%B8]] *勉強ノート [#q0f89883] **課題2:黒い線に沿って動くロボット [#jfa9238a] ***1.相手のロボットに接触したら反転して進むのプログラム [#n2846c9c] #define THRESHOLD 40 //光の閾値を設定 task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1が光センサーと定義 SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー3が光センサーと定義 SetSensor(SENSOR_2,SENSOR_TOUCH); //センサー2がタッチセンサーと定義 while(true) { if(SENSOR_3<THRESHOLD) {OnFwd(OUT_A); Off(OUT_C);} if(SENSOR_1<THRESHOLD) {OnFwd(OUT_C); Off(OUT_A);} //黒い線に沿って動く if(SENSOR_2==1) //障害物に触れた場合 {OnRev(OUT_A+OUT_C); //後退する Wait(100); OnFwd(OUT_A); OnRev(OUT_C); Wait(50);} //旋回 } } -工夫した点 &ref(robotic #28.JPG);==========> &ref(robotic #31.JPG); 最初二つのセンサーの間は少し広けていたが、カーブを曲がるときはあまり黒い線に沿ってない走った。その結果で、二つのセンサーの間は空けないままで組み合わせた。そうしたら、ロボットがもっと早く走れるになった。また、もっとスムース走れた。 また、タッチセンサーはダブルバンパーからシングルバンパーにした。最初プログラム作ったときは SENSOR_B に SENSOR_TOUCH したができなっかた。センサーBはタッチセンサーにつながうことができなかった。結果とする、シングルバンパーに変わった。 プログラムの旋回の時間は元も150になったが、旋回時間が多きと黒い線に戻らない場合もあるし、360度の回転になることもあった。だから、旋回時間は50に減らした。 ***2.相手のロボットに接触したらそのロボットを右側から避けて通り、再びラインに戻って進むプログラム [#scf0b703] #define maeda OnFwd(OUT_A+OUT_C); //前進の定義 #define sada OnFwd(OUT_C); Off(OUT_A); Wait(20); //左折の定義 #define ukon OnFwd(OUT_A); Off(OUT_C); Wait(20); //右折の定義 #define gotoh(t) OnRev(OUT_A+OUT_C); Wait(t); Off(OUT_A+OUT_C); //後進の定義 task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1の設定 SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー3の設定 SerSensor(SENSOR_2,SENSOR_TOUCH); //センサ−2の設定 while(true) { if((SENSOR_1>40)&&(SENSOR_3<40)) {ukon;} //右に曲がるときの条件 if((SENSOR_2>40)&&(SENSOR_1<40)) {sada;} //左に曲がるときの条件 if((SENSOR_3<40)&&(SENSOR_1<40)) {maeda;} //前進するときと条件 if(ESNSOR_2==1) { gotou(50); OnFwd(OUT_A); OnRev(OUT_C); Wait(95); //右に曲がる maeda;Wait(180); //前進 OnFwd(OUT_C); OnRev(OUT_A); Wait(85); //左に曲がる maeda;Wait(200); //前進 OnFwd(OUT_C); OnRev(OUT_A); Wait(85); //左に曲がる maeda;Wait(180); //前進 OnFwd(OUT_A); OnRev(OUT_C); Wait(95); //右に曲がる } } } -苦労したところ 右側に避けて黒い線に戻るところが苦労した。2台のロボットにつくったプログラムを入れて、コースを走らせてみた。接触して右に避けるところまではうまくいったが、黒い線に戻るところで2台のロボットはぶつかってしまった。黒い線に戻る角度がきつすぎてしまい、ぶつかってしまったみたいだった。黒い線に戻る角度を緩くし、ロボットを避ける時間を長くしてぶつからないようにした。意外と簡単な作業に聞こえるが、ちょうど良い時間設定にするのは大変で、何度も2台のロボットに入れて時間を確認した。 -工夫したところ 苦労したところと多少似てしまいますが、右に避ける時間を長く取り相手のロボットとぶつからないようにした。 右に曲がるときの条件や左に曲がるときの条件をわかりやすくするために、右→右近→ukon,左→佐田→sada,前進→前田→maeda,後進→後藤→gotohにした。 *コメント [#e8f4d1e4] 感想などどんどん書いてください!! -gotou(50); を見て理解できる人は少ないと思いますが、気のせいですかね? それはともかく、#define gotou(t)の部分で、tが20固定になっていますよ。 -- [[ゆき(TA)]] &new{2006-12-15 (金) 13:09:24}; -あと付け加えると、定義ではgotohなのに、main()内はgotouになってますよ…。 -- [[まいける(TA)]] &new{2006-12-17 (日) 22:47:50}; #comment