2016a/Member

はじめに

今回の課題は、前回の課題2のコースを用いて紙コップの運搬をすることだ。 ライントレースの速さ正確さや、紙コップを何段積めるかなどで点数が得られる。

ルール

基本ルール [#be8b192f]

       紙コップをC地点、D地点にそれぞれ3個(合計6個)置き、C地点に置いた紙コップにはCを、D地点に置いた紙コップにはDを紙コップの底面にマークする
       紙コップは上下どちらにおいてもかまわない
       2台のロボットの場合はA地点とB地点からスタート、一体型の場合はA地点とB地点のいずれかからスタートする
       最終的に黒線で囲まれた輪の中にC地点からの紙コップとD地点からの紙コップを交互に重ねる (下側から数えて奇数番目はC地点からのコップ、偶数番目はD地点からのコップになるようにする)
       紙コップを重ねる場所は、必ずしも目的地点の輪の中でなくてもかまわない
       最終的に紙コップが自力で立っていること、またロボットが紙コップに触れていないこと、ただしスタート時と上下逆になっていてもかまわない
       競技時間はすべてのコップを重ね終わるまで、あるいは審判が続行不能と判断するまで。
       審判の合図の後、5秒以内にロボットをスタートさせ、それ以降はロボットや紙コップに触ってはいけない
       EV3のチームはA,B,Cにそれぞれマークした紙コップをそれぞれ3個置く
       EV3のチームはA,B,C,Dのどこからスタートしてもよいが、別の地点にある合計9個の紙コップを運ぶこと
       紙コップに色を塗ったり文字や絵をかいてもよいが、穴を開けたり故意に変形させてはいけない
       光センサは2セット合わせて2つまで使って良い、その他のセンサや部品はキットに含まれているものだけを使用すること

基本得点の計算方法

       1段目の紙コップ3点、2段目の紙コップ6点、・・、n段目のコップ3n点、6段目のコップ18点
       奇数段目にあるDのコップと偶数段目にあるCのコップは0点
       EV3は1段目のAのカップ2点、2段目のBのカップ4点、3段目のCのカップ6点、4段目のAのカップ8点、5段目のBのカップ10点、6段目のCのカップ12点、7段目のAのカップ14点、8段目のBのカップ16点、9段目のCのカップ18点、それ以外は0点

技術点の計算方法

   以下の動作の精度・スピード・確実性などを含めた技術的な工夫や芸術性について他の全てのチームが20点満点で採点し、その平均点を求める。 得点の目安:
       スタートしてから紙コップの地点まで移動する速さ、正確さ (2点)
       紙コップをつかむ動作 (3点)
       紙コップをゴールまで運ぶ動作の速さ、正確さ (2点)
       紙コップを重ねる動作 (3点)
       2台のロボットの連携の良さ (3点)
       自立型のロボットとしての形や動作の美しさ、斬新さ (3点)
       ロボコン出場ロボットとしての完成度 (2点)
       その他 (2点)

我々の作戦

僕たちは、1台の機体で紙コップを運び積み上げることにした。まずは紙コップを1つ運び基本得点の3点を得ることを目標にした。

ロボットの説明

ロボット全体像

上の写真のように、紙コップを持ち上げて運搬するためにクワガタムシのように機体前方に大きなハサミを付けた。

紙コップを挟む

こうして紙コップをはさみ、ハサミがそれ以上閉まらなくなると、下の写真のギアがかみ合い次の写真のように紙コップを持ち上げる。

かみ合うギア
紙コップ持ち上げ

ただ、ギアがうまくかみ合わず、紙コップが持ち上がらないことがあったので、輪ゴムを挟んでかみ合わせを良くした。

プログラムの説明

今回の課題では、内田君がプログラムを書いてくれた。

基本的な定義

#define BLACK 44  //これ以下は黒
#define WHITE 50  //これ以上は白
#define RIGHT_S OnFwd(OUT_A);OnRev(OUT_C);  //右旋回
#define RIGHT_K OnFwd(OUT_A);Off(OUT_C);    //右回転
#define LEFT_S OnFwd(OUT_C);OnRev(OUT_A);   //左旋回
#define LEFT_K OnFwd(OUT_C);Off(OUT_A);     //左回転
#define go_fwd(t) OnFwd(OUT_AC);Wait(t);Off(OUT_AC);  //t秒間前進
#define go_back(t) OnRev(OUT_AC);Wait(t);Off(OUT_AC); //t秒間後退
#define STEP 1
#define arm_up(t) OnFwd(OUT_B);Wait(t);Off(OUT_B); //t秒間腕上げ
#define arm_down(t) OnRev(OUT_B);Wait(t);Off(OUT_B); //t秒間腕下げ
#define RIGHT_i(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t);Off(OUT_AC); //t秒間右回転
#define LEFT_i(t) OnFwd(OUT_C);OnRev(OUT_A);Wait(t);OFF(OUT_AC); //t秒間左回転

サブルーチン

sub line_trace_i()
{
  ClearTimer(0);
   while(FastTimer(0) < 45) {
     if  (SENSOR_2 < BLACK) {
           RIGHT_S;
         } else if (SENSOR_2 < BLACK +2 ) {
           RIGHT_K;
         } else if (SENSOR_2 > WHITE ) {
           LEFT_S;
           ClearTimer(0);
         } else if (SENSOR_2 >= WHITE -2 ) {
           LEFT_K;
           ClearTimer(0); 
         } else {
         OnFwd(OUT_AC);
         ClearTimer(0);
          }
         Wait(STEP);
       }
      Off(OUT_AC);
      ClearTimer(0);
      PlaySound(SOUND_UP);
      Wait(100);
}
sub line_trace_ii()
{
  ClearTimer(0);
   while(FastTimer(0) < 55) {
     if  (SENSOR_2 < BLACK) {
           RIGHT_S;
         } else if (SENSOR_2 < BLACK +2 ) {
           RIGHT_K;
         } else if (SENSOR_2 > WHITE ) {
           LEFT_S;
           ClearTimer(0);
         } else if (SENSOR_2 >= WHITE -2 ) {
           LEFT_K;
           ClearTimer(0); 
         } else {
         OnFwd(OUT_AC);
         ClearTimer(0);
          }
         Wait(STEP);
       }
      Off(OUT_AC);
      PlaySound(SOUND_UP);
      Wait(100);
}
sub turn_left()
{ ClearTimer(0);
  while (FastTimer(0) < 290) {       
        LEFT_K;
       }
}
sub turn_right()
{ ClearTimer(0);
 while (FastTimer(0) < 90) {       
        RIGHT_K;
       }
}
sub cross_fwd()
{ ClearTimer(0);
  while (FastTimer(0) < 60) {       
        LEFT_K;
       }
}

メインプログラム

task main()
{ go_fwd(100);
  line_trace_i();
  cross_fwd();
  line_trace_i();
  cross_fwd();
  line_trace_i();
  turn_right();
  Off(OUT_AC);
  arm_down(70);
  go_fwd(200);
  arm_up(90);
  RIGHT_i(120);
  arm_down(20);
  Wait(50);
  arm_down(70);
  go_back(100);
  arm_up(120);
  RIGHT_i(50);
  line_trace_ii();
  arm_down(100);
  go_fwd(200);
  arm_up(80);
  LEFT_i(130);
  go_fwd(50);
  arm_down(80);
}

まとめ

テスト走行では3点はとれるようになっていたが、たまにライントレースで失敗したり微妙なずれが重なって紙コップをつかめないことがあった。 本番では一回目はライントレースで失敗し、再チャレンジでは紙コップを持ち上げることができず円の中に置くことができなかた。微妙な誤差を修正しないまま本番に臨んだのがだめだった。 また、今回の課題は2班で組んで挑戦する課題だったが、もう一つの班との連携がうまくできず結局僕らの班3人でなんとか課題に挑めるロボットとプログラムを完成させた。


添付ファイル: fileimage2 [10371].JPG 62件 [詳細] fileimage2 [9078].JPG 106件 [詳細] fileimage2 [8559].JPG 104件 [詳細] fileimage1 [10370].JPG 52件 [詳細] fileimage1 [9077].JPG 104件 [詳細] fileimage1 [8558].JPG 101件 [詳細]

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