2010b

課題の内容

A4の紙に相棒の似顔絵を書くロボットを作成せよ。

ルール

・一人につき一つ以上のプログラムを作成すること。
・ペン以外はキットに含まれる部品を使うこと。
・キットに付属の高価な輪ゴムは切れやすいので切れないように細心の注意を払うこと。
・改良や調整をしやすくするため、ロボット本体だけでなく、プログラムについても可能な部分については
  サブレーチンや関数、マクロなどを使って部品にわけること。

メンバー

ヒカル

理香

ロボットについて

本体

似顔絵を描くのに必要なペンを上下させる動作をスムーズに行えるようにしたかったため、シンプルな作りにしました。なので、土台の部分は初期のまま一切改造しませんでした。しかし、ペンの上下運動を行わせる部分は細かい所にまで気を配り、ミスのないようにしました。 最後にペンをどの位置につけるか迷いましたが、ロボットの動きを損なわせないために上部に取り付けました。これによりロボットはブレることのないスムーズな動きができたとおもいます。

101108_170009.jpg

工夫点

工夫した点は描いている最中にペンがブレないように支えをつけた点と、ペンの上げ下げをしているときにだんだんとギアがずれてしまうところを上手く固定した点です。小さいところだったので見逃しそうでしたが、この工夫によって、似顔絵の輪郭をしっかりと描くことができ、顔のパーツもブレることが少なくなりました。基本的に単純な作りですが、ペンの部分には気を使いました。

101108_170038.jpg
101108_170147.jpg

苦労した点

始めはタイヤじゃなくて足でやっていたのですが、それでは描くときにブレてしまうので今のタイヤに変えました。しかし、タイヤに大きいギアを使ってしまったのでペンの上下で使うギアが小さくなってしまいました。そのため上げるときにぶつかってしまっていたので、ブロックで固定するのは止めて今の形に持っていきました。しかし、始めのうちはギアがずれてしまい途中でギアが外れてしまったので、留め具で固定し、きっちりとはめることにしました。その結果ずれることがなくなり、安定したペンの上下運動を実現することができました。

プログラム

ヒカル

#define Pen_Down(t) OnFwd(OUT_B);Wait(t);Off(OUT_B);                //ペンを下げる
#define Pen_Up OnRev(OUT_B);Wait(5);                                //ペンを上げる
#define Right(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t);Off(OUT_A+OUT_C);//右に回る
#define Left(t) OnFwd(OUT_C);OnRev(OUT_A);Wait(t);Off(OUT_A+OUT_C); //左に回る
#define Forward(t) OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);     //前進する
#define Retreat(t) OnRev(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);     //後退する

task main()
{
Pen_Down(10);
Right(530);  //顔の形を書く
Pen_Up;
Left(66);
Retreat(60);
Pen_Down(23);//右目を書く
Retreat(30);
Pen_Up;
Retreat(25);
Pen_Down(23);//左目を書く
Retreat(30);
Pen_Up;
Forward(120);
Left(80);
Retreat(20);
Pen_Down(23);//鼻を書く
Retreat(20);
Pen_Up;
Forward(45);
Right(35);
Pen_Down(23);//口を書く
Left(70);    //完成

}

完成した似顔絵

20101108170004.jpg

単調の仕上がりになってしまったので、今度は髪の毛や眉毛など細かい部位にまで気を配りたいです。

理香

#define circle(t) OnFwd(OUT_A); OnRev(OUT_C); Wait(t); Off(OUT_A+OUT_C);//円を書く
#define pen_down OnFwd(OUT_B); Wait(20); Off(OUT_B);                    //ペンを下げる
#define pen_up OnRev(OUT_B); Wait(20); Off(OUT_B);                      //ペンを上げる
#define go_forward(t) OnFwd(OUT_A+OUT_C); Wait(t); Off(OUT_A+OUT_C);    //前進
#define go_back(t) OnRev(OUT_A+OUT_C); Wait(t); Off(OUT_A+OUT_B);       //後進
#define turn_right(t) OnFwd(OUT_A); Wait(t); Off(OUT_A);                //右に回る
#define turn_left(t) OnFwd(OUT_C); Wait(t); Off(OUT_C);                 //左に回る

task main()
{
pen_down;	//輪郭を書く
circle(530);
pen_up;

turn_left(20);	//向きを変える
go_back(20);	//位置を調整

pen_down;	//右目を書く
go_back(30);
pen_up;

turn_right(50);	//向きを変える
turn_left(70);
go_back(18);	//位置を調整

pen_down;	//左目を書く
go_back(30);
pen_up;

go_forward(60);	//向きを変える
turn_right(130);	
go_back(50);	//位置を調整
OnRev(OUT_C);	//向きを変える
Wait(50);
Off(OUT_C);
go_back(50);	//位置を調整

pen_down;	//口を書く
go_back(60);
pen_up;		//終了
}

完成した似顔絵

101108_162940.jpg

シンプルになってしまいましたが、目を縦に書くときに本体の向きを変える必要があり、角度や位置に苦労しました。

感想

ヒカル

今回は初めてのプログラミングでなれないことが多く、作業効率が悪くなってしまったため簡単なものになってしまいましたが、次は創意工夫を施し、より完成度の高い物を作りたいと思います。 そのためには他の班の人のプログラムを見て学んだり、プログラミングのルールをよく理解してそれを使いこなせるようによく復習したいと思います. そして、今回の反省としては、より複雑な似顔絵を描くためにはプログラムだけでなく、ロボット本体にも工夫を施さなければいけないと思いました。

理香

プログラミングすることによりモーターを動かし、実際の動きにするというのが予想以上に難しかったです。 今回の反省点としては、プログラミングであまり工夫ができなかったことです。もう少し凝ったものにするには、モーターの回転時間でどれほど進むのか、回転の組み合わせ方は適切かどうかなど、本体とモーターの関係をもう少し理解すればよかったと思います。そして、次にどのような動作をするのか、そのために向きや位置はどうしたらよいかなど、一つ一つ確認しながらやっていきたいと思います。

コメント

ご自由にお書きください

  • 苦労した点について、その過程をより詳しく説明すると良いと思います。感想についてもさらに書き出してみて下さい。 -- TAKA? 2010-11-12 (金) 16:53:01
  • 書くべきことは書いていますが、もっと内容を増やしてください。例えば、工夫した点を詳細に説明したり、似顔絵をもっと滑らかに複雑にするためにはどうするかの議論等を加えてみるとよいと思います -- FI? 2010-11-12 (金) 18:11:55


添付ファイル: file101108_170147.jpg 207件 [詳細] file101108_170038.jpg 207件 [詳細] file101108_170009.jpg 200件 [詳細] file20101108170004.jpg 198件 [詳細] file101108_162940.jpg 225件 [詳細] file20101108162940.jpg 130件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-11-15 (月) 12:15:14 (3203d)