今回の課題は課題2のコース上に散らばった空き缶を集め指定された場所にできる限り高くつむロボットの作成だ。今回の課題ではLEGOのキットを2つ使う。
同じ班の人たちのページへは下から
今回の機体は何段階かの状態を経て最終的な形になった。初めは、一台が回収用ロボット、もう一台が空き缶を積み上げるロボットだった。積み上げる方のロボットは空き缶をつかむアームを上下させる作戦だったが、強度が足りなかったり、モーターの数が足りなかったので断念した。二つ目の構想は1台にして、空き缶を持ち上げる用のタイヤに押し付けて、持ち上げその下に他の空き缶を持ってくる作戦だったが、持ち上げた後空き缶の下に他の空き缶をもってこれなかったのであきらめた。
最終的に短時間で作れてプログラミングもしやすい今の形になった。
今回のロボットもメインとなる部分は説明書の通りにつくった。結局この形が一番安定するように思う。
機体1ではアームの形にとくにこだわった。このアームは点G、ヘアピンカーブの空き缶を取った後にカーブすると、下の写真のようにきれいにアームの壁に沿って並ぶようになっている。
機体2もメインとなる部分は説明書どうりである。2本のアームを取り付けた。
右腕は空き缶を押し込むための形になっている。押し込むまでは邪魔なので、回転し内側に入るようにした。左腕は邪魔な空き缶をどけるためにつけた。
機体1は左下の地点から右向きにスタートし、地点Gとヘアピンカーブにある空き缶を取った後に反時計回りに90°回転した後、地点Hと地点Tの空き缶を回収しゴールの円に近づく。機体2が空き缶を押し込んだ後、時計回りに60°程回転し、その後バックして停止する。
機体2は中心の円からスタートする。開始後8.5秒待った後バックし、方向転換する。その後、地点F周辺まで移動した後、閉じていたアームを開く。そして空き缶を円の内側に押し込み、バックした後停止する。
task main() { OnFwd(OUT_AB,20);//直進する Wait(7800); Off(OUT_AB); OnFwd(OUT_A,20);//反時計回りに90°回転する Wait(3670); Off(OUT_A); OnFwd(OUT_AB,20);//直進する Wait(3100); Off(OUT_AB); Wait(6000); OnFwd(OUT_A,-20);//時計回りに60°回転する。 Wait(1500); Off(OUT_A); OnFwd(OUT_AB,-35);//バックする Wait(1000); Off(OUT_AB); }
#define speed1 20 #define speed2 50 #define speed3 -20 #define speed4 -50 #define go OnFwd(OUT_BC,speed1); #define back OnFwd(OUT_BC,speed3); #define turnL OnFwd(OUT_B,speed2); #define turnR OnFwd(OUT_C,speed2); #define turnLB OnFwd(OUT_B,speed4);OnFwd(OUT_C,speed3); #define turnRB OnFwd(OUT_C,speed4);OnFwd(OUT_B,speed3); #define close OnFwd(OUT_A,speed2); #define open OnFwd(OUT_A,speed4); task main() { Wait(8500); turnLB;//左後方に進む Wait(2000); Off(OUT_BC); back;//バックする Wait(2500); Off(OUT_BC); turnL;右に進む Wait(780); Off(OUT_C); open;//アームを開く Wait(300); Off(OUT_A); go;//空き缶を押し込む Wait(5600); back;//バックする Wait(3000); }
今回の課題では計画を立てることの大切さが痛いほどわかった。最終的に完成した機体も初めのタイヤの角度、スタートの位置などで結果が大きく変わるものになった。この授業の3つの課題を通して、ロボットのプログラミングの難しさ、ロボットの不安定さを目の当たりにした。私の将来の夢はロボットの開発である。今あげたような課題を克服できるようなロボットをつくっていきたい。