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

課題

1.A地点からB地点へ (P三叉路およびQ交差点はともに直進)

2.B地点からA地点へ (Q交差点では直進、P三叉路では直進)

3.C地点からA地点へ (Q交差点では直進、P三叉路では右折)

そして、途中(P地点とQ地点)の間においたボール(ピンポン玉またはNXT付属のボール)を 目的地まで運んで、ゴールに入れる。その途中、三叉路および交差点では2秒間停止すること。

可能であれば、A,B,Cのそれぞれにエリアに入る三叉路付近からボールをシュートする。

自分は、1のA地点からB地点へのルートを選択した。

ロボ課題2.1ライン.png

製作する上で工夫した点

ロボット本体

・ロボット本体にパーツを付けやすくするために、モーターを地面に水平にした。

・本体前部にクワ型状のアーム1を取り付けた。

・本体上部前方に、モーターを1つ取り付けてショベル型状のアーム2作った。

・本体下部前方に光センサーを取り付けた。

・本体についている個々のパーツ(アーム1、アーム2)は接合部が複雑でないので簡単に取り外して、片づけることが可能。

本体1.jpg
本体2.jpg

アーム1(クワ型)

・本体前部に、タイヤも含めた横幅と同じ長さのアームを取り付けた。縦の長さはボール2個分の長さと同じにして、やや余裕を持たせた。

・水平に取り付けるとボールが下から通り抜けることがあるので、やや下に傾くようにした。

・タイヤが付いている二つのモーターの間に感覚をもたせ、光センサーがちょうど取り付けられるようにした。アームは二つのモーターに直接取り付けた。

アーム1.jpg
アーム2.jpg

アーム2(ショベル型)

・本体上部前方のクワ型に入ったボールが出ないようにするために、ショベル型のアームを設置した。

・アームの幅はクワガタの横幅と同じにして、ボールが出ないようにした。

・アームは、スタート地点では上にあげていてボールが入るタイミングで下がるようにしている。

・アームが下がりすぎて地面と接触しないように、ストッパーを設置した。

ショベル1.jpg
ショベル2.jpg

プログラム

定義の説明

#define THRESHOLD 39

#define SPEED_H 30

#define SPEED_L 20

#define downtime 1000

#define down OnFwd(OUT_A,40);Wait(500);Off(OUT_A);Wait(300);

#define up OnRev(OUT_A,40);Wait(500);Off(OUT_A);Wait(300);

#define OnRL(speedR,speedL) OnFwd(OUT_B,speedR);OnFwd(OUT_C,speedL);

#define go_forward OnRL(SPEED_H, SPEED_H);

#define turn_left1 OnRL(SPEED_L, -SPEED_L); // 左旋回

#define turn_left0 OnRL(SPEED_L, 0); // 左折

#define turn_right0 OnRL(0, SPEED_L); // 右折

#define turn_right1 OnRL(-SPEED_L, SPEED_L); // 右旋回

#define STEP 1

#define nMAX 300

#define short_break Off(OUT_BC); Wait(1000); // 小休止

#define CROSS_TIME 500

#define goal OnRev(OUT_BC,50);Wait(500);Off(OUT_BC);Wait(500);\

up;OnFwd(OUT_BC,80);Wait(200);Off(OUT_BC);

#define cross_line OnRL(SPEED_L,SPEED_L);Wait(CROSS_TIME);short_break;

実際のプログラム

#define THRESHOLD 39
#define SPEED_H 30
#define SPEED_L 20
#define downtime 1000
#define down OnFwd(OUT_A,40);Wait(500);Off(OUT_A);Wait(300);
#define up OnRev(OUT_A,40);Wait(500);Off(OUT_A);Wait(300);
#define OnRL(speedR,speedL) OnFwd(OUT_B,speedR);OnFwd(OUT_C,speedL);
#define go_forward OnRL(SPEED_H, SPEED_H);
#define turn_left1 OnRL(SPEED_L, -SPEED_L); // 左旋回
#define turn_left0 OnRL(SPEED_L, 0); // 左折
#define turn_right0 OnRL(0, SPEED_L); // 右折
#define turn_right1 OnRL(-SPEED_L, SPEED_L); // 右旋回
#define STEP 1
#define nMAX 300 
#define short_break Off(OUT_BC); Wait(1000); // 小休止
#define CROSS_TIME 500 
#define goal OnRev(OUT_BC,50);Wait(500);Off(OUT_BC);Wait(500);\
up;OnFwd(OUT_BC,80);Wait(200);Off(OUT_BC);
#define cross_line OnRL(SPEED_L,SPEED_L);Wait(CROSS_TIME);short_break; 

task main()

{

 SetSensorLight(S3);
 int nOnline=0; // 続けて黒になった回数 (カウンタ)
 int cross_count=0;
 int goal_count=0;
 int nOnwhite=0;
 long t0=CurrentTick();
 while (cross_count<2)
 {
  while (nOnline < nMAX) 
  {
   if(CurrentTick()-t0<=downtime&&downtime-1<CurrentTick()-t0)
    {
    down;
    }
   if (SENSOR_3 < THRESHOLD-6) 
    {
    turn_left1;
    nOnline++; // カウンタを増やす
    }
   else
    {
    if (SENSOR_3 < THRESHOLD-3) 
     {
     turn_left0;
     }
    else if (SENSOR_3 < THRESHOLD+5)
     {
     go_forward;
     }
    else if (SENSOR_3 < THRESHOLD+8)
     {
     turn_right0;
     }
    else
     {
     turn_right1;
     }
    nOnline=0; // カウンタをリセット
    }
   Wait(STEP);
   }
  short_break; // 小休憩
  turn_right1; Wait(nMAX*STEP); // 進行方向修正
  cross_line; // 交差点を渡る
  nOnline=0; //カウンタをリセット
  cross_count++;
 }
 t0=CurrentTick();
 while(goal_count<1)
 {
  while (nOnwhite<nMAX) 
  {
   if(SENSOR_3 >= THRESHOLD+8)
    {
    turn_right1;
    if(CurrentTick()-t0>4000)
     {
     nOnwhite++;
     }
    }
   else
    {
    if (SENSOR_3 < THRESHOLD-6) 
     {
     turn_left1;
     }
    else if (SENSOR_3 < THRESHOLD-3) 
     {
     turn_left0;
     }
    else if (SENSOR_3 < THRESHOLD+5)
     {
     go_forward;
     }
    else
     {
     turn_right0;
     }
   nOnwhite=0;
    }
   Wait(STEP);
   }
  short_break; // 小休憩
  turn_left1; Wait(nMAX*STEP); // 進行方向修正
  goal;
  goal_count++;
 }
 Off(OUT_BC);
}

作成した上での残った課題

・ショベル型のアームが重くなってしまい、モーターの力具合によっては上下動が出来ないことがあったので、制御が必要になってしまった。

・全体的に、本体前部にパーツが集中しているのでロボット全体が前のめりになってしまった。

・シュートするプログラムに挑戦したが、上手くできなかった。

感想と反省

・自分の班のロボットはボールが出ないように、上からボールをかぶせるアームを取り付けた。しかし理想はボールをアームでつかむことだったが時間が無くてその機構を作ることが出来なかった。もう少し時間があれば理想に近づけたかなと思う。

・実際にプログラムを作ってロボットがその通りに動いてくれた時は素直に嬉しかった。

・もう少しパーツを工夫して使って、スマートなロボットを作るようにすればよかった。


添付ファイル: fileショベル2.jpg 178件 [詳細] fileショベル1.jpg 208件 [詳細] fileアーム2.jpg 107件 [詳細] fileアーム1.jpg 216件 [詳細] file本体2.jpg 190件 [詳細] file本体1.jpg 190件 [詳細] fileロボ課題2.1ライン.png 255件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-08-03 (月) 15:45:49 (1483d)