課題2

課題内容

 決められたコースで黒い線に沿って動き,350㎖の空き缶を移動させるロボットを作る.このレポートではミッションの第一コースを走る.

ロボットの説明

全体像

DSC_0199-800x450[1].JPG

タイヤ部分

DSC_0201-800x450[1].JPG

 最初の機体は後ろ側の二輪だけが動く二輪駆動のものだったが,急なカーブが曲がり切れなかったため,前側の二輪も動く四輪駆動のものに変更した.

アーム部分

DSC_0202-600x1067[1].JPG

 左右のギアのサイズを同じにすることで力や速さに差が出ないようにしている.また,トルクギアを組み込むことによって缶の大きさに関係なくつかめるうえに,回し続ければアームに常に力を加えることも可能である.

プログラミングの説明

サブルーチン

#define RESET ClearTimer(0)
#define sasetu OnFwd(OUT_C)
#define usetu OnFwd(OUT_A)
#define tyokusin OnFwd(OUT_AC)
#define STOP Off(OUT_AC)
#define kaitenR OnFwd(OUT_A);OnRev(OUT_C)
#define kaitenL OnFwd(OUT_C);OnRev(OUT_A)
#define SOUND PlaySound(SOUND_UP)
sub lineL()
{
   RESET;
   while(FastTimer(0)<50){
   if(SENSOR_1<50){
   sasetu;
   Wait(5);
   STOP;
}
   else{
   usetu;
   RESET;
   Wait(5);
   STOP;
}
}
   SOUND;
}

 黒いラインの左側をトレースするプログラム.

sub lineR()
{
   RESET;
   while(FastTimer(0)<50){
   if(SENSOR_1<50){
   usetu;
   Wait(5);
   STOP;
}
   else{
   sasetu;
   RESET;
   Wait(5);
   STOP;
}
}
   SOUND;
}

 黒いラインの右側をトレースするプログラム.  両方終わったことが分かるように最後に音が鳴るようにしている.

メイン

task main()
{
   SetSensor(SENSOR_1,SENSOR_LIGHT);
   tyokusin;
   Wait(100);
   STOP;//Aを出る
   lineL();
   OnRev(OUT_C);
   Wait(30);
   STOP;
   Wait(100);
   tyokusin;
   Wait(30);//Cをこえる
   STOP;

 このときラインの左側をトレースしているため,Bの交差点には反応しない.

   lineL();
   kaitenL;
   Wait(50);
   OnRev(OUT_B);//念のためアームを開いておく
   lineL();//Dに到達
   OnRev(OUT_C);
   Wait(40);
   STOP;
   Wait(100);
   OnFwd(OUT_B);
   Wait(50);//缶を掴む
   Off(OUT_B);
   tyokusin;
   Wait(10);
   STOP;
   kaitenL;
   Wait(40);
   STOP;

 缶を掴む一連の動きのプログラミング.次の動きに入りやすいように円のD地点の接線方向に向きを変えるまでをこのプログラムとしている.

   lineL();
   OnRev(OUT_C);
   Wait(60);
   STOP;
   tyokusin;
   Wait(20);//Eをこえる
   lineL();
   kaitenL;
   Wait(20);//Fを左折
   lineL();
   Wait(100);
   kaitenL;
   Wait(40);//Gを左折
   STOP;
   tyokusin;
   Wait(30);
   STOP;

 半円のカーブが内側をトレースしていては曲がり切れないため,少し直進をはさみ,ラインの外側トレースするようにしている.

   lineR();
   kaitenR;
   Wait(50);
   STOP;//直角カーブを曲がる
   lineR();
   tyokusin;
   Wait(20);
   STOP;
   kaitenR;
   Wait(30);
   STOP;

 前の半円カーブと同様に,内側をトレースしていては曲がり切れないため,直進をはさみライン外側をトレースするようにしている.

   lineL();
   OnRev(OUT_C);
   Wait(30);
   STOP;
   Wait(100);
   usetu;
   Wait(160);//Hを右折
   STOP;
   lineR();
   Wait(100);
   kaitenR;
   Wait(20);//Iを右折
   STOP;
   lineR();
   OnRev(OUT_A);
   Wait(40);
   STOP;
   tyokusin;
   Wait(20);//Lを越える
   lineR();
   OnRev(OUT_A);
   Wait(40);
   STOP;
   tyokusin;
   Wait(20);//Kを越える
   lineR();
   OnRev(OUT_A);
   Wait(30);
   STOP;
   Wait(100);
   kaitenL;
   Wait(70);//90度回転
   STOP;
   OnRev(OUT_B);
   Wait(50);
   Off(OUT_B);//缶を離す
   OnRev(OUT_AC);
   Wait(70);
   STOP;
   kaitenR;
   Wait(70);
   STOP;
   tyokusin;
   Wait(60);
   STOP;
   kaitenR;
   Wait(70);
   STOP;
   lineL();
   Wait(100);
   kaitenL;
   Wait(60);//Bを左折
   lineL();
   OnRev(OUT_C);
   Wait(30);
   STOP;
   tyokusin;
   Wait(150);
   STOP;//Aに到達
}

まとめ

結果

 一回は成功することができた.だが,成功率が低くほとんど失敗に終わった.

反省

 今回のロボットはアームを前に出しすぎたため,缶の抵抗で動きにくくなってしまったり,アームが外れかけるといった問題が発生した.プログラミングは調子が良い時と悪い時で差が大きく出るものとなってしまった.

感想

 今回の課題は機体は改良を繰り返し,いいものになったが,プログラミングが難しかった.電池の具合や機体の場所などによって,成功したり,失敗したりしてしまった.微調整を繰り返したがなかなか成功率が上がらなかった.これからプログラミングの技術をもっと身につけ,できることを多くしていきたい.


添付ファイル: fileDSC_0199-800x450[1].JPG 123件 [詳細] fileDSC_0201-800x450[1].JPG 114件 [詳細] fileDSC_0202-600x1067[1].JPG 134件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-07-19 (木) 00:12:32