2006a/A2/ムーディ

ロボティクス入門ゼミ

課題

5/12 初プログラム

task main() { OnFwd(OUT_A;OUT_C); Waite(500); Off(OUT_A+OUT_C);}

5/19:この日はペンをいかにしてロボットに固定して上げ下げできるようにするかというのを考え、実際に作成してみた。最初どのようにしたらどうなるかの検討があまりつかなかったので、ぺんをうまく持たせることができるようになるまで少し苦労したが、一対のタイヤをうまく使ってその間にペンをはさむ案が出たので、まずこれを試してみた。何とかうまくペンをはさむことに成功したが安定性が非常に悪かったので 、もう一対のタイヤを使ってみたら安定性がかなり上がったので後はタイヤをさしている軸にギアをつけてとりあえずペンを挟む部分の開発を終えた。そのあと、コンピュータがついた土台にペンを挟む部分をつけてみたが、バランスが悪くなってしまったので、修正しているところで終わった。    

5/26:今回の授業はロボットで「木」という文字を書く課題の本番だったのでまず一回目に走らせてみたが途中でペンが浮いたままになってしまい書くことができなかったのでまた調整しなおしてプログラムを直そうとしたがなぜかロボットに送ることができなかったのですぐにやり直すことができず、チューターの人にみてもらい、送れるような環境にしてもらってから再び挑戦した。二回目はなんとかうまくいったのでよかった。今まではロボットが気まぐれでうまくいく時とそうでない時との差が激しくプログラムを変更してもなかなかうまくできなかったので苦労していた。

6/2:今回はタッチセンサを二つ使い、片方のセンサーが何かに

当たればもう片方の方向にロボットが動くようにプログラムした。下はこの時のプログラム。 [#e66b6c7f]

task main()

{ SetSensor(SENSOR_1,SENSOR_TOUCH); SetSensor(SENSOR_3,SENSOR_TOUCH);

OnFwd(OUT_A+OUT_C);

while(1){

 if(SENSOR_1==1){
   OnRev(OUT_A+OUT_C);Wait(50);
   OnFwd(OUT_A);Wait(90);
   OnFwd(OUT_C);
   }
 if(SENSOR_3==1){
   OnRev(OUT_A+OUT_C);Wait(50);
   OnFwd(OUT_C);Wait(90);
   OnFwd(OUT_A);
   }
   }
   }

ここまで。

6/9:今回は線の上を進むようにプログラムをつくってみた。センサーをどのようにつけるかで結構悩んだが、最終的には、光センサーが線の上をたどり、線からはみ出せば(明るくなれば)線上に戻るようにした。

これはタッチセンサーが反応したら反対方向にロボットが動くプログラム

#define x 30

task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); SetSensor(SENSOR_2,SENSOR_TOUCH); while(1){

 if(SENSOR_1<x){
      OnFwd(OUT_C);
      }
 if(SENSOR_3<x){
   OnFwd(OUT_A);
   }
 if((SENSOR_1>x)&&(SENSOR_3>x))
  {OnFwd(OUT_A+OUT_C);}
 if(SENSOR_2==1){
  OnFwd(OUT_A);Wait(180);
  OnRev(OUT_C);Wait(180);
  }
  }
  }

これは追い越しプログラム

#define x 40

task main() { SetSensor(SENSOR_1,SENSOR_LIGHT) SetSensor(SENSOR_3,SENSOR_LIGHT) SetSensor(SENSOR_2,SENSOR_TOUCH) while(1){

 if(SENSOR_1>x){
      OnFwd(OUT_A);
      }
   else{OnFwd(OUT_A+OUT_C)
      }

while(1){

 if(SENSOR_3>x){
   OnFwd(OUT_A);
   }
 else{OnFwd(OUT_A+OUT_C);}
 if(SENSOR_2==1){
   OnRev(OUT_A+OUT_C);Wait(100);
   OnFwd(OUT_A);Wait(45);
   OnRev(OUT_C);Wait(45);
   OnFwd(OUT_A+OUT_C);Wait(70);
   OnFwd(OUT_C);Wait(45);
   OnRev(OUT_A);Wait(45);
   OnFwd(OUT_A+OUT_C);Wait(100);
   OnFwd(OUT_A);Wait(45);
   OnRev(OUT_C);Wait(45);
   }

while(1){

 if(SENSOR_1>x){
      OnFwd(OUT_A);
   }
 else{OnFwd(OUT_A+OUT_C);}
   }

while(1){

 if(SENSOR_3>x){
   OnFwd(OUT_A);
   }
 else{OnFwd(OUT_A+OUT_C);
   }
   }

ラインに沿うだけ

#define x 32

task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); SetSensor(SENSOR_2,SENSOR_TOUCH);

while(1){

 if(SENSOR_1<x){
   OnFwd(OUT_C);
   OnRev(OUT_A);
    }
 if(SENSOR_3<x){
   OnFwd(OUT_A);
   OnRev(OUT_C);
   }
 if((SENSOR_1>x)&&(SENSOR_3>x)){
   OnFwd(OUT_A+OUT_C);
   }
   }
   }

ここから

#define x 33

task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); SetSensor(SENSOR_2,SENSOR_TOUCH); while(1){

  if(SENSOR_1<x){
     OnFwd(OUT_C);
     OnRev(OUT_A);
       }
  if(SENSOR_3<x){
     OnFwd(OUT_A);
     OnRev(OUT_C);
       }
  if((SENSOR_1>x)&&(SENSOR_3>x)){
    OnFwd(OUT_A+OUT_C); 
      }
  if(SENSOR_2==1){
     OnFwd(OUT_A);Wait(180);
     OnRev(OUT_C);Wait(180);
      
  }
 }
 }

task main(){ SetSensor(SENSOR_2,SENSOR_LIGHT) int light_max=0 ClearTimer(0) while(FastTimer(0)<TURN_TIME){

if(SENSOR_1>light_max){
    light_max=SENSOR_	1
    time_max=FastTimer
    }
    }

光を追いかける

#define x 43 task main(){ SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); while(1){

  if(SENSOR_1>x){
    Off(OUT_A+OUT_B+OUT_C);
    Wait(50);
    OnFwd(OUT_A);
  until(SENSOR_1<x);
    Off(OUT_A);
    }
  if(SENSOR_3>x){
    Off(OUT_A+OUT_B+OUT_C);
    Wait(50);
    OnFwd(OUT_C);
  until(SENSOR_3<x);
    Off(OUT_C);
    }
  else{
    OnFwd(OUT_A+OUT_C);
    OnFwd(OUT_B);
    Wait(300);
    OnRev(OUT_B);
    Wait(300);
    }
    }
    }

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