[[2019a/Member]]

[[#adc6e636]]

目次
#contents

*課題について [#zbc4d0e4]
**課題内容 [#a8d8a0f8]
**戦略 [#n4aee92c]
*ロボットについて [#h66aa068]
**カブトロボ [#wea32682]
**クワガタロボ [#j48e441f]
*プログラミングについて [#s723a639]
**定義の設定 [#rdfcc3ec]
以下、defineを使用し定義したプログラミングである。
***値 [#oc2ce9bd]
***動作 [#i6ce8b6a]
**サブルーチン関数の設定 [#i12ffb23]
***ライントレース [follow_line] [#j80370e9]
この関数は光センサーでコースの線の明度を計測し、~
条件に沿って指定した動作をしながら線上を動ていくものだ。~
以下がその関数である。~
-左側の直線トレース
 sub follow_line_l()
 {
     SetSensorLight(S1);
     long t0=CurrentTick();
     while(CurrentTick()-t0<MOVE_TIME){
         if(SENSOR_1>W1){
             rot_r;t0=CurrentTick();
         }
         else if(SENSOR_1>W2){
             turn_r;t0=CurrentTick();
         }
         else if(SENSOR_1>G){
             go_straight;t0=CurrentTick();
         }
         else if(SENSOR_1>B1){
             turn_l;t0=CurrentTick();
         }
         else{
             rot_l;
         }
     }
 } 
-右側の直線トレース 
 sub follow_line_r()
 {
     SetSensorLight(S1);
     long t0=CurrentTick();
     while(CurrentTick()-t0<MOVE_TIME){
         if(SENSOR_1>W1){
             rot_l;t0=CurrentTick();
         }
         else if(SENSOR_1>W2){
             turn_l;t0=CurrentTick();
         }
         else if(SENSOR_1>G){
             go_straight;t0=CurrentTick();
         }
         else if(SENSOR_1>B1){
             turn_r;t0=CurrentTick();
         }
         else{
             rot_r;
         }
     } 
 }

詳細について述べていく。今回は左側直線トレースを取り上げる。~
光センサーがコースの線路の明度を計測。明度ごとに設定された命令をこなす。~
明度と命令の設定は以下。~
#ref(2019a/Member/ohta/Mission2/表.png,50%,ライン)
この表を図化したものが以下である。~
緑→が前進、オレンジ→が回転、青→が旋回を示している。~
(*見やすくするため、〇の中の数字は定義した値にしている。)
#ref(2019a/Member/ohta/Mission2/ライン制御.png,50%,ライン)
「follow_line_l」をフローチャート化すると次のようになる。
#ref(2019a/Member/ohta/Mission2/チャート改.png,65%,チャート)
  始めにCurrentTickをt0に(リセット)する。~
  次に「CurrentTick()-t0<MOVE_TIME」によってCurrentTickの計測時間が~
  MOVE_TIME(250)を超えるまでwhileの中をループし続ける。~
  while文の中にはif文、else文で構成されていて、光センサーの値によって処理が~
  異なるようになっている。光センサーの値が43より大きい値の時(黒以外の時)~
  CurrentTickの値は命令遂行後、常にリセットされ、ループは継続される。~
  しかし光センサーの値が45以下の時(黒の時)、CurrentTickはリセットされない。~
  この状態が一定の時間(MOVE_TIME)続くことで、交差点であると判断し、~
  このループから抜け、止まる構造となっている。~

***一時停止 [short_brake] [#k9d9ee68]
***後進 [back] [#kb6e37bf]
***球のギャッチ [arm_down] [#hebd3031]
***球のシュート [shoot] [#y4aa30b8]
**メインプログラム [#ee4940a2]
***カブトver. [#uc771d5d]
 task main()
 {
     Off(OUT_A);
     go_straight;
     Wait(1000);
     Off(OUT_BC);
     follow_line_l();
     short_break();
     rot_r;
     Wait(400);
     Off(OUT_BC);
     go_straight;
     Wait(800);
     Off(OUT_BC);
     arm_down();
     turn_r;
     Wait(3500);
     Off(OUT_BC);
     shoot();
     Wait(1000);
     rot_r;
     Wait(3800);
     Off(OUT_BC);
     go_straight;
     Wait(6600);
     Off(OUT_BC);
     arm_down();
     back(3000);
     OnRL(0,-SPEED_L);
     Wait(300);
     Off(OUT_BC);
     shoot();
 }
***クワガタver. [#t17493b1]
 task main()
 {
     go_straight;
     Wait(1000);
     Off(OUT_BC);
     rot_l;
     Wait(2800);
     Off(OUT_BC);
     go_straight;
     Wait(3000);
     Off(OUT_BC);
     rot_l;
     Wait(4500);
     Off(OUT_BC);
     go_straight;
     Wait(3000);
     turn_l;
     Wait(8700);
     Off(OUT_BC);
     Wait(27000);
     OnFwd(OUT_A,50);
     Wait(700);
     OnRev(OUT_BC,60);
     Wait(700);
     Off(OUT_BC);
     shoot();
 }
*感想 [#q27b2dd6]
**ロボットについて [#j1247e19]
**プログラミングについて [#sae6b3ab]
**ロボコンの結果について [#d3103ef1]
**この講義を通して [#kd0bcbb3]


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