*ロボットの紹介 [#y51accda]


#ref(./image.jpg,10%,ロボット)
-素晴らしいロボットです
-前が重すぎるので何回か改良を加えることで、軽量化に成功し前に傾くことがなくなった
-缶を安定して運ぶためにアームを長めにしたがライントレースする際の揺れに耐えることができず、倒れることが多かったので、モーターに連動するアームとは別に固定されたアームをつけることで、少し改善されたがまだ倒れてしまうことが少しあるのが課題
-RCX本体(黄色のレゴブロック)は持ち運ぶ際取れやすいという問題があったので持ち運びやすくするために持つところを作成した

*コース攻略法 [#icba8cc7]
-タイマーを用意してライントレースにかかる時間を測定しながら時間を設定していった
+まず缶をつかむまでの時間を測定し、缶をつかむまでのラインとレースのプログラムを作成する
+それから時間を何個か区切って、ライントレースの作成をするが、その時間の間に音をならし、また、その時に缶をつかむようにモーターを回すようにした
+交差点を通過するさいはカウンターをつけて同じうごきをnMAX繰り返したら交差点を通化するというプログラムにした
+最後の缶を置くプログラムは缶を置く目標の地点にUターンした時につく(ライントレースをしていてその地点に達した時間ではなくその地点をこえてUターンした時にその地点に達するようにすること)時間を測定してその時間に超えたらUターンし缶をはなし、バックしてからまたUターンするようなプログラムを作成した

*プログラムの説明 [#kd73bee5]
 #define THRESHOLD 45
 #define HIPOWER 7
 #define LOWPOWER 3
 #define set_power_H SetPower(OUT_AC,HIPOWER);
 #define set_power_L SetPower(OUT_AC,LOWPOWER);
 #define set_power_N SetPower(OUT_B,LOWPOWER);
 #define go_fwd set_power_H; OnFwd(OUT_AC);
 #define arm_fwd set_power_N; OnFwd(OUT_B);Wait(30);Off(OUT_B);
 #define arm_bwd set_power_N; OnRev(OUT_B);Wait(30);Off(OUT_B);
 #define turn_left1 set_power_L ;OnFwd(OUT_C);OnRev(OUT_A);
 #define turn_left0 set_power_L ;\
   OnFwd(OUT_C);Off(OUT_A);
 #define turn_right0 set_power_L ;\
   OnFwd(OUT_A);Off(OUT_C);
 #define turn_right1 set_power_L ;\
   OnFwd(OUT_A);OnRev(OUT_C);
 #define STEP 1
 #define nMAX 200
 #define short_break Off(OUT_AC); Wait(100);
 #define CROSS_TIME 300
 #define cross_line set_power_L;\
  OnFwd(OUT_A);OnRev(OUT_C);\
    Wait(CROSS_TIME);short_break;

 task main () {

	SetSensor(SENSOR_2, SENSOR_LIGHT);
	int nOnline=0;
	ClearTimer(0);

  while(FastTimer(0)<=600){
   while(nOnline < nMAX && FastTimer(0)<=600){
     
    if(SENSOR_2< THRESHOLD -13) {
       turn_left1;
       nOnline++;
    }else{
     if(SENSOR_2< THRESHOLD -11){
      turn_left0;
    }else if(SENSOR_2< THRESHOLD -7){
      go_fwd;
    }else if(SENSOR_2< THRESHOLD -1){
      turn_right0;
    }else{
       turn_right1;
     }
     nOnline=0;
     }
     Wait(STEP);
    }
  }
	arm_fwd;
	PlaySound(SOUND_CLICK);

 while(FastTimer(0)<=1600){
   while(nOnline < nMAX && FastTimer(0)<=1600){
    if(SENSOR_2< THRESHOLD -13) {
       turn_left1;
       nOnline++;
    }else{
     if(SENSOR_2< THRESHOLD -11){
      turn_left0;
    }else if(SENSOR_2< THRESHOLD -7){
      go_fwd;
    }else if(SENSOR_2< THRESHOLD -1){
      turn_right0;
    }else{
       turn_right1;
     }
     nOnline=0;
     }
     Wait(STEP);
    } 
  }

	PlaySound(SOUND_DOUBLE_BEEP);
	ClearTimer(0);
	turn_right1;
	Wait(10);
	arm_fwd;

 while(FastTimer(0)<=1200){
   while(nOnline < nMAX && FastTimer(0)<=1200){
  
   
    if(SENSOR_2< THRESHOLD -15) {
       turn_right1;
       nOnline++;
    }else{
     if(SENSOR_2< THRESHOLD -13){
      turn_right0;
    }else if(SENSOR_2< THRESHOLD -7){
     go_fwd;
    }else if(SENSOR_2< THRESHOLD +2){
      turn_left0;
    }else{
       turn_left1;
     }
     nOnline=0;
     }
     Wait(STEP);
     }
  } 
	PlaySound(SOUND_DOWN); 
	turn_left1;
	Wait(10);
	arm_fwd;

  while(FastTimer(0)<=2000){
   while(nOnline < nMAX && FastTimer(0)<=2000){
    if(SENSOR_2< THRESHOLD -13) {
       turn_left1;
       nOnline++;
    }else{
     if(SENSOR_2< THRESHOLD -11){
      turn_left0;
    }else if(SENSOR_2< THRESHOLD -7){
      go_fwd;
    }else if(SENSOR_2< THRESHOLD -1){
      turn_right0;
    }else{
       turn_right1;
     }
     nOnline=0;
     }
     Wait(STEP);
    }
  }
	PlaySound(SOUND_LOW_BEEP);
	turn_right1;
	Wait(20);
	arm_fwd;

  while(FastTimer(0)<=2900){
   while(nOnline < nMAX && FastTimer(0)<=2900){
    if(SENSOR_2< THRESHOLD -15) {
       turn_right1;
       nOnline++;
    }else{
     if(SENSOR_2< THRESHOLD -13){
      turn_right0;
    }else if(SENSOR_2< THRESHOLD -7){
    go_fwd;
    }else if(SENSOR_2< THRESHOLD +2){
      turn_left0;
    }else{
       turn_left1;
     }
     nOnline=0;
     }
     Wait(STEP);
     } 
   } 
	PlaySound(SOUND_FAST_UP);
	arm_fwd;

  while(FastTimer(0)<=4500){
   while(nOnline < nMAX && FastTimer(0)<=4500){
    if(SENSOR_2< THRESHOLD -13) {
       turn_right1;
       nOnline++;
    }else{
     if(SENSOR_2< THRESHOLD -11){
      turn_right0;
    }else if(SENSOR_2< THRESHOLD -7){
      go_fwd;
    }else if(SENSOR_2< THRESHOLD -1){
      turn_left0;
    }else{
       turn_left1;
     }
     nOnline=0;
     }
     Wait(STEP);
    }
   }  
	PlaySound(SOUND_DOUBLE_BEEP);
	turn_left1; Wait(275);
	arm_bwd;
	OnRev(OUT_AC); Wait(100);
	turn_left1; Wait(275);

  while(FastTimer(0)<=5500){
   while(nOnline < nMAX && FastTimer(0)<=5500){
    if(SENSOR_2< THRESHOLD -13) {
       turn_left1;
       nOnline++;
    }else{
     if(SENSOR_2< THRESHOLD -11){
      turn_left0;
    }else if(SENSOR_2< THRESHOLD -7){
      go_fwd;
    }else if(SENSOR_2< THRESHOLD -1){
      turn_right0;
    }else{
       turn_right1;
     }
     nOnline=0;
     }
     Wait(STEP);
    }
	short_break;
	turn_right1;Wait(nMAX*STEP);
	cross_line;
	nOnline=0;
    }
 }
*まとめ [#jbc6ba2d]
-時間を測定するのが難しい。また、その時によってライントレースにかかる時間がちがく、うまくいかないことが多かった。缶を運ぶときにライントレースでの揺れに耐えることができずに缶が倒れてしますという課題も完璧に克服することができなかったのが残念。
-課題1をクリアできなかったことがとても残念だった。けど、今回の課題1から学ぶことができたことも多々あったので次回の課題2はグループの人たちと協力してクリアしたいです。プログラム・ロボットの作成ででた今回の課題を次回に活かしていきたいと思います。
-友達の力を借りてプログラムを作ることが多かったので次回はなるべく自分だけでプログラムを作り、成功したいです。



トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS