2006a/C3

光を求めつつ、音を奏でるロボット

ロボット

060707_181115.JPG
060707_174616.JPG
060707_181246.JPG

シンプルなボディとは裏腹に攻撃的な動きをする右側ロボット。 二つのセンサーは光を捉えやすく、そして追いやすい絶妙のバランスを考えた位置においた。また、極限まで軽量化をしてタイヤとギヤを替えた。シャープでしなやかな走りをとくとご賞味あれ。目から黄色のビームが!?

制作過程で発見したこと(製作途中)

発見1

  • 前方の二つのセンサー(左右)の相互の位置関係で、ロボットの動きに変化が出ることがわかる。 たとえば、右センサと左センサの間隔を10cm位(またはそれ以上)に離したとき、ロボットは光を発見しやすいが、なかなか光に向かって直進することは難しい。つまりジグザグの動きが多い。 一方で、二つのセンサを密着させた状態では、ロボットは光を見つけにくいが、見つければすぐに直進行動に移ってくれる。 …とすると、理想形はロボットの360°に無数のセンサがついていれば、無駄な動きをしないで動くことができる。プログラムはとてつもなく煩雑になるだろうが。(7月7日)

プログラム

プログラム1by東京モノレール 

下のプログラムは、光が当たった時とそうでないときにミューヂックが変わります。 実際に試してみたら、光が当たると心電図のような音が鳴りますよ。 

#define DO1 880          // ミューヂック1 音符を定義 
#define DO01 932
#define RE1 988
#define MI1 1047
#define MI01 1109
#define FA1 1175
#define FA01 1245
#define SO1 1319
#define LA1 1397
#define LA01 1480
#define SHI1 1568
#define SHI01 1661
#define DO2 1760
#define P  PlayTone
#define W Wait

task play_music() {    // ミューヂック1
while(true)
{
  P(RE1,10);W(10);
  P(MI1,10);W(10);
  P(FA1,10);W(10);
  P(SO1,10);W(10);
  P(LA1,10);W(20);
  P(LA1,10);W(10);
  P(SO1,10);W(10);
  P(FA1,10);W(10);
  P(MI1,10);W(10);
  P(RE1,10);W(20);
  P(RE1,10);W(10);
  P(MI1,10);W(10);
  P(FA1,10);W(10);
  P(SO1,10);W(10);
  P(LA1,5);W(5);
  P(LA1,5);W(10);
  P(LA1,10);W(10);
  P(SO1,10);W(10);
  P(FA1,10);W(10);
  P(MI1,10);W(10);
  P(DO01,25);W(30);
}
}

#define A 123   // ミューヂック2の音符を定義
#define B 234
#define C 345
#define D 456
#define E 567
#define F 678 
#define G 789
#define H 890
#define I 901

task play_music2() {   // ミューヂック2
  while(true)
  {
        P(E,20);W(40);
        P(D,20);W(30);
        P(C,20);W(40);
        P(B,10);W(30);
        P(A,10);W(20);       
        P(A,20); W(30);
        P(C,5); W(10);
        P(D,20); W(25);
        P(F,20); W(25);
        P(E,20); W(25);
        P(D,10);W(25);
        P(C,5);W(10);
        P(C,10);W(10);
        P(C,5);W(10);
        P(C,10);W(10);
   }

}

#define turn_right OnFwd(OUT_A);OnRev(OUT_C); // 右に旋回
#define turn_left OnRev(OUT_A);OnFwd(OUT_C); //  左に旋回
#define stop_turning Off(OUT_A+OUT_C);   // 停止
#define go OnFwd(OUT_A+OUT_C);  // ゴーです!!
#define LIGHT   50  //0.5秒

task main ()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);  // センサー1がライトセンサー
SetSensor(SENSOR_3,SENSOR_LIGHT); // センサー3もライトセンサー

turn_right;      // 右に旋回
start play_music;   // ミューヂック1スタート!!
while(true){     //  無限のルーツ
   if(SENSOR_1>LIGHT&&SENSOR_3>LIGHT) // もし1または3が明るければ
   {  stop_turning;   // 旋回停止
     go;         //  ゴーです!!
     stop play_music;  // ミューヂック1ストップ!
         start play_music2; // ミューヂック2スタート!!
      }else{   // それ以外のときには
      stop  play_music2;  // ミューヂック2スヨップ!
      start play_music;  // ミューヂック1スタート!!
      turn_right;    右に旋回!
      until(SENSOR_1>LIGHT||SENSOR_3>LIGHT);   // 1または3に光が当たるまで  
    go;           // ゴーです!!
       }
    }
}

プログラム2by羽田空港第二ビル

光を探しているとき音楽2を流し、発見したら音楽1を鳴らします。音楽はただいま作成中。。 ちなみに前方にセンサー2つつけてます。

#define LIGHT 45   //反応する光の強さ
#define GO OnFwd(OUT_A+OUT_C);     //前進
#define L OnFwd(OUT_C);OnRev(OUT_A);     //左回り
#define R OnFwd(OUT_A);OnRev(OUT_C);     //右回り
#define W Wait
task music1()     //音楽1
{
while(true)
 {
 PlaySound(SOUND_UP);W(10);
 }
}
task music2()     //音楽2
{
while(true)
 {
 PlaySound(SOUND_LOW_BEEP);W(10);
 }
}
task main()
{
	SetSensor(SENSOR_1,SENSOR_LIGHT);
	SetSensor(SENSOR_3,SENSOR_LIGHT);
	while(true)
	  {
	     if(SENSOR_1<LIGHT&&SENSOR_3>LIGHT)     //3が大きい
	       {
	       stop music1; start music2;
           R;   //右旋回
	       Wait(20);
           }
	     if(SENSOR_1>LIGHT&&SENSOR_3<LIGHT)     //1が大きい
	       {
	       stop music1; start music2;
           L;   //左旋回
	       Wait(20);
	       }
	     if(SENSOR_1<LIGHT&&SENSOR_3<LIGHT)     //どちらも反応しない
	       {    
     if(SENSOR_1<LIGHT||SENSOR_3<LIGHT)     //どちらかのセンサも反応していない時、
              {
              start music1; stop music2;
              R;     //右へ回る
	          Wait(20);
	          until(SENSOR_1>LIGHT||SENSOR_3>LIGHT);     //どちらか反応するまで
	          }
           }
	     if(SENSOR_1>LIGHT&&SENSOR_3>LIGHT)     //両方とも反応
	       {
	       stop music1; start music2;
	       GO;     //前進
	       }
      }
}

苦労した点・工夫した点

初めは、light_max や time_max を使っていたが訳が分からず最後に挫折してシンプルにベストにまとめてチャレンジしました。苦労した点は、プログラムを送ろうとしてエラーが立て続けに出てしまいやる気を無くさせた。しかたなく、初めから作り直しました。また、ミューヂックが思った通りにいかず変になったが、味が出ていると思う。しかしミューヂックには自信はないです。 (東京モノレール)

苦労した点  ロボティクスゼミへ割く時間がなかなかなくて、プログラムが単調かなとは思いました。あと、「作曲する」ということはやっぱり難しいと痛感しました。 工夫した点  プログラムをシンプルにして、プログラムの編集を容易にしたことです。(羽田空港第2ビル)

みんなの感想

コンカイはあるバイトのおかげで合同製作に参加ができなかった。だがコンカイのプログラムは簡単にしようと思えば簡単にプログラムはできた。自分がライトで照らすと懸命にその光を追う姿がなんともいじらしかった…。最後に言いたいことがある。 いいかげん晴れろや!  【羽田空港第2ビル】

ゼンカイのリベンジで臨んだが結果はゼンカイよりも良くなったカナと我ながらにしみじみと痛感した。なかなかコンカイもミンナで集まれず(フタリだけど...)ヒトリでの試行錯誤の日々が続いたのだ。プログラムの難しさ、繊細さが身にしみた課題だったと思う。ロボコンをうまくやり過ごせるか不安も残るがまずは期末テストを頑張りたい。 いいかげん晴れろや!!Part2  【東京モノレール】

コメント

コメントをお願いします。

  • プログラム内の不必要な改行は除いた方が読みやすくなりますよ。 -- ゆき(TA)? 2006-07-14 (金) 11:58:14
  • ミューヂック・・・? -- ゆき(TA)? 2006-07-27 (木) 13:07:04


添付ファイル: file060707_174616.JPG 169件 [詳細] file060707_181246.JPG 216件 [詳細] file060707_181115.JPG 191件 [詳細]

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