目次

課題1 似顔絵を描くロボット

ロボットの構造の工夫

このロボットの雛形は、マインドストームの四輪駆動型ロボットです。

・はじめにモーターとアームを繋ぐときにすぐにできるだろうと気楽な感じでゴムで繋ごうとしたのですが、すぐに外れるし空回りしてうまく動力が伝わらなくてあきらめました。 横の動きによってよじれの生じるゴムの使用は避け、ギアによる駆動機構を搭載しました。

・ギアにすることでペンの動きをゆっくりにすることができ、勢いを抑えれるようにしました。そしてギアを固定するのと見た目を良くするためにブロックでギアを囲みました。

090521_1856~01.jpg

・ペンを上げ下げするときに地面につく衝撃でペンがぶれてしまいうまく線を引けなかったのでしっかり固定させる方法を探すのにかなり苦労しました。 ペンを固定する部分はゴムでの固定は避け、両方から挟んでいくつかの支点でささえるようにしました。その結果なかなかの強度になりました。

090521_1819~01.jpg

・ペンの上下の動きに耐えれるようにモーター2の部分をしたから支えるようしました。

090521_1855~02.jpg

・はじめに作った時はタイヤが本体と接触してしまいうまく回転しなかったので車輪と本体の間にパーツを入れて接触しないようにしました。

・完成はこれです。シンプルですが強度はあります。

090521_1855~01.jpg

ロボットの基本的なプログラム

全員に共通する基本的なプログラムです。大体こんな感じで作っていけば似顔絵ができそうだ、という話になりました。

・顔の輪郭を描く。

・眼を描くための軌道修正をする。

・眼を描く。

・口を描くための軌道修正をする。

・口を描く。

あとはそれぞれ変化を加えて似させる。

・プログラムに関数、マクロ、サブルーチンを使い整理する。

それぞれのプログラム

これがハるのプログラムです。

マクロを使いました。

 #define turn_left(t) OnRev(OUT_A);OnFwd(OUT_C);Wait(t);Off(OUT_A+OUT_C);
 #define turn_right(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t);Off(OUT_A+OUT_C);
 #define go_straight(t) OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);
 #define pen_updown OnRev(OUT_B);Wait(10);OnFwd(OUT_B);Wait(10);Off(OUT_B);

 task main()  { まずは輪郭を。

 OnFwd(OUT_A);
 Wait(850);
 Off(OUT_A);

位置を調整し、目を描く。

 OnFwd(OUT_B);
 Wait(10);
 Off(OUT_B);
 turn_left(200)
 go_straight(50)
 pen_updown
 go_straight(50)
 pen_updown

さらに位置を調整し、長めの口をかく。

 turn_left(100)
 go_straight(50)
 turn_left(100)
 go_straight(100)
 OnRev(OUT_B);
 Wait(10);
 Off(OUT_B);
  OnFwd(OUT_A+OUT_C);
  Wait(150);
  Off(OUT_A+OUT_C);

上を向いた松の顔です。

090522_1757~01.jpg

こちらがスガのプログラムです。

プログラムを簡単にして繰り返しをさけるためにマクロを使いました。おかげで何度も同じプログラムを書かずにすみました。

#define pen_up  OnFwd(OUT_B);Wait(10);Off(OUT_B); //ペンを上げる
#define pen_down  OnRev(OUT_B);Wait(10);Off(OUT_B);//ペンを下げる
task main()
{

まず輪郭を描きます。

pen_down;           //輪郭を描く
OnFwd(OUT_A);
Wait(765);
Off(OUT_A);
pen_up;
OnFwd(OUT_C);
Wait(50);

次に目を描きます。目を描くときは同じ動きだったのでrepeatを使いました。 

repeat(2){                    //目を描く
OnFwd(OUT_A+OUT_C);
Wait(20);
pen_down;
Wait(30);
pen_up;
}

鼻を描きます。

OnRev(OUT_A+OUT_C);          //鼻へ移動
Wait(200);
OnFwd(OUT_A);
Wait(40); 
OnFwd(OUT_A+OUT_C);
Wait(140);
pen_down;                       //鼻を描く
Wait(15);
pen_up;
Wait(50);

ここで方向転換を正確にしたかったので一度offにしてスピードをおとしました。

Off(OUT_A+OUT_C);
Wait(50);

そして最後に口を描きます。

OnFwd(OUT_C);                    //口へ移動
OnRev(OUT_A);
Wait(240);
OnFwd(OUT_A+OUT_C);
Wait(170);
pen_down;                           //口を描く
Wait(20);
OnFwd(OUT_A+OUT_C);
Wait(30);
pen_up;
OnFwd(OUT_A+OUT_C);
Wait(300);
Off(OUT_A+OUT_C);
}

完成です。

ハるの顔です。横を向いて黄昏れている感じ。

090522_1757~02.jpg

この方が松のプログラムとなっています。

関数を使いました。

#define  pen_move 10

ペンを上げます。

sub  pen_up()            
{
OnFwd(OUT_B); Wait(pen_move);
Off(OUT_B);
}

ペンを下げます。

sub pen_down()
{
OnRev(OUT_B); Wait(pen_move);
Off(OUT_B);
}

ここがメイン!

task main()
{
pen_down();

輪郭を書きます。

OnFwd(OUT_A); Wait(850);
Off(OUT_A);
pen_up();
OnFwd(OUT_C); Wait(50);

目です、チョンチョンと書きます。

repeat (2)
{
OnFwd(OUT_A+OUT_C); Wait(20);
pen_down(); Wait(30);
pen_up();
}

旋回して、

Toggle(OUT_A+OUT_C); Wait(160);
Off(OUT_A+OUT_C);
OnFwd(OUT_C); Wait(60);
OnRev(OUT_A);
Off(OUT_C+OUT_A);

口を書きます、にっこりです。

pen_down(); Wait(60);
OnFwd(OUT_C); Wait(60);
OnRev(OUT_A);
Off(OUT_C+OUT_A);
pen_up();

顔の上からどきます。

OnRev(OUT_A+OUT_C); Wait(300);
Off(OUT_A+OUT_C);
} 

スガです。だいたいこんな感じ。

090522_1757~03.jpg

感想

プログラムがこんなに難しいものだとは思いもしていなくてくじけそうになりました。 やることがほとんど初めてのことでうまくプログラムできなかったり、微調整とかが大変でなかなかに疲れましたが、かなり楽しかったです。自分のプログラムで絵が描けた時は本当に感動して嬉しかったです。

今回は基本的なことを多く覚えました。 まだ次の課題もあるので、そこでは今回学んだことを生かしてさらに高度なロボットとプログラムを作ります。

コメント

コメントやアドバイスがありましたらどうぞよろしくお願いします。

  • ロボットの説明やプログラムの方針等、しっかりしています。あとは、似顔絵の写真を貼ったり、2人目のプログラムの説明を入れましょう。 -- FI? 2009-05-21 (木) 18:45:26
  • 強度を追求するための工夫の説明がとても分かりやすいです。スガさんのプログラムの説明がわかりやすくよく書けていますので、松さんとハるさんも参考にしてみてください! -- こさか? 2009-05-21 (木) 22:59:05
  • コメントありがとうございます。分かりました。改善します。 -- スガ? 2009-05-22 (金) 17:00:14
  • プログラムの説明の分かりやすさが断然違います!わかりやすく説明することで、ご自分の理解度も上がったことと思います。 -- こさか? 2009-05-28 (木) 23:09:14
  • ロボットの説明が詳しく、プログラムの説明がまとまりごとにされていてとても分かりやすいです。また最初に大まかな方針を立てているのも良いです。 -- FI? 2009-06-05 (金) 03:43:44


添付ファイル: file090522_1757~03.jpg 251件 [詳細] file090522_1757~02.jpg 222件 [詳細] file090522_1757~01.jpg 246件 [詳細] file090521_1856~01.jpg 246件 [詳細] file090521_1855~02.jpg 244件 [詳細] file090521_1855~01.jpg 239件 [詳細] file090521_1819~01.jpg 270件 [詳細] file20090521170629.inetloc 146件 [詳細] fileCanada.gif 129件 [詳細] file090515_1844~01.jpg 132件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-06-05 (金) 03:43:44