2019a/Member

目次

課題の内容

コースについて

2019a-mission2.png

ミッションについて

A地点を出発し、次のいずれかの経路を黒い線にそって動くロボットを作成する.

A地点から出発 → M → K(直進) → L(ピンポン玉をつかむ) → K(右折) → J(一時停止の後、左折) → I(直進) → H(直進) → G(左折) → F → E → D(一時停止の後、直進) → C(直進) → B(一時停止) → シュート→ A地点に入る(ゴール)

交差点では1秒間停止し、丁字路では直角方向に進入する時のみ一時停止すること.

ロボットの説明

ロボット本体

小さなカーブも回れるように,出来るだけ小型化しようとしたが,最終的には,最初のものと同じものになってしまった.

IMG_20190715_103106.jpg

光センサー

コース上の色の識別が正確にできるように,地面すれすれの場所に取り付けた.

IMG_20190715_103253.jpg
IMG_20190715_103302.jpg

アーム

今回最も苦労したのがアームの部分だった.写真の通り,モーターが回転すると,隣り合う歯車に回転が伝わり,アームが動く仕組みである.ボールを持ち上げて運ぶのは大変そうだったので,アームで掴んだ後,引きずって運ぶことにした.シュートをする時は,ロボットを急停止させることで,慣性力を利用した.

IMG_20190715_103315.jpg

プログラミングの説明

定義の説明

光センサーによって感知する色を黒(<39),黒っぽい灰色(>39),灰色(>42),白っぽい灰色(>45),白(>48)の5段階に分けた.

senn].png

また、プログラミングを簡略化するために以下の定義を用いた。

#define turn_right OnFwd(OUT_B,25);OnRev(OUT_A,25); //右回り

#define turn_left OnFwd(OUT_A,25);OnRev(OUT_B,25); //左回り

#define right OnFwd(OUT_B,25); //右曲がり

#define left OnFwd(OUT_A,25); //左曲がり

交差点の認識方法

直角の交差点は,カーブに比べて,黒い部分に滞在する時間が長くなるので,その時間差を利用して認識する.試行錯誤した後,0.22秒間で直角の交差点で止まり,カーブでは進み続けることが分かった.

line.png

道路の端を走るライントレース

void follow_line() {

   SetSensorLight(S3);
   long t0=CurrentTick();
   while(CurrentTick()-t0<220) //CurrentTick()-t0が0,22秒未満の限り続ける
     if(SENSOR_3>48){
     turn_right;
     t0=CurrentTick(); //CurrrentTickをt0に戻す
     }else if(SENSOR_3>45){
     right;
     t0=CurrentTick(); //CurrrentTickをt0に戻す
     }else if(SENSOR_3>42){
     OnFwd(OUT_AB,100);
     t0=CurrentTick(); //CurrrentTickをt0に戻す
     }else if(SENSOR_3>39){
     left;
     t0=CurrentTick(); //CurrrentTickをt0に戻す
     }else{
     turn_left;
     CurrentTick();
     }
   Off(OUT_AB);

}

交差点を進むプログラミング

sub kousaten() {

   SetSensorLight(S3);
   long t0=CurrentTick();
   while(CurrentTick()-t0<220)
     if(SENSOR_3>48){
     turn_right;
     t0=CurrentTick();
     }else if(SENSOR_3>45){
     right;
     t0=CurrentTick();
     }else if(SENSOR_3>42){
     OnFwd(OUT_AB,100);
     t0=CurrentTick();
     }else if(SENSOR_3>39){
     left;
     t0=CurrentTick();
     }else{
     turn_left;
     CurrentTick();
     }
   right; //向きを修正
   Wait(500);
   OnFwd(OUT_BC,30); //交差点を進む
   Wait(300);

}

ボールを掴むプログラミング

task main() {

   OnRev(OUT_C,30); //アームを閉じる
   Wait(400);

}

全体のプログラミング

task main() {

M~K

   follow_line();

K~L

   right; //機体を真っ直ぐにする
   Wait(1200);
   OnFwd(OUT_AB,30);
   Wait(1500);

ボールを掴む

   OnRev(OUT_C,30);
   Wait(400);

L~K

   OnRev(OUT_AB,30);
   Wait(2500);
   follow_line();
   left; //曲がる
   Wait(1000);

K~J

   follow_line();
   left; //曲がる
   Wait(1800);

J~I

   follow_line();
   right; //曲がる
   Wait(500);

I~H

   follow_line();
   right; //曲がる
   Wait(500);

H~F

   follow_line();
   left; //直角に曲がる
   Wait(3000);

F~E

   follow_line();
   left; //直角に曲がる
   Wait(1500);

E~D

   follow_line();
   OnFwd(OUT_AB,30); //交差点を進む
   Wait(300);

D~C

   follow_line();
   OnFwd(OUT_AB,30); //交差点を進む
   Wait(300);

C~B

   follow_line();

シュート

   OnRev(OUT_AB,30); //一旦戻って助走をつける
   Wait(500);
   OnFwd(OUT_C,30); //アームを開く
   Wait(200);
   OnFwd(OUT_AB,30);
   Wait(500);

}

まとめ・感想

今回のプログラミングでは,大カーブや交差点の通過をすることが出来たが,結局,小カーブのライントレースは出来なかった.なので,最初から最後まで自動的に進むプログラミングを作成出来ず残念だった.まだまだ改善点はあったと思うので、次回の課題3では,きちんとしたプログラミングを作成出来るよう,頑張りたい.


添付ファイル: filesenn].png 3件 [詳細] fileline.png 4件 [詳細] fileタイトルなし.png 1件 [詳細] fileロボティクス入門ゼミ3.docx 2件 [詳細] fileロボティクス入門ゼミ2.docx 10件 [詳細] fileロボティクス入門ゼミ.docx 9件 [詳細] file色の定義 10件 [詳細] fileIMG_20190715_103315.jpg 7件 [詳細] fileIMG_20190715_103302.jpg 4件 [詳細] fileIMG_20190715_103253.jpg 6件 [詳細] fileIMG_20190715_103200.jpg 1件 [詳細] fileIMG_20190715_103149.jpg 3件 [詳細] fileIMG_20190715_103106.jpg 7件 [詳細] file2019a-mission2.png 5件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-08-14 (水) 16:08:41