2005/C2

五角形に動くキャタピラロボット

task main()
{
    OnFwd(OUT_A);
    OnFwd(OUT_C);
    Wait(150);
    repeat(4){
    OnRev(OUT_C);
    Wait(80);
    OnFwd(OUT_C);
    Wait(150);
    }
    Off(OUT_A+OUT_C);
}

難しかったこと

何秒回転させるかを決めるのが大変だった。
約何秒で90度まわるかを見つけ、頑張ってみた。

工夫したこと

repeat使って簡単に見やすく作ってみました☆

感想

初めて自分で作ったプログラムにしてはちゃんと動いてくれたと思う。

課題1 「左」を書くロボット

task main()
{
    OnFwd(OUT_A+OUT_C);          //1画目
    Wait(100);
    OnFwd(OUT_B);                //ペン上げ
    Wait(50);
    Off(OUT_A+OUT_B+OUT_C);
    Wait(200);
    
    OnRev(OUT_A);                
    Wait(130);
    OnRev(OUT_B);                //ペン下げ
    OnRev(OUT_A+OUT_C);          //2画目
    Wait(150);
    OnFwd(OUT_B);        //ぺン上げ
    Wait(50);
    Off(OUT_A+OUT_B+OUT_C);
    Wait(200);
    
    OnFwd(OUT_A+OUT_C);
    Wait(200);
    OnRev(OUT_A);
    Wait(108);
    OnRev(OUT_A+OUT_C);
    Wait(75);
    OnRev(OUT_B);        //ペン下げ
    OnRev(OUT_A+OUT_C);          //3画目
    Wait(90);
    OnFwd(OUT_B);        //ペン上げ
    Wait(50);
    Off(OUT_A+OUT_B+OUT_C);
    Wait(200);
    
    OnFwd(OUT_A+OUT_C);
    Wait(180);
    OnRev(OUT_A);
    Wait(85);
    OnRev(OUT_A+OUT_C);
    Wait(85);
    OnFwd(OUT_A+OUT_C);          //4画目
    OnRev(OUT_B);        //ペン下げ
    Wait(55);
    OnFwd(OUT_B);                //ペン上げ
    Wait(50);
    Off(OUT_A+OUT_B+OUT_C);
    Wait(200);

    OnFwd(OUT_A);
    OnRev(OUT_C);
    Wait(90);
    OnRev(OUT_A+OUT_C);
    Wait(15);
    OnRev(OUT_B);        //ペン下げ
    OnRev(OUT_A+OUT_C);          //5画目
    Wait(120);
    Off(OUT_A+OUT_B+OUT_C);
}

難しかったこと

3〜5画目の書きはじめにペンを持っていくところが難しかった。

工夫したこと

2画目をバックで書くことにより、無駄な動きをなくした。

感想

予想以上に思いどおりに動いてくれなくて苦労した。

ロボット

IMG_0237.jpg

ペンはゴムを二重にして固定したので、グラグラはしないが、衝動はやわらげられてたと思う。

コメントがあったので…

サブルーチンを使って書き換えると下のようになった。少しは見やすくなったと思う。

サブルーチンを使ったプログラム

関数というのがよくわからなかったのですが、とりあえず下にやってみました。

サブルーチンと関数を使ったプログラム

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

  • サブルーチンや関数を使ってみましょう。 -- 松本(教員)? 2005-11-11 (金) 22:59:48
  • 関数についても挑戦してみてください -- かとりーぬ(TA)? 2006-02-07 (火) 12:31:56
  • 挑戦してみました。 -- あんず? 2006-02-08 (水) 22:59:40

課題2 センサを使って机の周りを動くキャタピラロボット

task main()
{
    SetSensor(SENSOR_1,SENSOR_TOUCH);
    SetSensor(SENSOR_3,SENSOR_TOUCH);
    
    while(true)
    {
        if(SENSOR_3 == 1)      //右のセンサが押されている
	{
	    OnFwd(OUT_A+OUT_C);   //直進
	} else {           //右のセンサが押されていない
	    Off(OUT_C);       //右に回る
	    OnFwd(OUT_A);
	}
	
	if(SENSOR_1 == 1)      //左のセンサが押されている
	{
	OnRev(OUT_A);        //左に曲がる
	OnFwd(OUT_C);  Wait(170);
	}
   }
   
   Off(OUT_A+OUT_C);
}

難しかったこと

タッチセンサが押されたまま動くようなロボット作り。
 →壁に当たってることをセンサに伝える部分を強くしたり、スタートからロボットと壁とをなるべく近くさせたりして、余計に右に回り過ぎないように気をつけた。

工夫したこと

机の足にタイヤがひっかからないようにブロックをタイヤの近くに足したり、センサがうまく働くように常に壁に当たっている部分を強くしたり、工夫してロボットを作った。

感想

センサがうまく働かず、右に回りすぎて困った。
一周したときはうれしかった☆

ロボット

img_0007_Medium.jpg

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

  • 難しかったところをどのように解決したのかも書くと良いです。 -- かとりーぬ(TA)? 2006-02-07 (火) 12:56:39
  • 書いてみました。 -- あんず? 2006-02-08 (水) 23:10:09

課題3-1 黒い線上を動くロボット(モータ2個、センサ1個)

task main ()
{
    SetSensor(SENSOR_1, SENSOR_LIGHT);

    while (true) {
        if (SENSOR_1 < 40) {          // 線上にいるとき
            OnFwd(OUT_A);
            Off(OUT_C); 
        } else {                      // 線から外れたとき
            Off(OUT_A);
            OnFwd(OUT_C);
        }
    }
}

これではとりあえず一周はするが、きついカーブではショートカットしてしまう。
イルカの絵が難しいのかとも思ったが、どみさんのプログラムだとしっかりライントレースしていたので、やはりプログラムが問題だ。

task main ()
{
   SetSensor(SENSOR_1,SENSOR_LIGHT);
   
   while (true) {
       if (SENSOR_1<40) {             // 線上にいるとき
           OnFwd(OUT_C+OUT_A);
	} else {                      // 線から外れたとき
	    OnFwd(OUT_A);
	    OnRev(OUT_C);
	    Wait(50);
	    OnFwd(OUT_C);
	    OnRev(OUT_A);
	    until(SENSOR_1<40);
	}
   }
}

何種類か考えたが、やはりうまくいかない。
早くもプログラミングの壁にぶつかってしまったみたい。早く壁を乗り越えたい…。

課題3-2 黒い線上を動くロボット(モータ1個、センサ1個)

task main ()
{
    SetSensor(SENSOR_1,SENSOR_LIGHT);
   
    while (true) {
        if (SENSOR_1<40) {           //線上にいるとき
            OnRev(OUT_A);
	     Wait(25);
	     OnFwd(OUT_A);
	     Wait(20);
	 } else {                     //線からはずれたとき
	     OnRev(OUT_A);
	     Wait(50);
	     OnFwd(OUT_A);
	     until(SENSOR_1<40);
	 }
    }
}

感想

いらないものを排除した、コンパクトなロボット作りが難しく、後進するロボット(キャスタが前にあるロボット)になってしまった。
でもなんとか一周まわることができた。

ロボット

左右のタイヤの間隔は狭くしてみたが、キャスタが遠いおかげで体長20cmくらいのロボットになってしまった。

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

  • 左右のタイヤの間隔が広ければ、カーブの回転半径は大きくなります。急なカーブをさくっと曲がるには、プログラムとロボットの両方を改良する必要がありますね。ぜひいろいろとやってみてください。 -- 松本(教員)? 2005-12-09 (金) 23:01:52
  • 私は実物を見ていないので、何とも言えませんが・・・実際の動きを見ていない人にもわかるように、ページ上の表現を工夫して見ましょう。 -- かとりーぬ(TA)? 2006-02-07 (火) 13:00:37
  • どのようなことに苦労したのか、どううまくいかなかったのかを書くといいですね。 -- まいける(TA) 2006-02-08 (水) 23:27:55
  • 少し言葉を足してみましたが、写真もなく、うまく伝えられません。 -- あんず? 2006-02-15 (水) 17:22:12
  • 最初からプログラムもロボットもうまくいかなかったとおもいます。どういうことで失敗したとか、プログラムを書くのにここでよくつまづいたなどを書くと良いとおもいます。 -- まいける(TA) 2006-02-17 (金) 04:55:33

課題4 懐中電灯の光を追うロボット

task main ()
{
   SetSensor(SENSOR_1,SENSOR_LIGHT);    //センサ1は光センサ
   SetSensor(SENSOR_3,SENSOR_LIGHT);    //センサ3は光センサ
   while(true){
       if((SENSOR_1>45)&&(SENSOR_3>45)){ //センサ1とセンサ3の値が45以上のとき
	    OnFwd(OUT_C+OUT_A);          //前進
	} 
	if(SENSOR_1>65){                 //センサ1の値が65以上の時
	    OnFwd(OUT_C);                //左に回る
	    Off(OUT_A);
	}
	if(SENSOR_3>65){                 //センサの値が65以上の時
	    OnFwd(OUT_A);                //右に回る
	    Off(OUT_C);
	}
   }
}

ロボット

kadai4.jpg

キャタピラロボットの左右に光センサを付けた簡単なロボット

工夫したこと

最初に光の強さを調べて、左右に曲がるときの値を決めた。

感想

光の値を調べてプログラミングをしたので簡単にできた☆
最初は、Offを入力するのを忘れていたので、思っていたのと違う行動をとられて戸惑った。

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

  • 二つの条件式を組み合わせるとき(論理積や論理和をとる場合)には、それぞれの条件式を()で括っておきましょう。 -- 松本(教員)? 2006-01-07 (土) 00:05:41
  • 直してみました。 -- あんず? 2006-01-16 (月) 15:39:44
  • 『Offを入力するのを忘れて言うことを聞かなくて戸惑った』…実際にはロボットはちゃんと言うこと聞いているんですけどね…(笑) でも、気持はとてもよくわかります。-- 松本(教員)? 2006-01-16 (月) 16:41:09
  • 言い方変えてみました。 -- あんず? 2006-01-21 (土) 22:16:55
  • よくまとめられているページです。文字以外の要素もあった方が見やすいかな? -- かとりーぬ(TA)? 2006-02-07 (火) 12:48:54

課題5 演奏ロボットと演奏にあわせて踊るロボット

''ロボ1 指揮をしながら曲を奏でるロボット''

//曲目:エーデルワイス

#define Do  523
#define Re  587
#define Mi  330
#define Fa  349 
#define So  392
#define La  440
#define Si  494

task play_music()   // 音楽を演奏するタスク
{
   while (true)
   {
       PlayTone(Mi,190); Wait(200); // エー  
       PlayTone(So, 90); Wait(100);  // デル
       PlayTone(Re,290); Wait(300);  // ワイス
       
       PlayTone(Do,190); Wait(200);  // エー 
       PlayTone(So, 90); Wait(100);  // デル
       PlayTone(Fa,290); Wait(300);  // ワイス
       
       PlayTone(Mi,190); Wait(200);  // か
       PlayTone(Mi, 90); Wait(100);  // わ
       PlayTone(Mi, 90); Wait(100);  // い
       PlayTone(Fa, 90); Wait(100);  // い
       PlayTone(So, 90); Wait(100);  // は
       PlayTone(La,290); Wait(300);  // な
       PlayTone(So,290); Wait(300);  // よ
        
       PlayTone(Mi,190); Wait(200);  // し
       PlayTone(So, 90); Wait(100);  // ろ
       PlayTone(Re,290); Wait(300);  // い

       PlayTone(Do,190); Wait(200);  // つ
       PlayTone(So, 90); Wait(100);  // ゆ
       PlayTone(Fa,290); Wait(300);  // に
 
       PlayTone(Mi,190); Wait(200);  // ぬ
       PlayTone(So, 90); Wait(100);  // れ
       PlayTone(So, 90); Wait(100);  // て
       PlayTone(LA, 90); Wait(100);  // さ
       PlayTone(Si, 90); Wait(100);  // く
       PlayTone(Do,290); Wait(300);  // は
       PlayTone(Do,290); Wait(300);  // な
        
   }
}

task main()
{
   start play_music;         // 演奏開始
   ClearTimer(0);
   while ( Timer(0) <= 5 ) { SendMessage(1); }  // 最初の0.5秒間 1 を送信する
  repeat(16){               // 3拍子×16回
     OnFwd(OUT_B);      // 棒下げ
     Wait(100);
       OnRev(OUT_C);         // 回転
       Wait(100);
       OnRev(OUT_B);         // 棒上げ
     Wait(100);
   }
  Float(OUT_B+OUT_C);     
  stop play_music;          //演奏停止
}

''ロボ2 演奏にあわせて踊るロボット''

task main()
{
   while (true)
   {
       ClearMessage();           // Message() を 0 に設定
       until (Message() != 0);   // Message() に 0 以外の値が入るまで待つ

       if ( Message() == 1 )     // 1 を受信したとき
           repeat(2){
               OnFwd(OUT_A); Wait(300);         //3秒左に回転
               OnRev(OUT_A); Wait(300);         //戻る
               Off(OUT_A);
               OnFwd(OUT_C); Wait(300);         //3秒右に回転
               OnRev(OUT_C); Wait(300);         //戻る
               Off(OUT_C);
               OnRev(OUT_A+OUT_C); Wait(600);   //6秒後退
               OnFwd(OUT_A+OUT_C); Wait(600);   //6秒前進
               Off(OUT_A+OUT_C);
           }
   }
}

考える過程

必修のテストがある日午前2時、寝ようと思い布団に入るが、何の曲演奏させようか考えてしまう。かえるの歌もちゅうりっぷもありきたり。エーデルワイスなんていいんじゃない!?3拍子の指揮に挑戦しようじゃん!ロボットは上げ下げに加えてちょっと回転すればできるんじゃん?絶対音感なくなっちゃったから楽譜かけないよ。そんなこんな考えてたら眠れなくなっちゃったのね、結局寝たの3時過ぎ。ちなみにちゃんと動くかはまだ試していない。

ロボットの動き

''ロボ1''

robo1.jpg

水色が指揮棒の軌跡

''ロボ2''

robo2.jpg

エーデルワイスだから静かに踊っています。

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

  • どうさかくにんをしたら -- かとりーぬ(TA)? 2006-02-07 (火) 13:03:53
  • すいません。動作確認をしたら、また聞かせてください。 -- かとりーぬ(TA)? 2006-02-07 (火) 13:04:50
  • ページ全体に言える事ですが、小見出しや文字に多少のメリハリをつけると見やすいと思います。 -- まいける(TA) 2006-02-08 (水) 23:20:54
  • 指摘ありがとうございます。直してみました。少しはメリハリがついたでしょうか? -- あんず? 2006-02-08 (水) 23:41:26

ロボコン

ロボット、プログラム等はロボコンのページに乗っている通り。

感想

ロボットの製作の初期段階では、なかなかアイデアも出なくて意見が言えず、部品整理くらいしかできなかったけど、だんだんロボットが完成してくると、光センサのつける位置や、反射板としての羽のアイデアとかが出せてよかった。本番では、2つしか運べなかったけど、本番の後、三つ目も運べて、ロボットの前輪が持ち上がるという秘密兵器が見てた人には見せられてよかった。

採点について

他の班に比べて低くてごめんなさい。基準通りつけたつもりだったのですが、掴みもしないで終わる班や、ライントレースまでいけない班にいまいち点がつけられず、途中から基準を甘くすることもできず…。全ての採点をしてから集計のほうがいいと思います。あと、アピールの時間ももっととらないと、そのへんの点数もつけにくかったです。実力的にはC5に負けてなかったと思うので、採点のせいで他の班の反感を買って負けたのだとしたら、どみさんに申し訳ないです。

ロボティックス入門ゼミを受講して

全体を通しての感想

ロボット作りが思ったよりも難しく、なかなか手が出せなかった。プログラミングなんて初めてでわからないことばかりだったけど、時々は思った通りにしっかり動くプログラミングが書けてよかった。多分このゼミを受けなかったら一生プログラミングとは無縁だったと思うので、いい経験ができた。パソコンもあまりいじったことはなかったけど、最近はずっとホームページ作りを勝手に担当していたので、ホームページの作り方やブラインドタッチのスキルが上がった気がしてうれしい。予想以上に大変な授業だったけど、得るものも多かったので受講できてよかったと思う。


添付ファイル: filerobo2.jpg 253件 [詳細] filerobo1.jpg 261件 [詳細] filekadai4.jpg 267件 [詳細] fileIMG_0237.jpg 247件 [詳細] fileIMG_0236.jpg 170件 [詳細] fileimg_0007_Medium.jpg 232件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-02-17 (金) 04:55:33 (4933d)