[[2010a]]
*課題:似顔絵ロボット [#g0f7d89c]
目次
*目次 [#l3329b6a]
#contents
*課題1:お絵描きロボット[#m5b46553]
''A3の紙に相棒の似顔絵を書くロボットを作成せよ。''&br;
-ひとりにつき一つ以上のプログラムを作成すること。
-ペン以外はキットに含まれる部品を使うこと。
-キットに付属の高価な輪ゴムは切れやすいので切れないように細心の注意を払うこと。
-改良や調整をしやすくするため、ロボット本体だけでなく、プログラムについても可能な部分についてはサブルーチンや関数、マクロなどを使って部品に分けること。
*メンバー [#h97b91c0]
Mizu &br; 
Ta2
*ロボット [#b04b3e01]
**目標 [#h7616616]
-耐久性の高いロボットを作る。
-ペンを持たせる部分に輪ゴムを使わない!
-パーツ毎に分解できるようにする。
**本体 [#a4cf844e]
#ref(MS改良前全体.JPG,around,left)
#ref(MS改良後全体.JPG,around,right)
LEFT:←改良前です。
RIGHT:改良後→
#clear
**タイヤ [#yd97c6ba]
#ref(MS改良前タイヤ.JPG,around,left)
#ref(MS改良後横から.JPG,around,right)
LEFT:←こちらも改良前。
RIGHT:改良後→
#clear
-回転しづらい、車体が揺れるなどの理由でタイヤに。
-前後のタイヤの距離が離れていたため回転時に無駄な力がかかっていた、なので4輪から2輪+キャスターに変更。
**筆記部分 [#v129babf]
#ref(MSペン持ち部(外側).JPG,around,left)
#ref(MSペン持ち部(内側).JPG,around,right)
LEFT:外から見るとこんな感じ。
RIGHT:こんな感じにペンが挟まります。
#clear
筆記部分は改良せず。
**工夫した点 [#s755ca0d]
-本体にこだわり、耐久度を強めに作った。
-歯車の大きさをモーター側とペン側で大きく変えてゆっくり上げ下げできるように調整した。
-ペンを持つ部分に輪ゴムを使わずタイヤを使って、ペンがぶれずにまっすぐな線を描くことができるようにした。
*プログラム [#haab2724]
**Mizuの場合 [#h76d5ea3]
***プログラム [#y49a85d0]
 #define PEN_TIME 10		//ペンの上げ下げにかかる時間
 #define TURN 50		//車体を回転の軸まで持っていく時間
  
 sub down()	//ペン下ろす
 {
 	OnFwd(OUT_B);Wait(PEN_TIME);Off(OUT_B);	
 }
 sub up()	//ペン上げる
 {
 	OnRev(OUT_B);Wait(PEN_TIME);Off(OUT_B);
 }
 #define go(i) OnRev(OUT_A);OnFwd(OUT_C);Wait(i);Off(OUT_A+OUT_C);
 //iミリ秒前進
 #define back(i) OnFwd(OUT_A);OnRev(OUT_C);Wait(i);Off(OUT_A+OUT_C);
 //iミリ秒後退
 #define right(i) back(TURN);OnRev(OUT_A+OUTC);Wait(i);Off(OUT_A+OUT_C);go(TURN);
 //iミリ秒右回転,136で360°回転,17で45°回転,45で120°回転
 #define left(i) back(TURN);OnFwd(OUT_A+OUT_C);Wait(i);Off(OUT_A+OUT_C);go(TURN);
 //iミリ秒左回転
 
 task main()
 {
	up();down();go(70);					//輪郭 ペンを紙につけて開始
	up();left(34);down();go(100);
	up();left(17);down();go(50);
	up();left(34);down();go(100);
	up();left(17);down();go(50);
 
	up();back(25);left(88);go(10);			//移動
	down();go(15);up();go(20);down();go(15);		//眉
 
	up();left(34);go(5);left(34);go(8);		//移動
	down();Wait(50);up();go(34);down();Wait(50);		//目
 
	up();back(12);right(34);go(10);			//移動
	down();go(25);up();right(34);				//鼻
	down();go(10);up();right(34);
	down();go(25);
 	
	up();back(35);right(34);back(5);			//移動
	repeat(3){down();go(20);up();right(45);}		//口
 
	go(200);	//紙の上から移動
	
 }

-サブルーチン、マクロなどを使ってプログラムを短くすることができた。
-書き順や回転方向をできるだけ無駄が出ないように気を使った。
***完成品[#h11af6d6]

時間が足りなくて微調整をすることができず、完成できなかった。
***完成予想図 [#g42392f3]
#ref(完成予想図.png)
**Ta2の場合 [#d1f89340]
***プログラム [#sdad7f2e]
 #define Pen 10
 
 #define move 100
 
  void straight(int i) //前進 
    {
	OnRev(OUT_A);OnFwd(OUT_C);
	Wait(i);
	Off(OUT_A+OUT_C);
    }
 
  void back(int i) //後退 
     {
	OnFwd(OUT_A);OnRev(OUT_C);
	Wait(i);
	Off(OUT_A+OUT_C);
     }
 
   void right(int i) //右回転 
     {
	OnRev(OUT_A+OUT_C);
	Wait(i);
	Off(OUT_A+OUT_C);
     }
 
  void left(int i) //左回転 
     {
	OnFwd(OUT_A+OUT_C);
	Wait(i);
	Off(OUT_A+OUT_C);
     }
 
  sub pen_down() //ペン下ろす 
    {
	OnFwd(OUT_B);
	Wait(11);
	Off(OUT_B);
    }
 
  sub pen_up() //ペン上げる 
    {
	OnRev(OUT_B);
	Wait(Pen);
	Off(OUT_B);
    }
 
 
 task main()  
 {
      straight(80);   //まずは輪郭、ペンを下げた状態からスタート
      pen_up();
 
      back(60);
      left(20);
      Off(move);
      straight(50);
      pen_down();
      straight(30);
      pen_up();
 
      back(60);
      left(20);
      Off(move);
      straight(50);
      pen_down();
      straight(40);
      pen_up();
 
      back(40);
      left(20);
      Off(move);
      straight(50);
      pen_down();
      straight(30);
      pen_up();
 
      back(40);
      left(20);
      Off(move);
      straight(150);   
      pen_up();        //輪郭ここまで
 
      left(40);        //髪の書き始め
     repeat(5)
       { 
      straight(20);
      pen_down();
      right(3);
      pen_up();
      left(3);        //髪ここまで
       }
 
      left(40);        //眼鏡ここから
      straight(30);
      left(40);
      straight(40); 
      pen_down();
      straight(25);
      pen_up();
      straight(15);
      pen_down();
      straight(10);
      pen_up();
      straight(15);
      pen_down();
      straight(25);
      pen_up();
      left(90);
      straight(5);
      left(90);
      straight(65);
      pen_down();
      right(10);
      left(10);
      straight(15);
      pen_up(); 
      straight(10);
      pen_down();
      right(10);
      left(10);
      straight(15);
      pen_up();
      left(90);
      straight(10);
      left(90);
      straight(40);
      pen_down();
      right(10);
      left(10);
      straight(15);
      pen_up();
      straight(10);
      pen_down();
      right(10);
      left(10);
      straight(15);
      pen_up();
      straight(25);     //眼鏡ここまで
 
      right(135);       //口ここから
      straight(40);
      right(45);
      pen_down();
      right(45);
      pen_up();         //口ここまで 
 
 
      straight(20);     //鼻ここから
      pen_down();
      straight(5);
      pen_up();         //鼻ここまで
 
 
      straight(100);    //終了
 }
***完成品 [#z77ffc1b]
残念ながらぐちゃぐちゃになってしまって、人の顔を作ることができなかった…&br;
眼鏡の難しさを痛感
***完成予想図 [#g42392f3]
#ref(robotics_予定図.jpg,around,left)
眼鏡から目を変更して予定ではこうなる予定だったのに…
#clear
*今後の改善点 [#s48f05fa]
-本体の重心がロボットの中心に来るようにする。
-正確に線をかけるようにするためにギヤやタイヤの大きさを変えて速度を遅くする。
-車体が大きく線を描くときにタイヤが紙からはみ出てしまうので、できるだけコンパクトな車体にする。
-歯車のかみ合わせが良くないところがあるので大きさや位置を調整する。
*感想 [#u1da219d]
**Mizu [#d749331c]
人なら簡単にできることをロボットでやろうと思うととても難しくて改めてロボット製作の大変さを感じた。
**Ta2 [#y66d42bf]
ロボット本体にこだわりすぎて、プログラムがちょっと雑に…&br;
最初キャタピラだったが、うまくいかなかったため、タイヤに変えるのに苦労した。
*コメント [#z0c2e52a]
コメントをどうぞ
- 大体かけていますが、せっかくロボットをつくる際に試行錯誤をしたのだから、どんな問題があり、どうして解決できたのかや改良前後の比較や考察などを書けばもっと良くなるかと思います -- [[FI]] &new{2010-05-21 (金) 08:55:33};
- ロボット本体への工夫がみられるので、もっとまとめてみて下さい。良いものになると思います -- [[TAKA]] &new{2010-05-21 (金) 14:12:53};
- 本体へのこだわりは見られ良いと思います。しかし、最終的な顔の完成図がないので、ぜひ完成させてください。本体の動きを考えながら、プログラムを作ってみてください -- [[TAKA]] &new{2010-06-18 (金) 16:35:45};

#comment


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS