2015b/Member

目次

課題内容

ライントレースカーの作成

2015b-mission2.png

上の図が課題のコースです。 私は次のような順路でライントレースしました。

A→P直進→Q直進→Q右折→P右折→Q左折→P左折→B

また、課された条件は

・光センサーの使用は一つ

・交差点では1秒間停止する

というものでした。二つ目の条件はロボットが交差点を判断しているかを明確にするためのものです。

ロボット本体

次の写真がロボットの全体です。

image1.JPG写真1→ image1(6).JPG写真2 image2(1).JPG写真3

ドライブベースのロボットでは動作は左折、右折など進行方向を変えるものから成るため、ロボットの車体の重さで大きなブレが出てしまい、ラインから脱線してしまうことがありました。

そのことを踏まえ、ブレを最小限にするために車体をできる限り軽く簡素に仕上げました。(1のロボット)

1のロボットでも身軽である自信あったのですが、先生のアドバイスにより、後輪をも取り払うことにしました。(2のロボット)そして車体と地面との摩擦を少なくするために、写真3のような部品を取り付けました。この改良により、一層身軽になりました。

プログラム

ライン上を進む、交差点を{直進or右折or左折}するの4つの動きからなるので、サブルーチンと定義を使いました。

定義、サブルーチンのプログラム

#define THRESHOLD 40
#define straight OnFwd(OUT_AC);Wait(40);Off(OUT_AC);
#define light OnFwd(OUT_A);OnRev(OUT_C);Wait(50);Off(OUT_AC);Wait(100);OnFwd(OUT_AC);Wait(40);Off(OUT_AC);
#define left OnFwd(OUT_C);Off(OUT_A);Wait(50);Off(OUT_AC);
int tmax=20;

sub line()
{ 
   ClearTimer(0);
   while(FastTimer(0)<=tmax)
    { 
     if (SENSOR_2>49){   //migi旋回
          OnFwd(OUT_A);
          OnRev(OUT_C);
          ClearTimer(0); 
     } else if(SENSOR_2>46){    //migi折
          OnFwd(OUT_A);
          Off(OUT_C);
          ClearTimer(0);
     } else if(SENSOR_2>43){    //中間
          OnFwd(OUT_AC);
          ClearTimer(0);
     } else if(SENSOR_2>39){    //hidari折
          OnFwd(OUT_C);
          Off(OUT_A);
          ClearTimer(0);
     } else {         //hidari旋回
          OnFwd(OUT_C);
          OnRev(OUT_A);
      }
   }//whileカッコ閉
  Off(OUT_AC);PlaySound(SOUND_CLICK);Wait(100);
}

交差点における右折について、左旋回にかかる秒数で交差点かどうかを判断しているために、交差点にて右折したい場合もロボットは必ず左折方向を向いて静止するので、一度その場で右旋回をしてから○○秒間直進する、というプログラムにしました。

また、ライントレースは進行方向の道に対して左側をトレースするために、右折の際には道を横断しなければならないことにも注意しました。

定義、サブルーチンにより、メインタスクは以下のようにシンプルなものになりました。

メインタスクのプログラム

task main()
{
 SetSensor(SENSOR_2,SENSOR_LIGHT);
 line();
 straight;   //
 line();
 straight;  //
 line();
 light;   //
 line();
 light;   //
 line();
 left;   //
 line();
 tmax=20;
 left;   //
 line();
 straight;   //
}

以上のようなプログラムではイ鮓鮑硬世犯獣任垢襪海箸できませんでした。ラインの構造上、交差点判断のタイマーを短くしなくてはなりませんでした。しかし、TMAXを15、16、17で試したところ、普通のライントレース上でも交差点と誤って感知してしまいました。そこで先生のアドバイスのもと、交差点の数をカウントしていき、イ砲ける交差点だけ判断する時間を短くするプログラムにしました。

それは

int cross=0;

を使い、ライントレースが1区画のライントレースが終わるたびに交差点を数えるプログラムを使いました。

sub line() の最後に

cross++;

を付け加えます。交差点を4つ通過したあと、イ慮鮑硬世鯒知するためにぁ銑イ里△い世TMAXをTMAX=15に設定しました。

if(cross=4){tmax=15};

これで交差点イ鯣獣任垢襪海箸發任ました。

反省、感想

今回の課題はプログラミングに重点が置かれており、非常に苦手意識を持ちました。先生にたくさんのアドバイスをいただき、やっと完成することができました。時間がかかった分、このプログラム、ロボット本体にすごく愛着を感じています。ありがとうございました。

写真の向きはどうも修正できませんでした。編集したら取り込めないファイルになってしまったり。


添付ファイル: fileimage1(6).JPG 99件 [詳細] fileimage2(1).JPG 93件 [詳細] fileimage1.JPG 88件 [詳細] file2015b-mission2.png 109件 [詳細] fileimage2.JPG 49件 [詳細]

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