[[ロボティクス入門ゼミ]] [[2006a/MemberOnly/進行状況C]] [[2006a/C5/ロボコン]] [[2006a/C5/ロボコン/本体編]] [[2006a/C5/ロボコン/プログラム編]] [[2006a/C5/ロボコン/プログラム編/右]] [[2006a/C5/ロボコン/プログラム編/左]] **プログラム [#pcb9e600] このプログラムはロボコンが終了した後にロボコンでの動きの問題点を想像で(実際に動かしたりなどの試しなしに)製作したものです。 #define arm_up OnFwd(OUT_B);Wait(80); //腕を上げる #define arm_down OnRev(OUT_B);Wait(80); //腕を下ろす #define R_turn_90 OnFwd(OUT_C);OnRev(OUT_A);Wait(85); //右に90°旋回 #define L_turn_90 OnRev(OUT_C);OnFwd(OUT_A);Wait(85); //左に90°旋回 #define R_turn_180 OnFwd(OUT_A);OnRev(OUT_C);Wait(170); //180°回転 #define light until((SENSOR_2<40)&&(SENSOR_3<40)); //光センサーが黒線を感知するまで #define touch until(SENSOR_1==1); //缶に触れるまで #define go OnFwd(OUT_A+OUT_C); //直進 #define back OnRev(OUT_A+OUT_C); //後退 #define go_line go light line_number=line_number+1; //線を1本感知するまで直進 #define back_line back light line_number=line_number+1; //線につくまで後退 #define message ClearMessage();while(Message() !=0 {SendMessage(1);Wait(50);} until(Message() !=0); //メッセージを送信、受信 int line_number; //線の本数を変数とします sub GO() //上同様何度も使うのでサブルーチンにしました { go Wait(50); //少しだけ直進、1本目の線を過ぎる Off(OUT_A+OUT_C); Wait(1); go light //2本目の線に達したら R_turn_90 //右に90°回転 go_line go Wait(10); go_line //直進し2本線を過ぎるまで進み続ける } sub BACK() //行き同様サブルーチンにしました(ほとんど行きと同じ全身が後退になっただけ) sub BACK() //以前のものと変えたのはここだけです。帰りに場所の不足で曲がりきれなかったためにそれを補うように一応プログラムしました。 { OnRev(OUT_C);OnFwd(OUT_A);Wait(42); OnRev(OUT_C);OnFwd(OUT_A);Wait(42); //缶をつかんだ状態でのはじめに約45°旋回 back until((SENSOR_2<40) OnRev(OUT_C);OnFwd(OUT_A);Wait(42); back_line until((SENSOR_2<40) //センサー2のみが黒線の上に来るまで後退 OnRev(OUT_A);Wait(42); //機体をはじめのと垂直になるようにそろえる L_turn_90 //左に90°旋回する back_line //1本目の黒線まで後退 back Wait(10); back_line //2本目の黒線まで後退 } task main() { SetSensor(SENSOR_1,SENSOR_TOUCH); //センサー1をタッチセンサーとします SetSensor(SENSOR_2,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー2,3を光センサーとします line_number=0; GO(); until(line_number==2); //線が2本になったら R_turn_90 //右に90°旋回 go touch //缶に触れるまで直進 arm_down //腕を下ろす BACK(); L_turn_90 //受け渡し場所の前まできたら90°左旋回 back //後退(前進)する Wait(50); message //メッセージの作業が済んだら go //少し下がって Wait(50); R_turn_180 //180°回転 arm_up go Wait(50); //腕を上げ、缶を渡す back Wait(50); //少し下がり R_turn_180 //180°回転 GO(); until(line_number==6); //1回目と同じ動作 OnRev(OUT_C); Wait(85); //少し小さめに右寄りに回転 go touch arm_down BACK(); L_turn_90 back Wait(50); message go Wait(50); R_turn_180 arm_up go Wait(50); back Wait(50); R_turn_180 //1回目と同じ GO(); until(line_number==10); //1回目、2回目と同じ OnFwd(OUT_A);Wait(85); //今度は少し大きめに左よりに回転 go touch arm_down BACK(); L_turn_90 back Wait(50); message go Wait(50); R_turn_180 arm_down go Wait(50); //1,2回目と同じ } **課題と反省 [#fb00614b] 先にも書いておきましたが、このプログラムは試運転も何もなく、調整なしのためこれでしっかりと動けるかどうか分かりません。しかし、ロボコンで失敗した点はこの考え方で改善できていると思います。出来ればここまでのプログラムをロボコン前までに完成させて、更に試運転し調整も完全な状態でロボコンに出したかったです。