[[2006a/A4]]~ #contents *その1:スタートまで空き缶を持っていくロボット [#na8327ff] #ref(Anomalocaris10a.jpg,nolink); ↑仮の画像かもしれません。 --&size(30){名前:[[アノマロカリス>2006a/A4/ロボコン前の班]]}; **プログラム [#w8afb93a] //// programing by Taro #define SR SENSOR_1 #define SC SENSOR_2 #define SL SENSOR_3 #define MR OUT_A #define MC OUT_B #define ML OUT_C #define armdown 240 #define bd 37 #define L 3 #define C 2 #define R 1 #define turn90 67 #define turn180a 139 #define turn180b 150 int armposi=0; void arminit(){ until(SL>=80){ OnRev(MC); } Off(MC); until(SL<80){ OnFwd(MC); } Wait(10); Off(MC); armposi=0; } void S_P(int x , int y){ switch(x){ case 1: SetPower(ML,y); break; case 2: SetPower(MC,y); break; case 3: SetPower(MR,y); break; default: break; } } task main(){ SetSensor(SL,SENSOR_LIGHT); SetSensor(SC,SENSOR_TOUCH); SetSensor(SR,SENSOR_LIGHT); S_P(L,10); S_P(C,10); S_P(R,10); int direc=1 , Xlinenum=0 ; int OSL=SL , OSC=SC , OSR=SR ; int NSL=SL , NSC=SC , NSR=SR; int kannum=0,i=0; arminit(); while(true){ OSL=NSL;OSR=NSR;OSC=NSC; NSL=SL; NSR=SR; NSC=SC; if(NSL<bd && NSR>=bd){ Off(ML); S_P(L,4); S_P(R,10); } if(NSR<bd && NSL>=bd){ Off(MR); S_P(R,4); S_P(L,10); } if(NSR>=bd && NSL>=bd){ S_P(R,10); S_P(L,10); } OnFwd(MR + ML); if(NSL<bd && NSR<bd){ S_P(R,10); S_P(L,10); if(OSL>=bd || OSR>=bd){ Xlinenum=Xlinenum+1; OSL=NSL;OSR=NSR; } if(Xlinenum==2 || Xlinenum==4 ||(Xlinenum==3 && kannum>=1)){ OnFwd(ML + MR); Wait(72); if(direc==1 && Xlinenum!=3){ Off(MR +ML ); OnFwd(ML); OnRev(MR); Wait(turn90); } if(direc==-1){ Off(MR +ML ); OnFwd(MR); OnRev(ML); Wait(turn90); if(Xlinenum==3 && kannum>=1){ Xlinenum=Xlinenum+1; } } until( SR <bd || SL <bd){ if(direc==1){ OnFwd(ML); OnRev(MR); } if(direc==-1){ OnFwd(MR); OnRev(ML); } } Off(MR + ML); if(direc==-1 && Xlinenum==4){ OnRev(MR + ML); Wait(70);Off(MR + ML); } } if(Xlinenum>=5){ S_P(R,10); S_P(L,10); Off(MR + ML); if(direc==1){ OnRev(MR + ML); Wait(23); OnRev(ML); OnFwd(MR); Wait(turn90); OnRev(MR + ML); if(kannum==0){ Wait(9); } if(kannum>=1){ Wait(100); } Off(MR + ML); OnFwd(MR); OnRev(ML); Wait(75); } if(direc==-1){ Off(MR + ML); PlaySound(SOUND_CLICK) ; Wait(50); OnFwd(MR + ML); Wait(60); Off(MR + ML); Wait(20); OnRev(MR); OnFwd(ML); Wait(120); until(SR<bd){ OnRev(MR); OnFwd(ML); } Wait(3); Off(MR + ML); } Off(ML + MR); ClearTimer(0); while(direc==1){ if(armposi==0){ if(FastTimer(0)>250){ Off(MR + ML); OnFwd(MR + ML); Wait(8); Off(MR + ML); OnRev(ML); Wait(8); Off(MR + ML); OnRev(MR); Wait(10); Off(MR + ML); OnRev(MR + ML); Wait(15); } OnRev(MR + ML); if(SC==1){ Wait(15); Off(MR + ML); OnFwd(MC); Wait(armdown); Off(MC); armposi=1; direc=-1; Xlinenum=1; Off(MR + ML); } } } while(direc==-1 && Xlinenum>=5){ S_P(R,10); S_P(L,10); OnRev(ML + MR); Wait(120); Off(MR + ML); Wait(40); arminit(); OnFwd(MR + ML); Wait(77); Off(MR + ML); OnFwd(MC); Wait(armdown); Off(MC); OnRev(MR + ML); Wait(140); Off(MR + ML);Wait(20); ClearTimer(0); while(FastTimer(0)<400){ SendMessage(1); PlaySound(SOUND_CLICK) ; } arminit(); OnFwd(MR + ML); Wait(40); direc=1; Xlinenum=1; kannum=kannum+1; Off(MR + ML); } } } } } --製作:前列の人々 *その2:受け取った空き缶をゴールに運ぶロボット [#f4a60561] #ref(Anomalocaris05e.jpg,nolink); 名前:アノマロカリス ver.0.5(仮) &size(20){''本体の制作者'':[[はる>2006a/A4/ハルの部屋]]、[[土佐犬>2006a/A4/土佐犬の部屋]]、[[なおき>2006a/A4/なおきのページ]]、[[たろう>2006a/A4/たろうのページ]]};~ &size(20){''プログラム制作者'':[[たろう>2006a/A4/たろうのページ]]};~ &size(20){''ホームページ制作主任'':[[NRLP>2006a/A4/NRLPの研究室]]};~ **製作過程 [#r44536d6] +とりあえずA4班が二手に分かれて製作を開始する。 +こちらはゴール担当となり、如何にしてゴールを目指すか考える。 +パワー重視で走行はキャタピラとしてキャタピラを組む。 +キャタピラのみで走らせてみるが、動きがあまりに歪なため、急遽タイヤに変更、ギヤ比を間違えて爆走したりといったハプニングはあったもののうまく走るようになる。 +うまく摑んで運べるようなアームを必死で作る。 +ハード製作と同時進行で大体の走行プログラムを組む。 +とりあえず運べるようにはなり、ここで微調整を繰り返す。 +相方のロボと組んで本番のテストを繰り返す。 +完成! #ref(Anomalocaris05f.jpg,nolink); #ref(Anomalocaris05g.jpg,nolink); ***盲目のプログラム [#p63f6875] プログラムをここらへんにでもよろしく! **反省 [#a3585139] 反省はいっぱいです。 ***苦労した点 [#y655d84f] -アームの構造が複雑で、組み立てが大変だったこと(構造案のメインはたろう様) -機体同士の赤外線センサのやり取りがなかなか反応しなかったこと。 -マシンの前後の重心のバランスをとること(ウェイトととしてライトセンサを設置) -手動での細かい誤差修正のため、コースでの練習が何度も何度も必要だったこと(頑張った!) -缶が木の棒を越えて、なかなかゴールに押し入らずに苦労した(後に飛び出たパーツが缶を遮っていた事が分かり、そのパーツを変更して出っ張りを無くすことで解決) -明らかなる部品不足は痛すぎる…(代用品を探すのにまた一苦労) ***工夫した点 [#rd2bf6f3] -すべての行動パターンを細かく入力したこと。 -誤差修正のプログラムを入れていないため、できるだけ誤差の出ない様な機構にしたこと。その点を以下に示す。 --最初はキャタピラを作ったが、方向転換を良くしてその際の誤差を少なくするためにタイヤに変更した。 --前進の際、重心が高すぎたため前後にガックンガックンするのを防ぐため、機体の後ろ部分にウェイトを設置した(因みにそのウェイトとは、先ほども言ったが光センサのことである) --缶をゴールさせた後、真っ直ぐに後進できるよう方向修正を無理やりできるようにした(ゴールに無理やり突っ込んで下部の平行なパーツにより真っ直ぐに方向転換する) -ライトセンサ式にはできない黒線を無視した小回りな動きを利用し、移動時間を短縮させたこと。 -缶をうまくゴールに入れられるように、強く押し出すと缶の下が持ち上がる様なパーツを取り付けたこと。 ***感想 [#zefab816] 部品不足に疲れました。~ 微調整何度も何度もやるのにも疲れました。~ 1日でも早めに始めたのは良いことでした。~ ↓この添付ファイルの写真使ってくださいなー(随時追加予定) ファイル名の一部が10と05で機体別になっています。