[[2016a/Member]] [[asd:http://yakushi.shinshu-u.ac.jp/robotics/?2016a%2FMember%2FRaikouRK%2FMission2]] *今回の課題 [#j300978a] *指針と計画 [#yc06bf5b] *失敗作と得られた知見 [#q89e7b13] *完成した機体の解説 [#ldd6e701] *プログラムの解説 [#j40ae6ea] *結果とまとめ [#ifec02b2] #define Middle 45 ::: ~task main() { setting(); STARTING_OPERATION(); repeat(2) { TRACE(); zensin(); } //交差点からDへ向かう TRACE(); OnRev(OUT_C); Wait(25); TRACE(); //誤差修正 OnRev(OUT_A); Wait(95); Off(OUT_AC); //dに到着 OnFwd(OUT_B);//コップつかむ Wait(250); start keep; TURN_180();//180°回転 OnFwd(OUT_A);//Qの方向を向く OnRev(OUT_C); Wait(200); Off(OUT_AC); OnRev(OUT_AC);//進む Wait(100); Off(OUT_AC); //センサー使って進む while(SENSOR_1 > Middle-4) OnRev(OUT_AC); stop keep; //放す Off(OUT_AC); down(); } sub setting() { //初期設定(パワー、センサー) SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_2,SENSOR_TOUCH);//モータB止める用 SetSensor(SENSOR_3,SENSOR_LIGHT); SetPower(OUT_AC,4);//タイヤ SetPower(OUT_B,7);//上下、開き } sub zensin() { OnRev(OUT_A); Wait(106); Off(OUT_A); } sub copjugde() //コップが前にくるまで前進 { while(SENSOR_3 < 46) OnRev(OUT_AC); Off(OUT_AC); Wait(100); } task keep() //上でキープしておくただし、ラインとレースと並列動作させるためtaskで定義 { while(1) { OnRev(OUT_B); Wait(1); OnFwd(OUT_B); Wait(1); } } sub TRACE() //トレース用メソッド { ClearTimer(0); while(FastTimer(0)<=42){ if(SENSOR_1>Middle+4)//白 左旋回 { OnFwd(OUT_C); OnRev(OUT_A); ClearTimer(0); } else if(SENSOR_1>Middle+2)//やや白 左折 { Off(OUT_C); OnRev(OUT_A); ClearTimer(0); } else if(SENSOR_1>Middle)//直進 { OnRev(OUT_AC); ClearTimer(0); } else if(SENSOR_1>Middle-2)//やや黒 右折 { Off(OUT_A); OnRev(OUT_C); } else //黒 右旋回 { OnFwd(OUT_A); OnRev(OUT_C); } } Off(OUT_AC); PlaySound(SOUND_FAST_UP);//トレース終了、交差点認識 } sub down() //下に下げる動作 { OnRev(OUT_B); Wait(200); } sub STARTING_OPERATION() //スタート地点の四角から脱出する { while(SENSOR_1<Middle) { OnRev(OUT_AC); } while(SENSOR_1>Middle) { OnRev(OUT_AC); } OnRev(OUT_AC); Wait(50); Off(OUT_C); OnRev(OUT_A); Wait(40); while(SENSOR_1<Middle) { OnRev(OUT_AC); } Off(OUT_AC); } sub TURN_180() //180ど回転 { OnFwd(OUT_AC); Wait(80); Off(OUT_AC); OnRev(OUT_A); Wait(130); while(SENSOR_1>40) { OnFwd(OUT_C); OnRev(OUT_A); } Off(OUT_AC); }