2009a

課題 似顔絵ロボット

目標

似顔絵ロボットなので犹顔絵″らしく描かせる(輪郭は丸だけににしない)ことを目指しました。

ロボットの外観

ロボットはシンプルかつ機能性にこだわるように心掛けました。 最初はキャタピラでしたが小回りが利かないのでタイヤに変更しました。


front.JPGside.JPG

前からと横から見た写真

ごちゃごちゃせずだいぶシンプルにまとまりました。

ペンを持たせる

ペンはボールペンの芯のみを使用しました。 最初はセロハンテープで止めていましたが、それは禁止ということで輪ゴムに変更。結果、よりスマートになりました。


pen updown.jpg

ペンが上にずれるのを防止するために写真のような感じにレゴで補強しました。

KEIのプログラム(daikiの顔)

#define  down OnFwd(OUT_B);Wait(12);Off(OUT_B);	//ペンを下げる
#define  up OnRev(OUT_B);Wait(8);Off(OUT_B);	//ペンを上げる
#define  go(t) OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);	//t秒間まっすぐ進む
#define  back(t) OnRev(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);	//t秒間バックする
#define  senkai_r(t) OnFwd(OUT_C);OnRev(OUT_A);Wait(t);Off(OUT_C+OUT_A);	//t秒間右旋回
#define  senkai_l(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t);Off(OUT_A+OUT_C);	//t秒間左旋回
task main ()
{
	down;			//輪郭はじめ
	go(95);
	up;
	go(55);
	senkai_r(67);
	back(45);
	down;			//輪郭2本目
	go(85);
	up;
	go(51);
	senkai_r(40);
	back(45);
	down;			//輪郭3本目
	go(90);
	up;
	go(55);
	senkai_r(73);	
	back(45);
	down;			//輪郭4本目
	go(95);
	up;
	go(40);
	senkai_l(90);
	back(65);
	down;			//頭の半円
	senkai_r(235);
	up;
	back(30);		
	down;			//左目
	back(25);
	up;
	back(25);
	down;			//右目
	back(25);
	up;
	back(30);
	OnRev(OUT_C);
	Off(OUT_A);
	Wait(30);
	OnFwd(OUT_A+OUT_C);
	Wait(50);
	OnFwd(OUT_A+OUT_C);
	Wait(25);
	down;      		//ペン下ろす鼻
	OnRev(OUT_C);
	Off(OUT_A);
	Wait(50);
	OnFwd(OUT_A+OUT_C);
	Wait(25);
	up;          		//ペンはなす
	Wait(12);
	OnFwd(OUT_C);
	Off(OUT_A);
	Wait(40);
	OnRev(OUT_C);
	down;		         //ペン下ろす口
	Wait(30);
	up;		         //ペンはなす
	Off(OUT_A+OUT_B+OUT_C);
}

出来るところはまとめてみました。 目や鼻は複雑なのでそのままにしました。

完成した絵


Kpict.JPG

Dは坊主なので頭は丸くしました。ただの丸では似てないので下半分はベース型に。

輪郭はそこそこ似てると思います。

daikiのプログラム(KEIの顔)

Kの似顔絵です。顔の輪郭をベース型にしたかったが、結局妥協した。髪型はKに似せることができた。プログラミングはマジ疲れたけど、完成させることができてよかった。相方と知恵を出し合い、協力して作業をこなせたのでよかったな。

#define  down OnFwd(OUT_B);Wait(12);Off(OUT_B);	//ペンを下げる
#define  up OnRev(OUT_B);Wait(8);Off(OUT_B);	//ペンを上げる
#define  go(t) OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);	//t秒間進む
#define  back(t) OnRev(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);	//t秒間バック
task main()
{
     down;
     go(60);
     up;                //顔輪郭1本目
     back(5);
     OnFwd(OUT_C);
     Off(OUT_A);
     Wait(150);
     back(100);
     down;
     up;                //顔輪郭2本目
     go(60);
     up;                //顔輪郭2本目
     back(5);
     OnFwd(OUT_C);
     Off(OUT_A);
     Wait(150);
     back(100);
     down;
     Wait(68);             //顔の輪郭完成
     go(68);                    //顔の輪郭完成
     up;
     OnRev(OUT_A);
     Off(OUT_C);
     Wait(182);
     down;               //前髪スタート
     OnFwd(OUT_A);
     Wait(40);
   repeat(4){
     OnRev(OUT_A);
     OnFwd(OUT_C);   
     Wait(22);
     Off(OUT_C);
     OnFwd(OUT_A);
     Wait(40);
   }                  //前髪完成
     OnRev(OUT_C);
     OnFwd(OUT_A);
     Wait(52);
     Off(OUT_A);
     Wait(31);
     go(20);
     OnRev(OUT_C);
     OnFwd(OUT_A);
     Wait(20);
     OnRev(OUT_A);           //後髪スタート
     Wait(20);
     OnFwd(OUT_A);
     Wait(10);
     Off(OUT_C);
     OnRev(OUT_A);
     Wait(10);
     OnFwd(OUT_A);
     OnRev(OUT_C);
     Wait(20);
     Off(OUT_C);
  repeat(8){   
     OnRev(OUT_A);
     Wait(10); 
     OnFwd(OUT_A);
     OnRev(OUT_C);
     Wait(10);
     Off(OUT_C);
    }
     OnRev(OUT_A);
     Wait(15);
     OnFwd(OUT_A);
     OnRev(OUT_C);
     Wait(10);
     Off(OUT_C);
     OnRev(OUT_A);
     Wait(20);
     OnFwd(OUT_A);
     OnRev(OUT_C);
     Wait(10);
     Off(OUT_C);
     OnRev(OUT_A);
     Wait(20);
     OnFwd(OUT_A);
     OnRev(OUT_C);
     Wait(20);
     Off(OUT_C);
     OnRev(OUT_A);
     Wait(30);               //髪型完成
     up;
     go(20);
     Off(OUT_A);
     OnRev(OUT_C);
     Wait(80);
     OnRev(OUT_A);
     Wait(50);
     down;
     Wait(40);               //口完成
     up;
     Off(OUT_A);
     OnFwd(OUT_C);
     Wait(50);
     Off(OUT_C);
     OnFwd(OUT_A);
     Wait(30);
     down;
     back(20);
     up;                  //左目完成
     Wait(20);
     up;                  //左目完成
     down;
     Wait(20);               //右目完成
     Off(OUT_A +OUT_B+ OUT_C);
} 

完成した絵


Dpict.JPG

自分らの造ったロボがこんな絵を描いてくれた。うん、やっぱりボールペンにしてよかったな、綺麗だし!時間がなく、顔のパーツは妥協した(眉毛も書かせたかったし)。

問題点&工夫したところ

・旋回した後にペン先がずれてしまう  

   →プログラムで修正することに成功(ペンをロボットの中央に取り付ければ良かったが、気づくのが遅すぎて断念しました…。)

・描くごとに若干絵にズレが生じる。

 →ペン部分の強度を上げるなど工夫をしましたが解決できませんでした。原因がいまいち分かりません…。   

感想

二人ともプログラミングは初めてだったので慣れるまでは苦戦しました。最終的に良い絵?が出来たので良かったです。

ロボットにしてもプログラミングにしても改善の余地がとても多いですが時間的に厳しく、残念ながら妥協してしまいました…。次の課題に活かせるものがあればいいと思いました。

コメントをどうぞ

  • ペンの上げ下げなど割と詳しく説明していて良いと思います。サブルーチンや関数等を使ってみてください -- FI? 2009-05-21 (木) 10:37:48
  • ロボットの工夫がわかりやすいです。似顔絵に特徴を表現しようという姿勢は高ポイント!惜しむらくはプログラム。課題の条件「可能な部分についてはサブルーチンや関数、マクロなどを使って部品に分けること。」を達成するためにも、まずはソースに説明を入れてみてください。 -- こさか? 2009-05-21 (木) 22:31:45
  • 例えば、Dさんのプログラムの「顔の輪郭完成」までは、どこまでがどの線なのか?というようなことも説明があると有難いです。作った本人はわかっても、我々にはサッパリだったりしますので…。 -- こさか? 2009-05-28 (木) 23:36:23
  • 書くべきことは書けています。さらに良いレポートにするためには、「詳しく、わかりやすく」がポイントだと思います。例えば、工夫した点の一つ目の「プログラムで修正すること」などはあいまいです -- FI? 2009-06-05 (金) 03:26:15
  • マクロの使用はできています。プログラムの説明は、数行に1つは欲しいところです。どの線、どっちに曲がって、次はどの線、くらい詳しくても問題ないですので。 -- こさか? 2009-06-05 (金) 13:27:24


添付ファイル: fileside.JPG 295件 [詳細] filepen updown.jpg 281件 [詳細] fileDpict.JPG 287件 [詳細] filefront.JPG 284件 [詳細] fileKpict.JPG 272件 [詳細]

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