目次

はじめに

risを使って光センサーによりライントレースを行う。

自分達でコースを作成し、出来るだけ早くゴールすることを目的とする。

コースは以下の通りである。

2016a-mission2.png

自分は今回A→P→Q→R→Bのコースを担当した

ロボット本体の説明

今回使ったロボットは以下である

index.jpeg

ロボットの中心がラインの中心になるよう光センサーは少し左に設置した

ラインを判別しやすいよう光センサーはできるだけ地面に近づけました。

プログラムの説明

最初に以下の定義をした。

#define Black 42   //これ以下は黒
#define White 51  //これ以上は白
#define turn_right OnFwd(OUT_A); OnRev(OUT_C); Wait(turn_time);   //右へ旋回
#define turn_rightP OnFwd(OUT_A); Off(OUT_C); Wait(turn_time);//右折
#define turn_left OnFwd(OUT_C); OnRev(OUT_A); Wait(turn_time);    //左へ旋回
#define turn_leftP OnFwd(OUT_C); Off(OUT_A); Wait(turn_time);//左折
#define go_forward(t) OnFwd(OUT_AC); Wait(t); Off(OUT_AC);//直進
#define STEP 1

サブルーチン

タスクメインを簡単にするために以下のサブルーチンを利用した。

sub line_trace()
{
 ClearTimer(0); 
  while(FastTimer(0) <=50){
   if (SENSOR_2 < Black) {         //黒
        turn_right;
     } else if (SENSOR_2 < Black ) {   //黒よりの灰色
        turn_rightP;
     } else if (SENSOR_2 > White) {   //白よりの灰色
        turn_leftP;
        ClearTimer(0);
     } else if (SENSOR_2 >= White) {     //白
        turn_left;
        ClearTimer(0);
     } else {                            //それ以外
     OnFwd(OUT_AC);
     ClearTimer(0);
     }
     Wait(STEP);
  }
  Off(OUT_AC);
  ClearTimer(0);
  PlaySound(SOUND_UP);
  Wait(110);
} 
sub line_left()
{
while (FastTimer(0) <  140 ) {
    turn_leftP;
  }
  ClearTimer(0);
}
sub line_left_H()
{
  while (FastTimer(0) < 230) {
    turn_left;
  }
  ClearTimer(0);
}
task main()
{
SetSensor(SENSOR_2, SENSOR_LIGHT);
go_forward(130);
line_trace();
line_left();
line_trace();
line_left();
line_trace();
line_left();
line_trace();
line_left_H();
go_forward(130);
line_trace();
}

交差点の判別方法

FastTimerを使い、一定時間右旋回か右折が続いたら交差点と判断するようにした。 sub line_trace()

{
 ClearTimer(0); 
  while(FastTimer(0) <=50){
   if (SENSOR_2 < Black) {         //黒
        turn_right;
     } else if (SENSOR_2 < Black ) {   //黒よりの灰色
        turn_rightP;
     } else if (SENSOR_2 > White) {   //白よりの灰色
        turn_leftP;
        ClearTimer(0);
     } else if (SENSOR_2 >= White) {     //白
        turn_left;
        ClearTimer(0);
     } else {                            //それ以外
     OnFwd(OUT_AC);
     ClearTimer(0);
     }
     Wait(STEP);
  }

感想

僕自身の感想だが、前回より格段に難易度が上がっている気がする。今回も100%ゴールできたわけではなかったので次の最後の課題を頑張りたい


添付ファイル: fileindex.jpeg 136件 [詳細] file2016a-mission2.png 126件 [詳細]

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