2013b/MemberOnly/進行状況

今回の課題

今回の課題はロボコンでした。コース上にある空き缶を集め、ゴールに積み上げて得点を競い合うものでした。

robocon3.png

得点の配点の内容は…
得点の目安:
   空き缶を取りにいくまでの動作 (2点)
   空き缶を掴む動作 (4点)
   空き缶をを運ぶ動作(2点)
   空き缶を積み上げる動作(5点)
   2台のRCXまたはNXTの連携の良さ(3点)
   自立型のロボットとしての形や動作の美しさ、斬新さ(2点)
   その他 (2点)

計20点で評価される。

マイロボットの説明

私たちの班は、エレベーター式にしました。アームのついている部分をモーターで巻き上げ缶を上に積み上げるものでした。駆動するモーターとは別に、アームを上に固定し安定させるために、もう一つ配線をつなげていないモーターを取り付けました。

robocon2.png

プログラム

このプログラムは理想のものです。ロボットが想像通り上手くいっていれば、使うはずでした。

ライントレース側のプログラム

#define OPEN 1 //缶を発見したことを知らせる
#define GO 2 //缶を掴んだことを知らせる
#define PUT 3 //ゴールに到着したことを知らせる
#define BACK 4 //ゴールに缶を置いたことを知らせる
#define THERESHOLD 47 //しきい値
#define HIPOWER 3
#define LOWPOWER 2
#define set_power_H SetPower(OUT_AC,HIPOWER);
#define set_power_L SetPower(OUT_AC,LOWPOWER);
#define go_forward set_power_H; OnRev(OUT_AC); //直進する
#define turn_left1 set_power_L;\OnFwd(OUT_A); OnRev(OUT_C); //左旋回する
#define turn_left0 set_power_L;\OnRev(OUT_C); Off(OUT_A); //左折する
#define turn_right0 set_power_L;\OnRev(OUT_A); Off(OUT_C); //右折する
#define turn_right1 set_power_L;\OnFwd(OUT_C); OnRev(OUT_A); //右旋回する
#define STEP 1
#define nMAX 35
#define short_break Off(OUT_AC); Wait(100); //小休止する
#define cross_line go_forward set_power_H;\OnFwd(OUT_AC); Wait(20); short_break; //交差点を通過する
task main()
{
  SetSensor(SENSOR_1,SENSOR_LIGHT);
  SetSensor(SENSOR_3,SENSOR_LIGHT);
  int nOnline=0;  
  ClearTimer(1);
  while (FastTimer(1) <= 500) {
    go_forward;
    if (SENSOR_3 > 48) { //缶を発見
    SendMessage(OPEN); //アームを開くように指示
    Off(OUT_AC);
   }
    until (Message() == GO); //アームの動作が終了時
    go_forward; //再び直進
  } 
  ClearTimer(0);
  while (true) {
      if (SENSOR_1 < THERESHOLD -4) {
      turn_right1;
      } else {
        if (SENSOR_1 < THERESHOLD -2) {
          turn_right0;
      } else if (SENSOR_1 < THERESHOLD +2) {
          go_forward;
      } else if (SENSOR_1 < THERESHOLD +4) {
          turn_left0;
      } else {
         turn_left1;
      }
    if (SENSOR_3 > 48) { 
   SendMessage(OPEN); 
   Off(OUT_AC);
   } 
   if (nOnline == 8) {
     OnFwd(OUT_A);
     OnRev(OUT_C);
     Wait(300); 
     SendMessage(PUT);
      }

   until (Message() == GO); 
 while (FastTimer(0) < nMAX) {
   if (SENSOR_1 < THERESHOLD -4) {
     turn_right1;
     } else {
       if (SENSOR_1 < THERESHOLD -2) {
         turn_right0;
     } else if (SENSOR_1 < THERESHOLD +2) {
         go_forward;
     } else if (SENSOR_1 < THERESHOLD +4) {
         turn_left0;
     } else {
         turn_left1;
      }
     ClearTimer(0);
    }
   Wait(STEP);
   }
   turn_left1; Wait(nMAX*STEP);
   cross_line;
   nOnline++;
   PlaySound(SOUND_CLICK);
   ClearTimer(0); 

   if (SENSOR_3 > 48) { //缶を発見
   SendMessage(OPEN); //アームを開くように指示
   Off(OUT_AC);
   }
   until (Message() == BACK);
   OnRev(OUT_AC);
   Wait(100);
   } 
}

アーム側のプログラム

#define OPEN 1
#define GO 2
#define PUT 3
#define BACK 4
#define PowerA SetPower(OUT_A,0); // アームを開ける為のパワー
#define PowerB SetPower(OUT_A,7); // アームを閉じ、缶を掴み続けるパワー
#define PowerC SetPower(OUT_C,0); // アームを下ろすのと、アームを上で固定するパワー
#define PowerD SetPower(OUT_C,10);  // アームを上げる為のパワー
task main()
{
 ClearMessage();
 while (true) {
   PowerC; OnFwd(OUT_C);
   until (Message() == OPEN);
   PowerA; OnRev(OUT_A); 
   Wait(40);
   PowerC; OnRev(OUT_C);
   Wait(90);
   PowerB; OnFwd(OUT_A);
   Wait(40);
   PowerD; OnFwd(OUT_C);
   Wait(160);
   SendMessage(GO);
   PowerC; OnFwd(OUT_C);
   until (Message() == PUT);
   PowerC; OnRev(OUT_C);
   Wait(50);
   PowerA; OnRev(OUT_A);
   Wait(40);
   SendMessage(BACK);
   }
  Wait(10); 
}

苦労した点

今回のロボットは変更点が特に多かった。最終的にプログラムの面では、缶を運搬時にメロディーを流すなど、かなり完成されたものであった。しかし、二台のロボットの連携が上手くいかなかったこと、ロボット自体の構造に少し無理があったことが災いしライントレースをして缶を積み上げることはできなかった。本番では、手堅く一つの缶にしぼりゴールを目指した。 班の製作に移り変わった当初は、分離型にしようとしていました。しかし、製作していくうちに合体型の方が、成功率・安定性・プログラムの量の三つの点で優れている!と感じました。そこで、合体型を作り始めました。まずは大まかな構造を話し合いエレベーター式にしようと決めました。

robocon1.png

構造上の最大の問題点は、前部分のエレベーターをどう支えるかでした。これは、後部に支えを作ることで解決はしましたが、車体全体の重さがかなり重くなってしまいました。この影響により、車輪が重さに耐えきれず進まなくなてしまいました。そこで、先生からの助言もありエレベーターの下のタイヤを、駆動輪に変更しました。それによりこの問題は解決しました。駆動輪のは、ディファレンシャルギアを使いました。  今回のロボットは変更点が特に多かった。最終的にプログラムの面では、缶を運搬時にメロディーを流すなど、かなり完成されたものであった。しかし、二台のロボットの連携が上手くいかなかったこと、ロボット自体の構造に少し無理があったことが災いしライントレースをして缶を積み上げることはできなかった。本番では、手堅く一つの缶にしぼりゴールを目指した。 班の製作に移り変わった当初は、分離型にしようとしていました。しかし、製作していくうちに合体型の方が、成功率・安定性・プログラムの量の三つの点で優れている!と感じました。そこで、合体型を作り始めました。まずは大まかな構造を話し合いエレベーター式にしようと決めました。

構造上の最大の問題点は、前部分のエレベーターをどう支えるかでした。これは、後部に支えを作ることで解決はしましたが、車体全体の重さがかなり重くなってしまいました。この影響により、車輪が重さに耐えきれず進まなくなてしまいました。そこで、先生からの助言もありエレベーターの下のタイヤを、駆動輪に変更しました。それによりこの問題は解決しました。駆動輪のは、ディファレンシャルギアを使いました。

robocon4.JPG

反省

プログラムはearthが、とてもがんばってくれました。ロボットの構造自体は多大な時間をかけたが、まだまだでした。特に、アームとエレベーターの固定を考えるべきであったと思いました。このプログラムを是非使って成功させたかった。しかし、この講義を受講できて良かった。とても楽しかった。班のみんなありがとう。


添付ファイル: filerobocon4.JPG 268件 [詳細] filerobocon2.png 252件 [詳細] filerobocon1.png 271件 [詳細] filerobocon3.png 256件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-02-07 (金) 22:32:59