課題 似顔絵ロボット

目標:A3用紙に相棒の似顔絵を描く。

(1)上手に描く
(2)できるだけ似せる
(3)誰だか分かるように
(4)せめて人間っぽく・・・


〜ロボット制作の流れ〜

   初めに:本体部分は基本的に手を加えず、説明書道理に作ったものを基本としました。 ですからここにはペンを動かす機構について書いていこうと思います。

初期構想 〜いってみようやってみよう〜

  1 車体の中心部を空けてペンを空けるスペースを作る
  2 そこにペンを床と垂直になるように設置する
  3 上から天井が押すような力によりペンを床につけ、描く
  4 ペンを紙から離す際は、ペンにつけたゴムの力で元の位置に戻る

というものを予定し、作り始めたのですが

画像の説明

注)この画像はあくまでイメージです。実際に作っていた際に写真を撮っていなかったので後で簡単に再現したものです。

(1)ゴムの力が強すぎて付属のモーターで組んでもゴムが伸びず、ペンが下がらない
(2)ペンの動きがどうしても安定させられない
ということで、早くも難問発生。
試行錯誤を繰り返した結果・・・力及ばず残念ながらこれはあきらめざるを得ませんでした。

発展構想 〜失敗の数だけ強くなれるよ〜

  1.ならば別の方向からの力でペンを上下させられないか?
  2.上がだめなら横からの力
  3.左右からの力でペンを挟み、上下の力を加えることでペンを動かす
  4.キャタピラに挟まれたペンのようなイメージ

まずは試作アーム

画像の説明

で始めました。 一先ず組んでみることは出来たのですが・・・

画像の説明

注)これらの画像もイメージです

(1)上下の運動を繰り返すたびにペンの動きの誤差が大きくなる
(2)機構が貧弱でペンを描くように走らせると、ペンにかかる圧力により組んだパーツが外れそうになる→ギアが噛み合わなくなり動かない
・・・とまたもや壁にぶつかってしまいました。

そこで、ペンの動きを安定かつ強靭なものにするため、根本的な見直しをしました

最終構想 〜過程や方法はとても大事ですね〜

  一つ.ペンを動かす機構はより単純に
  一つ.極力ペンを車体から離すことのないようにし、ロボの動きへの影響を減らす
  一つ.ペンが動くことのないように固める

という3点を念頭に置き考えたところモーターの回転がよりダイレクトに伝わるアーム型が良いだろうとなりました。
ということでまずは基本となるアーム作り

アーム

初期段階ではアームによりペンが床に押し付けられることにより徐々に上がってしまい途中で描けなくなったので、ゴムで動かないよう補強。これにより格段に安定性が増しました。

次にそれを動かす機構、これは出来るだけ直線で余計な力が加わらないように

アーム機構

後はこれを基にしてロボを組みます。
一番問題なのは、やたらと大きく重いRCXをどうするのか><
出来るだけ重心を中心に持って来る為車体中央の上にのせるように設置。
場所がなかったとはいえ少し不安定さが恐いです・・・下につけて重心をより下に持ってこようと考えましたが、その場合アームに支障が出るため断念。

そして出来上がったのがこちら

完成品

      

似顔絵プログラム

  モーターA:右側のタイヤの出力、順回転で前進
  モーターB:ペンを動かす機構、
  モーターC:左側のタイヤの出力、順回転で前進

その1

           task main()
           {
             repeat(2){
               OnFwd(OUT_A+OUT_C);         //輪郭   
                Wait(50);
               Off(OUT_A);
               Wait(200);
               OnFwd(OUT_B);
               Wait(10);
               Off(OUT_B);
               OnFwd(OUT_A+OUT_C);
               Wait(50);
               OnRev(OUT_A);
               Wait(85);
               OnRev(OUT_A+OUT_C);
               Wait(40);
               OnRev(OUT_B);
               Wait(10);
               Off(OUT_B);
               OnFwd(OUT_A+OUT_C);
               Wait(50);
             
  }
    

 

Off(OUT_A+OUT_C);
             
              OnFwd(OUT_B);    //ペンを持ち上げる
              Wait(10); 
              Off(OUT_B);
              OnFwd(OUT_A+OUT_C);
              Wait(60);
              OnFwd(OUT_C);    //目を書く為に90度方向転換
              OnRev(OUT_A);
              Wait(90);
              Off(OUT_A+OUT_C);
              OnRev(OUT_A+OUT_C);
              Wait(20);
              Off(OUT_A+OUT_C);
              OnRev(OUT_B);    //ペンを下ろす
              Wait(10);
              Off(OUT_B);
              OnFwd(OUT_A+OUT_C);   //右目を書く
              Wait(20);
              Off(OUT_A+OUT_C);
              OnFwd(OUT_B);    //ペンを持ち上げる
              Wait(10); 
              Off(OUT_B);
              OnFwd(OUT_A+OUT_C);   
              Wait(20);
              Off(OUT_A+OUT_C);
              OnRev(OUT_B);     //ペンを下ろす
              Wait(10);
              Off(OUT_B);
              OnFwd(OUT_A+OUT_C);  //左目を書く
              Wait(20);
              Off(OUT_A+OUT_C);
               OnFwd(OUT_B);
              Wait(10); 
              Off(OUT_B);
              OnFwd(OUT_A+OUT_C);
              Wait(20);
              Off(OUT_A+OUT_C);

 

               OnFwd(OUT_C);     //鼻を書くために90度方向転換
              OnRev(OUT_A);
              Wait(90);
              Off(OUT_A+OUT_C);
              OnRev(OUT_A+OUT_C);
              Wait(20);
              Off(OUT_A+OUT_C);
              OnRev(OUT_B);
              Wait(10);
              Off(OUT_B);
              OnFwd(OUT_A+OUT_C);    //鼻を書く
              Wait(20);
              Off(OUT_A+OUT_C);
              OnFwd(OUT_B);
              Wait(10); 
              Off(OUT_B);
              OnFwd(OUT_A);
              Wait(80);
              OnRev(OUT_B);
              Wait(10);
              Off(OUT_B);
              OnRev(OUT_A);     //口を書く
              OnFwd(OUT_C);
              Wait(100);
              Off(OUT_A+OUT_C);
               }

完成品

完成品その1

その2

task main()

{

repeat(2)            //輪郭から描き始める
{

OnFwd(OUT_A+OUT_C);           
Wait(50);
Off(OUT_A);
Wait(200);
OnFwd(OUT_B);
Wait(10);
Off(OUT_B);
OnFwd(OUT_A+OUT_C);
Wait(50);
OnRev(OUT_A);
Wait(90);
OnRev(OUT_A+OUT_C);
Wait(40);
OnRev(OUT_B);
Wait(10);
Off(OUT_B);
OnFwd(OUT_A+OUT_C);
Wait(50);

}


Off(OUT_A+OUT_C);

OnFwd(OUT_B);
Wait(10);
Off(OUT_B);
OnFwd(OUT_A+OUT_C);
Wait(60);             //輪郭終了、右目へ
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(90);
Off(OUT_A+OUT_C);
OnRev(OUT_A+OUT_C);
Wait(20);
Off(OUT_A+OUT_C);
OnRev(OUT_B);
Wait(10);
Off(OUT_B);
OnFwd(OUT_A+OUT_C); //右目を描き始める
Wait(20);
Off(OUT_A+OUT_C);
OnFwd(OUT_B);
Wait(10);
Off(OUT_B);
OnFwd(OUT_A+OUT_C);
Wait(20);
Off(OUT_A+OUT_C);
OnRev(OUT_B);
Wait(10);
Off(OUT_B);
OnFwd(OUT_A+OUT_C);   //左目を描き始める
Wait(20);
Off(OUT_A+OUT_C);
OnFwd(OUT_B);
Wait(10); 
Off(OUT_B);
OnFwd(OUT_A+OUT_C);
Wait(20);
Off(OUT_A+OUT_C);
OnFwd(OUT_C);     //鼻を描く準備へ
OnRev(OUT_A);
Wait(90);
Off(OUT_A+OUT_C);
OnRev(OUT_A+OUT_C);
Wait(20);
Off(OUT_A+OUT_C);
OnRev(OUT_B);
Wait(10);
Off(OUT_B);
OnFwd(OUT_A+OUT_C);  //鼻を描き始める
Wait(20);
Off(OUT_A+OUT_C);
OnFwd(OUT_B);
Wait(10);
Off(OUT_B);
OnFwd(OUT_A);
Wait(80);
OnRev(OUT_B);
Wait(10);
Off(OUT_B);
OnRev(OUT_A);     //口を描き始める
OnFwd(OUT_C);
Wait(100);
Off(OUT_A+OUT_C);
OnFwd(OUT_B);Wait(10);Off(OUT_B);
OnFwd(OUT_C);
Wait(10);
Off(OUT_C);
OnRev(OUT_A);   
OnFwd(OUT_C);
Wait(100);
Off(OUT_A+OUT_C);
OnFwd(OUT_B);Wait(10);Off(OUT_B);
OnFwd(OUT_C);
Wait(10);
Off(OUT_A+OUT_C);
OnRev(OUT_A+OUT_C);
Wait(70);
OnFwd(OUT_C);Wait(55);
OnRev(OUT_C);Wait(60);
Off(OUT_A+OUT_C);
OnRev(OUT_B);Wait(15);Off(OUT_B);

 

OnFwd(OUT_A+OUT_C);Wait(100);     //髪を描く
Off(OUT_A+OUT_C);

}
完成品その2

見た通りベースはその1と同じです。 輪郭部分の繋がりに失敗している点と髪を描くのに失敗したのが目立ってしまっています><
本来は横に引くはずだったのですが、本番はその通りにはいかず。。。 普段は床の上に紙を置いて描いていたのですが、本番では木の板の上に紙を置き、しっかりと固定してあった等の条件の違いが出てしまったのではないかと思います。

苦労&工夫した点

  きれいな輪郭が書けなかった→バックや方向転換など細かく使いきれいに輪郭を書けるようになりました。
  日によってモーターの力が違ったので調整するのが大変でした。

まとめ

  最初はロボの形に悩み全然進まなかったけど、試行錯誤を繰り返してロボが完成してからはとても楽しく作ったロボに愛着がわきました。
  ロボットは忠実に命令を実行します、しかし、それを自分の思った通りに動かすのは とても難しく、何度もやり直しを余儀なくされました。パーツを変えるのは勿論、時間の経過によっても動きが変わってしまうロボを扱うのは大変でしたが、その分上手くいった時の感動も大きく、楽しく作業をすることができました。

コメントをお願いします

  • 製作過程を詳しく解説した点は面白いです。次もがんばってください -- なかむら? 2008-11-12 (水) 17:14:29

レポートの大まかな形はできています。試行錯誤の過程がよくわかるのも良いです。
あとは、ロボットと似顔絵の写真や図を載せてください。
サブルーチン等を使ってみてください。F.I


添付ファイル: file081106_1910~01.jpg 234件 [詳細] file081106_1907~01.jpg 245件 [詳細] file081106_1900~01.jpg 229件 [詳細] file輪郭.jpg 155件 [詳細] file輪郭.psd 107件 [詳細] file鼻.psd 110件 [詳細] file髪.psd 111件 [詳細] file左目.psd 115件 [詳細] file口.psd 111件 [詳細] file右目.psd 109件 [詳細] file081106_1751~01.jpg 230件 [詳細] file081106_1750~01.jpg 242件 [詳細] file081106_1749~01.jpg 220件 [詳細] file081106_1748~01.jpg 241件 [詳細] file081106_1731~01.jpg 230件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-12-03 (水) 11:01:13