ロボットの概形

gaikei.jpg

私たちが作ったロボットは車体部分の前方にアーム部分を取り付けた形になっている。

body4[1].jpg

後輪部分にはキャスターを用いてスムーズに走れるように工夫した。

body2[1].jpg

ライントレーサーをできるだけ中心に近い位置に着けて大きく揺さぶられないようにした。このことによりさらに滑らかに走れるようになった。

アームの部分

arm2[1].jpg
arm1[1].jpg

アームの部分は挟むような形ではモーターの回転速度が速く、安定しないため囲う形にした。回る軸に足をつけることにより囲いを開けると同時にボールを押し出す仕組みにして最後のゴールにボールを入れるときにシュートするようなかたちにした。囲むことでボールを移動している最中も落とさないように工夫した。モーターを使って上げ下げをしている。

tukamu.jpg

このようにボールを囲むようにした。

課題の内容

今回の課題内容はライントレースロボットを作り、下の画像のコースを走るということである。 途中のP〜Q地点のどこかにボールを置きそのボールを指定されたゴールまでもっていくというかとでした。

map.png

プログラミング

カウンターで連続で黒だと判断したら交差点だと判断させた。

#define BLACK 42	//以下は黒
#define WHITE 50	//以上は白
#define go_forward OnFwd(OUT_AC);	//前へ
#define go_back OnRev(OUT_AC);		//後ろへ
#define turn_right OnRev(OUT_C); OnFwd(OUT_A);		//右旋回
#define turn_left OnFwd(OUT_C); OnRev(OUT_A);		//左旋回
#define STEP 1  // 一回の判定で進む時間
#define short_break Off(OUT_AC); Wait(200); // 小休止
#define CROSS_TIME 20  // 交差点通過にかかる時間
#define cross_line go_forward;Wait(CROSS_TIME);short_break;	//交差点を渡る
#define FIX_TIME 15
#define nMAX 8
#define clip_on OnFwd(OUT_B);Wait(10);Off(OUT_B);
#define clip_off OnRev(OUT_B);Wait(10);Off(OUT_B);
#define shoot go_back;Wait(50);go_forward;Wait(30);clip_off;	//シュート
task main()
{
 SetSensor(SENSOR_2, SENSOR_LIGHT);
 int nOnline=0; // 続けて黒になった回数 (カウンタ)
 if (true) {	//黒を続けてnMAX回繰り返さない間、通常のライントレースをする
 while (nOnline <nMAX) {
  if (SENSOR_2 < BLACK){  // 線上なら
  turn_left;                // 左へ
  nOnline++;		//カウンタ増やす
 } else {
  if (SENSOR_2 < WHITE){                    // 境界付近なら
  go_forward;               // 直進
 } else { 		//線から外れる
  turn_right;	//右へ
 }
  nOnline=0;		//カウンタをリセット
 }			
 Wait(STEP);
}
short_break;		//小休憩
turn_right;Wait(FIX_TIME);	//方向右修正
clip_on;		//捕球
cross_line;		//交差点を渡る
nOnline=0;		//カウンタをリセット
}
  if (true) {	//黒を続けてnMAX回繰り返さない間、通常のライントレースをする
   while (nOnline <nMAX) {
     if (SENSOR_2 < BLACK){  // 線上なら
     turn_left;                // 左へ
     nOnline++;		//カウンタ増やす
    } else {
     if (SENSOR_2 < WHITE){                    // 境界付近なら
     go_forward;               // 直進
    } else { 		//線から外れれば
      turn_right;	//右へ
    }
    nOnline=0;		//カウンタをリセット
   }			
   Wait(STEP);
  }
  short_break;		//小休憩
  turn_right;Wait(FIX_TIME);	//方向修正
  cross_line;		//交差点を渡る
  nOnline=0;		//カウンタをリセット
 }
   if (true) {	//黒を続けてnMAX回繰り返さない間、通常のライントレースをする
   while (nOnline <nMAX) {
       if (SENSOR_2 < BLACK){  // 線上なら
       turn_left;                // 左へ
       nOnline++;		//カウンタ増やす
    } else {
     if (SENSOR_2 < WHITE){                    // 境界付近なら
     go_forward;               // 直進
    } else { 		//線から外れれば
      turn_right;	//右へ
    }
    nOnline=0;		//カウンタをリセット
   }			
   Wait(STEP);
  }
  short_break;		//小休憩
  go_forward;Wait(100);	//ゴール前へ
  turn_right;Wait(80);	//後退&前進
  shoot;		//シュート
 Off(OUT_AC);	//停止
  nOnline=0;		//カウンタをリセット
 }
}

定義した関数

#define BLACK 42	//以下は黒
#define WHITE 50	//以上は白
#define go_forward OnFwd(OUT_AC);	//前へ
#define go_back OnRev(OUT_AC);		//後ろへ
#define turn_right OnRev(OUT_C); OnFwd(OUT_A);		//右旋回
#define turn_left OnFwd(OUT_C); OnRev(OUT_A);		//左旋回
#define STEP 1    // 一回の判定で進む時間
#define short_break Off(OUT_AC); Wait(200);     // 小休止
#define CROSS_TIME 20    // 交差点通過にかかる時間
#define cross_line go_forward;Wait(CROSS_TIME);short_break;	  //交差点を渡る
#define FIX_TIME 15
#define nMAX 8
#define clip_on OnFwd(OUT_B);Wait(10);Off(OUT_B);
#define clip_off OnRev(OUT_B);Wait(10);Off(OUT_B);
#define shoot go_back;Wait(50);go_forward;Wait(30);clip_off; 	//シュート

説明

々色と判断する値の設定。 白色と判断する値の設定。 A或福 じ綢燹 セ計回りに旋回。 θ浸計回りに旋回。 Д札鵐機爾糧獣任1/100秒に設定。 ┯鮑硬世犯獣任靴浸の2秒間停止。 交差点通過にかかる時間の設定。 交差点を渡る動作。 交差点と判断した時の方向修正の時間の設定。 交差点と判断するための連続回数の上限設定。 囲いを上げる動作。 囲いを下す動作。 後ろへ下がり、前進して勢いをつけてから囲いを上げることによりシュート。

動画

http://www.youtube.com/watch?v=N1bcGyPMavc

反省 感想

今回の課題ではプログラミングが難しく手伝ってもらってしまった。なので、次回はもっと頑張りたいです。カウンターで交差点を判断するところのやり方が難しかったです。ロボットの構造なども大変でいろいろ試行錯誤しながら頑張れました。もっと使いこなせるようにしたいと思った。


添付ファイル: filetukamu.jpg 105件 [詳細] filemap.png 90件 [詳細] filebody2[1].jpg 187件 [詳細] filearm2[1].jpg 90件 [詳細] filearm1[1].jpg 89件 [詳細] filebody4[1].jpg 98件 [詳細] filegaikei.jpg 104件 [詳細]

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