2016a/Member 目次

課題

http://yakushi.shinshu-u.ac.jp/robotics/?plugin=attach&refer=2016a%2FMission2&openfile=2016a-mission2.png

今回の課題は2カ所にある紙コップを運び、交互に重ねるロボットを作ることです。

ルール

紙コップをC地点、D地点にそれぞれ3個(合計6個)置き、2台のロボットの場合はA地点とB地点からスタート、一体型の場合はA地点とB地点のいずれかからスタートする。 最終的に黒線で囲まれた輪の中にC地点からの紙コップとD地点からの紙コップを交互に重ねていく。

得点の計算方法

スタートしてから紙コップの地点まで移動する速さ、正確さ (2点) 紙コップをつかむ動作 (3点) 紙コップをゴールまで運ぶ動作の速さ、正確さ (2点) 紙コップを重ねる動作 (3点) 2台のロボットの連携の良さ (3点) 自立型のロボットとしての形や動作の美しさ、斬新さ (3点) ロボコン出場ロボットとしての完成度 (2点) その他 (2点)

プログラムの説明

定義

#define BLACK 42  これより小さいと黒
#define WHITE 50  これより大きいと白
#define RIGHT_H OnFwd(OUT_A); OnRev(OUT_C);//右旋回
#define LEFT_H OnFwd(OUT_C); OnRev(OUT_A);//左旋回
#define RIGHT_L OnFwd(OUT_A); Off(OUT_C);//右回転
#define LEFT_L OnFwd(OUT_C); Off(OUT_A);//左回転
#define GO_FORWARD(t) OnFwd(OUT_AC); Wait(t); Off(OUT_AC);//t秒間前進
#define GO_BACK(t) OnRev(OUT_AC); Wait(t); Off(OUT_AC);//t秒間後退
#define STEP1
#define ARM OnFwd(OUT_B);Wait(TURN_TIME);//アーム回転

サブルーチン

ライントレースする定義で交差点で1秒間止まり、音が鳴るサブルーチン。 whileを繰り返し、黒が0.5秒を超えると交差点と判断するようになっている。↓

sub LINE()
{
ClearTimer(0);
while(FastTimer(0) <= 50) {
  if (SENSOR_2 <= BLACK) {
      RIGHT_H;
  } else if (SENSOR_2 < BLACK){
      RIGHT_L;                // 
    } else if (SENSOR_2 > WHITE) {
      LEFT_H;
      ClearTimer(0);
    } else if (SENSOR_2 >= WHITE) {
      LEFT_L;               // 
      ClearTimer(0);
     } else {
   OnFwd(OUT_AC);
   ClearTimer(0);
  }
   Wait(STEP);
  }
   Off(OUT_AC);
   ClearTimer(0);
   PlaySound(SOUND_UP);
   Wait(100);
}

交差点で左折するプログラム↓

sub CROSS_LEFT()
{
ClearTimer(0); 
while(FastTimer(0) < 160) {
     LEFT_L;
 }
    }

交差点で右折するプログラム↓

sub CROSS_RIGHT()
{
ClearTimer(0); 
while(FastTimer(0) < 100) {
    RIGHT_L;
}
   }

曲がり角を曲がるプログラム↓

sub WHOLE()
{
while(FastTimer(0) < 36) {
 if(SENSOR_2 < BLACK+2){
       RIGHT_L;
        } else
            if (SENSOR_2 > WHITE-2){
           LEFT_L;
           ClearTimer(0);
            } else if (SENSOR_2 >= WHITE) {
           LEFT_H;
           ClearTimer(0);
            } else {
           GO_FORWARD(50);
           ClearTimer(0);
            }
           Wait(STEP);
            }
           Off(OUT_AC);
           ClearTimer(0);
            }

メインプログラム

task main()
{
  SetSensor(SENSOR_2, SENSOR_LIGHT);
  GO_FORWARD(120);
  LINE();
  WHOLE();
  LINE();
  CROSS_LEFT();
  LINE();
  CROSS_LEFT();
  GO_FORWARD(80);
  LEFT_(50);
  GO_FORWARD(90);
  LINE();
  CROSS_RIGHT();
  LINE();
  CROSS_RIGHT();
  LINE(); 
  ARM(45);
}

まとめ

感想&反省点

みんなで集まる時間がとれず、納得のいくプログラムが書けなくて、納得のいくロボコンができなかった。みんなで話し合い、何をすれば良いかを明確にする必要があったように感じた。協力すれば、もう少し納得のいくロボットができたんじゃないかと思った。ロボットのプログラムの作成にはどれだけプログラムを簡単にするかや何回も試行錯誤することが大切だと改めて実感した課題だったと思う。


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