#contents
*ロボットの概形 [#oa08a804]
#ref(./gaikei.jpg,50%)
私たちが作ったロボットは車体部分の前方にアーム部分を取り付けた形になっている。
#ref(./body4[1].jpg,50%)
後輪部分にはキャスターを用いてスムーズに走れるように工夫した。
#ref(./body2[1].jpg,50%)
ライントレーサーをできるだけ中心に近い位置に着けて大きく揺さぶられないようにした。このことによりさらに滑らかに走れるようになった。
*アームの部分 [#e4188ecf]
#ref(./arm2[1].jpg,50%) 
#ref(./arm1[1].jpg,50%)
アームの部分は挟むような形ではモーターの回転速度が速く、安定しないため囲う形にした。回る軸に足をつけることにより囲いを開けると同時にボールを押し出す仕組みにして最後のゴールにボールを入れるときにシュートするようなかたちにした。囲むことでボールを移動している最中も落とさないように工夫した。モーターを使って上げ下げをしている。
#ref(./tukamu.jpg,50%)
このようにボールを囲むようにした。
*課題の内容 [#vea9aa32]
今回の課題内容はライントレースロボットを作り、下の画像のコースを走るということである。
途中のP〜Q地点のどこかにボールを置きそのボールを指定されたゴールまでもっていくというかとでした。
#ref(./map.png,50%)
*プログラミング [#fcb3ac5e]
カウンタで連続で黒だと判断したら交差点だと判断させた。
カウンターで連続で黒だと判断したら交差点だと判断させた。
 #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;		//カウンタをリセット
  }
 }
**定義した関数 [#lafaca61]
 ��#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 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;	//シュート
 ��#define shoot go_back;Wait(50);go_forward;Wait(30);clip_off; 	//シュート
***説明 [#bdfb1a9d]
�々�色と判断する値の設定。
��白色と判断する値の設定。
�A或福�
�じ綢燹�
�セ�計回りに旋回。
�θ浸�計回りに旋回。
�Д札鵐機爾糧獣任�1/100秒に設定。
�┯鮑硬世犯獣任靴浸�の2秒間停止。
��交差点通過にかかる時間の設定。
��交差点を渡る動作。
��交差点と判断した時の方向修正の時間の設定。
��交差点と判断するための連続回数の上限設定。
��囲いを上げる動作。
��囲いを下す動作。
��後ろへ下がり、前進して勢いをつけてから囲いを上げることによりシュート。
*動画 [#he534eb7]
http://www.youtube.com/watch?v=N1bcGyPMavc
*反省 感想 [#e71cee46]
今回の課題ではプログラミングが難しく手伝ってもらってしまった。なので、次回はもっと頑張りたいです。ロボットの構造なども大変でいろいろ試行錯誤しながら頑張れました。もっと使いこなせるようにしたいと思った。
今回の課題ではプログラミングが難しく手伝ってもらってしまった。なので、次回はもっと頑張りたいです。カウンターで交差点を判断するところのやり方が難しかったです。ロボットの構造なども大変でいろいろ試行錯誤しながら頑張れました。もっと使いこなせるようにしたいと思った。

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS