目次

はじめに

今回の課題内容は線の上をなぞって動くロボットのプログラミングの作成であった

詳細は、下図のB地点をスタートし、オレンジ色のラインを青の矢印の順に従って動かしていき、交差点を他のk−部と区別し一秒停止、黄色い丸の地点でボールを拾い、最後C地点で、おいてあるゴールに向かい玉をシュートするというものである

コース説明

ロボットについて

ロボットの全体像はこのようになった (見やすくするためコードは外した図となっている)

ロボット

工夫点その1 センサー

ライントレースをするにあたって駆動するタイヤとセンサの距離が重要だと学んだ

具体的にはタイヤとの距離が近い方がラインに沿った動きがしやすく、離れすぎていると少しの角度の変化で大幅にセンサの位置が変わってしまい線をまたいでしまったりしてしまうが、旋回時の回転中心上にセンサがあるとセンサの位置が変化せず、ラインに沿った動きができないというものだった

そのため今回は可能な限りタイヤとセンサを近づけつつ、直上に来ないような設計をし、下図のようにつけることができた。それによりライントレースがスムーズにいくだけでなく、プログラミングに調整を加える際も自分の中でどう変えればいいのかが理解しやすく、完成に一役買ってくれた

センサ

工夫点その2 ボールキャッチ

今回の課題のロボット製作において最も悩まされた部分である

最終的には今回モータの回転方向をそのままいかし、ボールを本体とアームの間に挟んで行く方法とした(下図)

アーム

またこのモータを設置する場所としてNXT本体の反対側のタイヤの上に置くことで両輪にかかる比重の差を減らそうとした。しかしこれにより、摩擦の多い後輪部分に重心が偏ってしまい、前についていたタイヤの空回りなどが増えてしまい制動に際して非常に苦労することになってしまった

積載

プログラミングについて

プログラミングでの工夫

今回のプログラミングを組むに当たってまず、交差点や、カーブを考慮して幅20ミリの線の外側に沿って動かすことにした

交差点の判断は黒と判断して旋回している時間が一定以上だった場合に交差点と判別し、音を出させて一秒間止まらせた。その後の直進、曲がるの判断はあらかじめプログラム上で交差点の数を数えさせて、その数に合わせた行動をさせることにした

ボールの捕獲に関してはQ地点を通過してからの経過時間に基づいてアームを下ろすことにした また、シュートに関してはC地点を判断した段階でアームをあげ本体の前進によりゴールに向かって押し出す形とした

プログラミングの解説

#define TR OnFwd(OUT_C,45);//白寄りの灰色と判断した際のラインによっていくための右に曲がるマクロ
#define TL OnFwd(OUT_B,45);//黒寄りの灰色と判断した際のラインから外に向かうための左に曲がるマクロ
#define SR OnFwdSync(OUT_BC,45,-100);//白い場所での軌道を大幅にライン側へ向ける右旋回のマクロ
#define SL OnFwdSync(OUT_BC,45,100);//黒い場所からラインの縁へ向かうための左旋回のマクロ
#define GF OnFwdSync(OUT_BC,45,0);//ラインの境目をはしらせ時間を短縮するための直進のマクロ
#define XrdTR TR Wait(500);SL Wait(1400);Off(OUT_BC);Wait(300);GF  Wait(500);Off(OUT_BC);n++;//交差点を判断したとき、右折させるためのマクロ
#define XrdST TR Wait(1000);n++;//交差点を判断した時、直進させるときのマクロ
#define UU OnFwd(OUT_A,25);Wait(700);Off(OUT_A);//アームをあげるときのマクロ
#define UD OnRev(OUT_A,25);Wait(700);Off(OUT_A);//アームを下げるときのマクロ
#define XX PlaySound(SOUND_CLICK);Wait(500);Wait(1000);//交差点を判断した時に音を出させるマクロ
task main()
{
 SetSensorLight(S1);
 int n=0;
 long t0 = CurrentTick();
 UU//腕を上げてセットするより地面につけた決まった位置を手動でセットした方が安定するため、まずは その初期位置であるアームが下がった状態からボールがとれるようにここであげておく

 while(n<7){ 
 t0 = CurrentTick(); 
 while(CurrentTick()-t0<600){
  if(SENSOR_1>42){//白を判断した時
    SL
    t0 = CurrentTick();
   }
  else if(SENSOR_1>40){//白寄りの灰色を判断した時
    TL
    t0 = CurrentTick();
   }
  else if(SENSOR_1>38){//ラインの境界をまっすぐに進めるプログラム
    GF
    t0 = CurrentTick();
   }
  else if(SENSOR_1>37){//黒寄りの灰色を判断した時
    TR
    t0 = CurrentTick();
   }
  else{//黒を判断した時
    SR
   }
 }//ここまでが基本のライントレースの動き。黒と判断した旋回以外の時は常にカウントリセットさせ、旋回の時間が一定値を超えたら交差点と判断しループから抜け出させるようにした

 Off(OUT_BC);
 


 
 while(n==6){
      XrdST
      Off(OUT_C);
      UU
      OnFwdSync(OUT_BC,45,0);
      Wait(300);
      n++;//全体のプログラム自体がN=7以下で動かすようにしてあるので、最後ボールをゴールにシュートさせ、全体の動きを止めるようにした
      }      
  while(n==5){
      XrdTR
       }
  while(n==4){
      XX
      XrdST
       }
  while(n==3){
      XrdTR
       }
  while(n==2){
      XX
      XrdST
       }
  while(n==1){
      XX
      XrdST
       PlaySound(SOUND_CLICK);
       Wait(500);
      t0 = CurrentTick();
      while(CurrentTick()-t0<6000){
      if(SENSOR_1>42){
       SL
       }
      else if(SENSOR_1>40){
       TL
       }
      else if(SENSOR_1>38){
       GF
       }
       else if(SENSOR_1>37){
        TR
       }
      else{
       SR
       }
       }
      Off(OUT_BC);
      Wait(500);
      UD     
       }
 while(n==0){
      XX
      XrdTR
       }//ここまでが交差点を判断した時の動きのプログラムで、交差点が判断されるごとにカウントされていきそれぞれの交差点での動きを指示した。特に二回目に交差点を判断させてからは、その後ボールの位置まで移動させボールを取るため、ライントレースン動きを新たに指示した
}
}

まとめ

今回プログラミングをしている際、いくつかの問題点に当たった 一つは直進し続けてしまうというものだったがプログラムの中の行動ごとに音を鳴らさせたり、wait の私事を挟ませることでそれらの問題点はどこに問題があるのかが体感してわかり、修正がしやすかった。次の課題の時にもこういった工夫を取り入れて効率よく作業を進めたい

二つ目としてうまくライントレースができないというものだった。これは工夫点であげたようにタイヤの軸とセンサの位置がはなレ過ぎていることによるものだった。こう言うような機械面での問題点はロボットを組む際に知識としてしれて いないと厳しいと感じたので今後は目的に応じ他ことについてまず調べてから 注意点を感がえくみ上げていきたい

三つ目としては二つ目に付随することでもあるが、空回りによる動作不良による問題点である。今回我々のペアはライントレースに使用する紙を折って保存してしまい、山や谷といった新たな障害物をつくってしまった。それに加え、前述のように重心が駆動輪に対し後ろにかたよってしまい、その山や谷にさしかかった際にうまく力が伝わらず交差点判断など誤作動が多く見られてしまった

以上のような問題点はあったものの無事課題をクリアすることができてよかったと思う。今回の反省点やよかった点を次回につなげていきたい


添付ファイル: fileIMG_1896.JPG 85件 [詳細] fileIMG_1905.JPG 111件 [詳細] fileIMG_1902.JPG 81件 [詳細] fileIMG_1907.JPG 92件 [詳細] file2016b-mission2.png 91件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-12-24 (土) 23:58:05