[[2009b]]
#contents



***プログラム






*組織 [#aff99b13]
  SIS イギリス情報局秘密情報部 極東支部担当 第7兵站局 
*任務内容  [#i93ae4fe]
*Secret Agent [#ha6c0168]
部隊長 階級中将~
以下二名 しかし機密事項に相当するためコードネーム、階級、所属 その他一切の情報は一般の報告書には記載出来ない。
*任務内容 〜プロローグ〜  [#i93ae4fe]
 近年、その政治情勢に不穏な動向が確認されている中華人民共和国に主力部隊 人民解放軍の大規模な動きが見られた。~
 我が国はこの軍事行動を脅威と断定、急遽閣僚を召集、緊急閣議を開く。~
 SISの報告書によると中国は近頃活発にソビエト連邦と連絡を密にしていた。裏付けは取れなかったがKGBが河南省に潜入、何らかの工作を行っていた可能性もある。~
 不安要素が多すぎる為に予想を裏切らず議会は紛糾を極めたが閣議を開いてから45時間後、事態は急展開を見せた。防衛省管轄の兵器開発局にCIA諜報員が接触。何らかの機密情報に対して取引を持ちかけ模様。~
 閣僚召集から57時間後 王室海兵隊に予備命令が下された、発令元は英国海軍幕僚総長。その更に3時間後事態の詳細は伏せたままで次の要件を満たす偵察機の開発を要請された。~   
  主任務 この条件をクリアすることが任務達成の最低条件~ 
 不確定要素が多すぎる為に予想を裏切らず議会は紛糾を極めたが閣議を開いてから45時間後、事態は急展開を見せた。防衛省管轄の兵器開発局にCIA諜報員が接触。何らかの機密情報に対して取引を持ちかけ模様。詳細は不明~
 閣僚召集から57時間後 王室海兵隊に予備命令が下された、発令元は英国海軍省幕僚総長。その更に3時間後事態の詳細は伏せたままで次の要件を満たす偵察機の開発を要請される。~~
  
主任務 この条件をクリアすることが任務達成の最低条件 ~
 
   1、光センサーを用いた特定経路のみの走行を可能とする自律可動型特殊装甲車の作成~
   2、その際遭遇するであろう各障害物の撤去及び運搬を自在に行いうる機能、構造を備えること~
  副任務 必ずしも満たす必要は無いが 
     2、その際遭遇するであろう各障害物の撤去及び運搬を自在に行いうる機能、構造を備えること~

  副次目標 必ずしもクリアする必要は無いが満たしている事が望まれる~ 
   3、1 2の諸条件を満たしつつ可能な限り迅速に任務を遂行できる機動性を持つこと~
   4、戦場に置いて任務の際に各種メンテを取り行う主任エンジニアが専属するとは限らないために専門の知識を持たない者も容易に管理、運用出来る高い利便性を付与することが望ましい~
   4、戦場に置いて任務の際に各種メンテを取り行う主任エンジニアが専属するとは限らないために専門の知識を持たない者も容易に管理、運用出来る高い利便性を付与すること~
   5、割り振られる予算を考えると製造する偵察機の生産コスト+機体の総重量は可能な限り落とすものとする~
  
 期限、14日 

*コース [#d1d9558c]
#ref(./091203_1937~0001-1.jpg,サイズ,画像の説明);

*構造 [#m7297ec6]
**アーム部分 [#ndff369b]
 本体の上にモーターをつけて回転できるようにしました。
&ref(./091201_1454~0001.jpg,サイズ,画像の説明);
&ref(./091201_1455~0001.jpg,サイズ,画像の説明);
 歯車を使ってアームの回る速さを調節。こんな感じです。
 ただ、それでも回る速さは少し速いです。
&ref(./091201_1434~0002.jpg,サイズ,画像の説明);
&ref(./091201_1435~0001.jpg,サイズ,画像の説明);
**タッチセンサー [#v5211c1c]
 なかなかうまく反応してくれなかったので、重くしました。
&ref(./091201_1435~0002.jpg,サイズ,画像の説明);
&ref(./091201_1436~0001.jpg,サイズ,画像の説明);
**本体 [#v470a66c]
 三輪にして機動力をアップ。また車輪を大きくしてスピードアップ。
 光センサーの位置(センサーとセンサーとの距離)は少しなら調節可能です。
&ref(./091201_1437~0001.jpg,サイズ,画像の説明);
&ref(./091201_1437~0002.jpg,サイズ,画像の説明);
&ref(./091201_1438~0001.jpg,サイズ,画像の説明);
 紙パックを運ぶときはアームを使って紙パックを挟みます。
&ref(./091201_1439~0001.jpg,サイズ,画像の説明);


*まさやのプログラム [#p76bd8b2]
 コース上の紙パックを後ろにどかして進む
 
 #define go OnFwd(OUT_A+OUT_C);  //前進
 #define stay Off(OUT_A+OUT_C);  //停止
 #define arm_l OnFwd(OUT_B);Wait(140);Off(OUT_B);//腕を左回り(反時計回り)に180度回転
 #define arm_r OnRev(OUT_B);Wait(140);Off(OUT_B);//腕を右回り(時計回り)に180度回転
 #define eye_l SENSOR_1
 #define eye_r SENSOR_3
 
 task main()
 {
    SetSensor(eye_l,SENSOR_LIGHT);   //センサー1を光センサー
    SetSensor(SENSOR_2,SENSOR_TOUCH);//センサー2をタッチセンサー
    SetSensor(eye_r,SENSOR_LIGHT);   //センサー3を光センサー
 
    while (true) {
        start follow_line;   //線のトレースを開始
        until(SENSOR_2 == 1);//紙パックにぶつかるまで続ける
        stop follow_line;
        stay;            //ぶつかったら停止
        arm_l;           //腕を左回りに回転、紙パックを後ろへ
        Wait(100);
        arm_r;           //腕を右回りに回転して元の位置に戻す
        Wait(100);
 
    }
 }
 
 task follow_line() //線をたどるプログラム
 {
    while(true){
        Wait(50);
        go;         //光センサーが両方白い所にある場合前進
        until((eye_l < 40)||(eye_r < 40));
        stay;
           if((eye_l < 40)&&(eye_r > 40)){ //左の光センサーが線に乗った場合
               OnFwd(OUT_C);OnRev(OUT_A);  //右に方向修正
               until((eye_l > 40)&&(eye_r > 40));//両方の光センサーが白に行くまで
               stay;
              }
           if((eye_l > 40)&&(eye_r < 40)){ //右の光センサーが線に乗った場合
               OnFwd(OUT_A);OnRev(OUT_C);  //左に方向修正
               until((eye_l > 40)&&(eye_r > 40));//両方の光センサーが白に行くまで
               stay;
              }
           if((eye_l < 40)&&(eye_r < 40)){ //両方の光センサーが線上にきた場合
                                                     //つまり交差点にきた場合
               go;    //前進
               until((eye_l > 40)&&(eye_r > 40));//交差点を過ぎるまで
               stay;
              }
    }
 }
 本体作りはゆあ君がとてもがんばって作ってくれました。
 タッチセンサーは重くしすぎると走行の振動で反応してしまうし、軽いと紙パックに
 反応しなかったりと大変でした。
 紙パックを後ろに置く、というよりは後ろに投げるという感じになってしまいました。
 それに急なカーブを曲がれなかったり、交差点をまっすぐではなくて曲がってしまう
 ことがあります。
 それとモーターが悪いのか、他に理由があるのかわからないけど、ロボットがまっすぐ
 走りませんでした。
*ゆあのプログラム [#cc36001d]
 sub left(){ OnFwd(OUT_B); Wait(140); Float(OUT_B); } //腕を左に回す
 sub  right(){ Rev(OUT_B); Wait(70); Float(OUT_B);}   //腕を右に回す
 task main(){
    SetSensor(SENSOR_l,SENSOR_LIGHT);   //センサー1を光センサー
    SetSensor(SENSOR_2,SENSOR_TOUCH);//センサー2をタッチセンサー
    SetSensor(SENSOR_3,SENSOR_LIGHT);   //センサー3を光センサー
    repeat(3){       //3つのパックを交差点に置くため3回繰り返す
 	
 	while(SENSOR_2==0){       
        	OnFwd(OUT_A+OUT_C);
 		until((SENSOR_1 <40)||(SENSOR_3 <40));
 
              if (SENSOR_1 <40){       //センサー1が黒い線に入ったら左に曲がる
          	   Off(OUT_A+OUT_C); Wait(15); 
 		   OnFwd(OUT_C); 
                     until((SENSOR_1 >40)&&(SENSOR_3 >40));
                     Off(OUT_C+OUT_A);  
                  } 
              if (SENSOR_3 <40){      //センサー2が黒い線に入ったら右に曲がる
                 Off(OUT_A+OUT_C); Wait(15);
                 OnFwd(OUT_A);
                     until((SENSOR_1 >40)&&(SENSOR_3 >40));
                     Off(OUT_A+OUT_C); 
                 } 
              
             if (SENSOR_2==1){     //タッチセンサーが反応した時
 		      Off(OUT_A+OUT_C); 
                    right();  //腕を右に回し、パックをつかむ
                 }
         } 
      	  else if((SENSOR_1<40)&&(SENSOR_3 <40)){ //交差点に入ったら一時停止
 		      Off(OUT_A+OUT_C);
                     left();            //腕を左に回し、パックを置く
  	        }
 
       }
 }
 今回のプログラムでは腕を回す力の調整が大変でした。モーターを回す時間が長すぎ 
 るとパックが飛びすぎたり、短すぎると後ろまで届かなかったり……
 線上を動かすのも、方向転換の前にいったん停止させるなど、線をオーバーしない工夫
 が大変でした。
 まさや君のプログラムでも僕のプログラムでもきついカーブなど線をオーバーしてし
 まうことがあります…
 センサーに問題があるのか、走る速度が速すぎるのか……

*幕僚総長のプログラム [#s75f16be]
task main(){

   SetSensor(SENSOR_1,SENSOR_LIGHT);  //センサー1を光センサーに設定
   SetSensor(SENSOR_2,SENSOR_TOUCH);  //センサー2を感圧センサーに設定
   SetSensor(SENSOR_3,SENSOR_LIGHT);   //センサー3を光センサーに設定
   
     
   while(SENSOR_2 ==0){   //感圧センサーが押されない限り以下の行動を行う
   
      OnFwd(OUT_A+OUT_C);  //前進
   
      if((SENSOR_1 <45)&&(SENSOR_3 <45)){          //センサー1とセンサー2が共に光量45以下になった時の条件分け
                 Off(OUT_A+OUT_C);  Wait(15);          //モーター駆動を0.15秒間止める
                 OnFwd(OUT_A+OUT_C);   Wait(5 );       //モーターA、B共に0.05秒間前進する
                 until((SENSOR_1 >45)&&(SENSOR_3 >45));  }  //以下の行動をセンサー1、3双方の光量が45以上になるまでつづける
           
   
      if((SENSOR_1 <45)&&(SENSOR_3 >45)){
                 Off(OUT_A);  Wait(5);    
               
                      if((SENSOR_1 <45)&&(SENSOR_3 <45)){
                               Off(OUT_A+OUT_C);  Wait(15);    
                               OnFwd(OUT_A+OUT_C);   Wait(5 );
                               until((SENSOR_1 >45)&&(SENSOR_3 >45));  }
                      
                             if((SENSOR_1 <45)&&(SENSOR_3 >45)){
                                    OnRev(OUT_A);     Wait(5);     
                                
                                    if((SENSOR_1 <45)&&(SENSOR_3 <45)){
                                             Off(OUT_A+OUT_C);  Wait(15);    
                                             OnFwd(OUT_A+OUT_C);   Wait(5 );
                                             until((SENSOR_1 >45)&&(SENSOR_3 >45));  }
                      
                                    if((SENSOR_1 <45)&&(SENSOR_3 >45)){
                                            Wait(5);     
                                            until((SENSOR_1 >45)&&(SENSOR_3 >45));  }}}
           
           
           
      if((SENSOR_1 >45)&&(SENSOR_3 <45)){
                 Off(OUT_C);  Wait(5);    
                     
                       if((SENSOR_1 <45)&&(SENSOR_3 <45)){
                                 Off(OUT_A+OUT_C);  Wait(15);    
                                 OnFwd(OUT_A+OUT_C);   Wait(5 );
                                 until((SENSOR_1 >45)&&(SENSOR_3 >45));  }  
                     
                        if((SENSOR_1 >45)&&(SENSOR_3 <45)){
                                  OnRev(OUT_C);     Wait(5);  
                                  
                                   if((SENSOR_1 <45)&&(SENSOR_3 <45)){
                                             Off(OUT_A+OUT_C);  Wait(15);    
                                             OnFwd(OUT_A+OUT_C);   Wait(5 );
                                            until((SENSOR_1 >45)&&(SENSOR_3 >45));  }
                      
                                    if((SENSOR_1 <45)&&(SENSOR_3 >45)){
                                                        Wait(5);     
                                                        until((SENSOR_1 >45)&&(SENSOR_3 >45));  }}}
           
           
           }
           }

 こまかくifを使って分けているのは十字路においてまっすぐ走行する為。例えば十字路に直面してもコースの関係で光センサーが同時に作用するとは限らない。
 だから光センサーがひとつだけ反応してもいきなり大きくは曲がらずまずはほんのちょっと曲がる。そして光センサーが二つ反応するようなら直進、相変わらず反応がひとつならそのままカーブを続けるといった。可変型プログラムを構築した。


*コメントをどうぞ [#fcc45eec]
#comment


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS