課題2(ライントレース)目次

課題の内容

決められた線の上をボールを動かしながら進み、ゴールにボールを入れられれば成功

コース

unnamed3.jpg

ロボットの説明

ロボットの概形

unnamed.jpg
unnamed2.jpg

動きの説明

コースを辿る際不安定な動きをしながら走る。ただ、しっかりと線の上を走るためゴールにボールを入れることができる。また、線路変更する際には最小限の動きだけで線路変更できるため最小限の速さでゴールまでたどり着けることができる。また、カーブをしっかりと線の上を走る。

プログラミング

#define THRESHOLD 43
#define HIPOWER 5
#define LOWPOWER 3
#define set_power_H SetPower(OUT_AC,HIPOWER);
#define set_power_L SetPower(OUT_AC,LOWPOWER);
#define go   set_power_H; OnFwd(OUT_AC); Wait(5); Off(OUT_AC)
#define turn_left1 set_power_L; OnRev(OUT_A); OnFwd(OUT_C);  // 左旋回
#define turn_left0  set_power_L; Off(OUT_A); OnFwd(OUT_C);   // 左折
#define turn_right0 set_power_L; Off(OUT_C); OnFwd(OUT_A);         // 右折
#define turn_right1 set_power_L; OnRev(OUT_C); OnFwd(OUT_A); // 右旋回
#define STEP 5  // 1回の判断で動作させる時間
#define nMAX 4  // 通常のカーブとして許容できる繰り返しの最大値 (調整する)
#define short_break Off(OUT_AC); Wait(200); // 小休止
#define CROSS_TIME 15  // 交差点通過にかかる時間 //40
/* 交差点を渡る */
#define cross_line  OnFwd(OUT_AC);Wait(CROSS_TIME);short_break;
  task line_trace ()
{ 
 
  int nOnline=0; // 続けて黒になった回数 (カウンタ)
 
 
  while (true) {
                  /* 黒を続けてnMAX回繰り返さない間、通常のライントレースをする */
    while (nOnline < nMAX) {
      if ( SENSOR_1 <= THRESHOLD-4) {  //39 makkuro
        turn_left1;
        nOnline++;  // カウンタを増やす
        } else {
   if ( SENSOR_1 < THRESHOLD) { //
          turn_left0;
         nOnline++;  // カウンタを増やす kaihen
        } else if ( SENSOR_1 <= THRESHOLD+2) {
         go;
        } else if ( SENSOR_1 < THRESHOLD+4) {
          turn_right0; // karukumagaru
        } else {
          turn_right1;
        }
        nOnline=0;  // カウンタをリセット
      }
      Wait(STEP); // nagarenoato matu
    } //while nmax kakko
    short_break; // 小休憩 nmax 4ijo
    PlayTone(488,15); Wait(20);
    turn_right1; Wait(nMAX*STEP*3/2);  // 進行方向修正
    cross_line;  // 交差点を渡る
    nOnline=0; //カウンタをリセット
  } //while true
} //taskmain
    
task main()
{ 
   SetSensor(SENSOR_1, SENSOR_LIGHT);
SetSensor(SENSOR_3, SENSOR_TOUCH);
   ClearTimer(0);
    while( true ) {
        start line_trace;     // ライントレースを開始
        until (SENSOR_3 == 1);   // 
        stop line_trace;      // 一旦 line_trace_line のタスクを停止
        Off(OUT_A+OUT_C); Wait(50);   // 2秒間停止 (この時、main のタスクのみがモータを 制 御)
       OnFwd(OUT_B);Wait(10); OnRev(OUT_B);Wait(10);Off(OUT_B); //catch
 }
 }

反省

動きが遅く線の上での安定さに欠けていた。また、同じところで止まることが多々あり少し残念だった。また書道ロボットと違い、光センサーを使ったり、ロボットだけではなくボールも動かしたりする動作にとても戸惑った。しかし、チームのみんなと協力することでロボットとプログラミングが完成したので良かった。今回はボールを動かすということもありロボット作りに専念した。


添付ファイル: fileunnamed3.jpg 59件 [詳細] fileunnamed2.jpg 75件 [詳細] fileunnamed.jpg 86件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-07-16 (木) 01:47:04 (1494d)