2008b

お絵描きロボットの作成

A3用紙に相方の似顔絵を描くロボットを作成する。

目次

方針

似顔絵を描くということで、なるべく簡単なプログラムで描けるよう顔の輪郭は丸に統一した。また二つのプログラムで表情の違いを出すことを意識した。

作成の手順

  • 基礎部分を作成

強く安定した動きが見込めるため、付属の説明書に紹介されていたローヴァーロボットをそのまま採用し、基礎とした。

  • アームの作成

ロボットに似顔絵を描かせるにあたってペンを上下させる必要があるので、まずはじめにアーム部分の作成をすることにした。
強度や安定性を考慮し、ペンを垂直に上下させるタイプを製作することに。 よりしっかりとペンを保持させるために,タイヤのゴムを利用した。
モーターを動かすと二つのタイヤが回転し,ペンを上下させる。

base.jpg

板状のパーツで挟み込んで固定した。
この際、タイヤのゴム部分と板が摩擦してタイヤがうまく回らない問題が起こったが、タイヤと板の間に小さな円形のパーツを挟むことで克服した。

armside1.jpg
  • 工夫点

アーム部分が若干重く強度に不安があったため、板やブロック状のパーツでペンを持つ装置の設置部分を補強した。

view1.jpg
back1.jpg

プログラム

  • べっとー

顔を描く際、柔らかさを出すために極力曲線を使い、なおかつ単純なプログラムで動作することを目標に作成した。
まず基本通りにプログラムを作り、その後マクロを利用して簡略化した。
次の図の順に線を描いてゆく。

tejun.jpg
#define straight(t) OnFwd(OUT_A+OUT_C); Wait(t); Off(OUT_A+OUT_C);     //前進する
#define back(t) OnRev(OUT_A+OUT_C); Wait(t); Off(OUT_A+OUT_C);     //後退する
#define right(t) OnFwd(OUT_A); OnRev(OUT_C); Wait(t); Off(OUT_A+OUT_C);     //右に曲がる
#define left(t) OnRev(OUT_A); OnFwd(OUT_C); Wait(t); Off(OUT_A+OUT_C);     //左に曲がる
#define down OnFwd(OUT_B); Wait(15); Off(OUT_B); Off(OUT_B);     //ペンを下ろす
#define up OnRev(OUT_B); Wait(10); Off(OUT_B); Off(OUT_B);     //ペンを上げる

task main()
{
down;     //ヽ始
right(380);
up;     //―了

back(20);
right(37);
down;     //開始
left(40);
up;     //⊇了
left(10);
down;     //3始
left(40);
up;     //終了
right(37);

back(15);
right(40);
down;     //こ始
left(30);
up;     //そ了
left(10);
down;     //コ始
left(30);
up;     //ソ了

left(125);
back(55);
right(25);
down;     //Τ始
left(80);
up;     //終了

right(38);
back(10);
down;     //С始
back(30);
up;     //Ы了

straight(320);     //紙の上から退く
}
  • タカシ

マクロを用いてプログラムを簡潔にすることを心がけた。

tejun2.jpg
#define pen_up OnRev(OUT_B);Wait(10);Off(OUT_B);   // ペンを上げる
#define pen_down OnFwd(OUT_B);Wait(15);Off(OUT_B);   // ペンを下げる
#define turn_left(t) OnRev(OUT_A);OnFwd(OUT_C);Wait(t);Off(OUT_A+OUT_C);   // t/100秒左に曲がる
#define turn_right(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t);Off(OUT_A+OUT_C);   // t/100秒右に曲がる
#define go_straight(t) OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);   // t/100秒前進する
#define go_back(t) OnRev(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);   // t/100秒後進する

task main()   // (顔の輪郭)開始
{
pen_down;
turn_right(380);
pen_up;   // ―了

go_straight(10);
turn_right(90);
go_back(10);

pen_down;   //(左目)開始
go_back(30);
pen_up;   //⊇了

go_back(20);

pen_down;   //(右目)開始
go_back(30);
pen_up;   //終了

go_straight(90);
turn_right(50);

pen_down;   //(口)開始
turn_right(60);
pen_up;   //そ了

turn_left(30);
go_back(20);

pen_down;   //(鼻)開始
go_back(30);
pen_up;   //ソ了
}

実行結果

  • べっとー

プログラム自体は問題なく、ほぼ計画した通りに動いたので安心した。しかし、ロボットのペンの持たせ方が悪かったのか線がぶれて、所々線が薄くなってしまった。

cimg1100_Small.jpg
  • プログラムその2

こちらもペン先がぶれてしまい、線が途切れたり薄くなったりしてしまった。

cimg1099_Small.jpg

課題発表の際にペン先がぶれてしまい思ったような絵が描けなかった原因を考えたところ、タイヤを挟んでいるブロックの壁の間に構造上どうしても隙間ができてしまい、その隙間をペンが動いてしまっていたためであるとわかった。
このぶれはパソコン室の床のように柔らかい場所でロボットを動かせば起こらない。この欠点に気付けなかったのは、普段のロボットの試行を床に直接紙を敷く形で行っていたためである。

その後の改良点

発表の結果を省みて今一度アーム部分を作り直したところ、ブレの原因となる隙間をなくせた上に大幅に軽量化することができた。

arm2_view.jpg
arm2_f.jpg

小さい歯車を挟み込んでペンを固定し隙間をなくす事で、ロボットが絵を描く時のペンのぶれを防ぐ。

arm2_b.jpg

この装置によって、前回の装置よりもペンのブレをかなり抑えることができた。

反省&感想

作成に労力と時間がかかった上に発表の際には線がぶれてしまうトラブルもあったが最終的にはより性能の良い装置を作ることができ、上手く絵を描かせることができたので良かった。
何度も試行を繰り返す作業の重要性を理解することができた。

  • 写真を載せてください -- なかむら? 2008-11-12 (水) 17:10:38

コメントをどうぞ

  • 詳しくわかりやすいレポートだと思います。 -- FI? 2008-11-26 (水) 19:03:40
  • いいレポートになってます。これからもがんばってください -- なかむら? 2008-11-28 (金) 17:29:21


添付ファイル: filearm2_b.jpg 351件 [詳細] filearm2_f.jpg 357件 [詳細] filearm2_view.jpg 276件 [詳細] fileview1.jpg 344件 [詳細] fileback1.jpg 261件 [詳細] filecimg1099_Small.jpg 369件 [詳細] filecimg1100_Small.jpg 319件 [詳細] filearmside1.jpg 284件 [詳細] filebase.jpg 397件 [詳細] filetejun2.jpg 273件 [詳細] filetejun.jpg 361件 [詳細]

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