2007a/A9/ロボコン

箱を搭載する際のプログラム

流れ.JPG

上のRCX

#define TURN_TIME 237        //180
#define TURN_TIME2 110       //90
#define COLLECT_TIME1 897    //1番上の箱の回収に要する時間
#define COLLECT_TIME 667     //その他の箱の回収に要する時間
#define BACK_TIME 30         //回転の時に箱をまきこまないように後退する時間
#define BACK_TIME2 130       //搭載部分を箱側にむけたあと、回収するための後退時間
#define TURN_MOVE 70         //90度まがるときに、回転の中心を交差点上にもってくる時間
task main() {
 ClearMessage();
 while(true){
  if(Message()==1){                            //1のメッセージを受信したら
    OnRev(OUT_C);Wait(90);Off(OUT_C);          //後ろのアームを開く
    Wait(BACK_TIME+BACK_TIME2+TURN_TIME-90);   //BACK_TIME+TURN_TIME+BACK_TIME2-90
    OnFwd(OUT_A+OUT_C);Wait(160);Off(OUT_C);
    Wait(100);
    Off(OUT_A);
    OnRev(OUT_C);Wait(90);Off(OUT_C);
    Wait(120);
    OnFwd(OUT_A+OUT_C);Wait(160);Off(OUT_C);
    Wait(110);Off(OUT_A+OUT_C);
    ClearMessage();
  }if(Message()==2){                           //2のメッセージを受信したら
    OnRev(OUT_C+OUT_B); Wait(170);             //BCを開いて箱を離す
    Off(OUT_C+OUT_B);                          //本体が箱を積んだ地点から離れるのを待つ
    Wait(250);
    OnFwd(OUT_C+OUT_B);Wait(70);Off(OUT_C);    //離れたので、腕?を閉じる 
    Wait(80);Off(OUT_B);
   ClearMessage();
  }if(Message()==3){
    OnRev(OUT_B+OUT_C);Wait(90);Off(OUT_C+OUT_B);   //後ろの腕?を広げる
    Wait(BACK_TIME+BACK_TIME2+TURN_TIME-90);        //BACK_TIME+BACK_TIME2+TURN_TIME-90
    OnFwd(OUT_A+OUT_C);Wait(70);
    OnFwd(OUT_B+OUT_A);Wait(40);Off(OUT_C);
    Wait(40);Off(OUT_B);
    Wait(250);
    Off(OUT_A);
    ClearMessage();
  }if(Message()==4){
    OnFwd(OUT_A+OUT_C);Wait(70);
    OnFwd(OUT_B+OUT_A);Wait(40);Off(OUT_C);
    Wait(40);Off(OUT_B);
    Wait(250);
    Off(OUT_A);
    ClearMessage();
  }
}}

下のRCX

注※箱搭載のtaskの抜粋なので、変数などは全体のプログラムのほうをご覧ください。

 
task box_collect()                              //ライントレースを停止して箱を回収する
{
 ClearMessage();
   stop line_trace;
 SendMessage(1);                                //上のRCXに通信。箱の回収
   OnFwd(MOTOR); Wait(BACK_TIME); Off(MOTOR);   //トレースを停止して後退
   turn_count2=2; turn_right();   //180度右回転
   OnFwd(MOTOR); Wait(BACK_TIME2); Off(MOTOR); Wait(270); //上のBが開いた状態で後退してもう一方のRCXのほうの回収時間の経過を待つ。
}
task box_collect1()                             //ライントレースを停止して箱を回収する(一番上専用)
{
ClearMessage();
   stop line_trace;
SendMessage(3);                                 //上のRCXに通信。箱の回収
   OnFwd(MOTOR); Wait(BACK_TIME); Off(MOTOR);   //トレースを停止して後退
   turn_count2=2; turn_right();   //180度右回転
   OnFwd(MOTOR); Wait(BACK_TIME2); Off(MOTOR);  //上のBが開いた状態で後退
   OnRev(OUT_B);Wait(400); Off(OUT_B);          //モーターBを動かす時間(4)秒
}

コメントをどうぞ。



添付ファイル: file流れ.JPG 284件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-08-09 (木) 16:57:26