2008a/A10/課題1右

目次

課題1:似顔絵ロボット作成

相方の似顔絵を紙に5秒で書いたぐらい簡単なのでいいからそれをロボットで書く

似顔絵ロボット紹介

全体図

上から見た似顔絵ロボット

ペンの位置はなるべく本体に近いところ、かつ安定性の面から上につけた

前

前から見た似顔絵ロボット

キャタピラにしたのはかっこいいからです

横
横

横から見た似顔絵ロボット

ペンを付けるために片方を重くさせてしまったので バランスをよくするためにブロックを積んだのでかっこ悪くなりました

ペン
ペン

ロボットに付いているペンの感じ

あまりかっこよさは求めてません

似顔絵を書くプログラム

プログラム1

輪郭⇒目⇒口の順に書きました。あまり細かいとこは気にせず。印象派です。

 task main()

{
   OnFwd(OUT_A);  Wait(1400);  Off(OUT_A);   //顔の輪郭を書く
   
   
   Wait(100);
   
   
   OnFwd(OUT_B);  Wait(14);  Off(OUT_B);    //ペンを持ち上げる
   
   
   OnRev(OUT_A);  OnFwd(OUT_C);  Wait(170);  Off(OUT_A);  //方向転換
   
   
   OnRev(OUT_A+OUT_C);  Wait(75);  Off(OUT_A+OUT_C);
   
   
   OnRev(OUT_B);  Wait(15);  Off(OUT_B);      //ペンを下ろす
   
   
   OnRev(OUT_A+OUT_C);  Wait(50);  Off(OUT_A+OUT_C);   //目を書く
   
   
   Wait(100);
   
   
   OnFwd(OUT_B);  Wait(14);  Off(OUT_B);  //ペンを持ち上げる
   
   
   Wait(100);
   
   
   OnRev(OUT_A+OUT_C);  Wait(30);  Off(OUT_A+OUT_C);
   
   
   OnRev(OUT_B);  Wait(15);  Off(OUT_B); //ペンを下ろす
   
   
   OnRev(OUT_A+OUT_C);  Wait(50);  Off(OUT_A+OUT_C);  //目を書く
   
   
   Wait(100);
   
   
   OnFwd(OUT_B);  Wait(20);  Off(OUT_B); //ペンを持ち上げる
   OnRev(OUT_C);  OnFwd(OUT_A);  Wait(170);  Off(OUT_C);  //方向転換
   
   
   OnRev(OUT_A+OUT_C);  Wait(45);  Off(OUT_A+OUT_C);
   
   
   OnRev(OUT_C);  OnFwd(OUT_A);  Wait(170);  Off(OUT_C);  //方向転換
   
   
   OnRev(OUT_A+OUT_C);  Wait(120);  Off(OUT_A+OUT_C);
   
   
   OnRev(OUT_B);  Wait(15);  Off(OUT_B);  //ペンを下ろす
   
   
   OnRev(OUT_A+OUT_C);  Wait(95);  Off(OUT_A+OUT_C);    //口を書く
   
   
  OnFwd(OUT_B);  Wait(15);  Off(OUT_B);   //ペンを持ち上げる
   
   
}

プログラム2

プロセスとしては顔→口→目 鼻と髪はどうしたとか言うのは似顔絵の元になった人のプライバシーのために黙秘します

task main()
{        

顔書きます

    OnRev(OUT_B);    //ペンをおろして書き始めの準備
    Wait(10);
    Off(OUT_B);  
    
    OnFwd(OUT_A);   //左のキャタピラを前回転させ車体を右のキャタピラを軸に
    Wait(1500);     1回転。これで顔のベースが完成。
    Off(OUT_A);
    

口は人を幸せにする   

    OnFwd(OUT_B);   //ペンを持ち上げる。これによって一筆書きをしなくてもOK。
    Wait(15);
    Off(OUT_B);
    
    OnFwd(OUT_A);   //左キャタピラを前に、右キャタピラを後ろに回すことで短
    OnRev(OUT_C);    時間で小回りに方向転換を行う。このときは大体45°ぐらい
    Wait(60);      いの方向変化を行う。
    Off(OUT_A+OUT_C);
   
    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);//口をV字に書くためにまず直線に描く。
    Wait(20);
    
    OnRev(OUT_C);    //ここでv字の頂点になり曲がる動作を行うため右キャタ    
    Wait(80);      ピラだけを逆回転させできるだけ小回りに向きを変える。
    
    OnFwd(OUT_C);   //右キャタピラの回転を順回転に戻しv字の残りの直線を描く
    Wait(20);
    Off(OUT_A+OUT_C);

最後に目だと幸せになれる気がする。(だるま的に)   

    OnFwd(OUT_B);      //ペンを持ち上げ目を描く位置に動くための準備を行う。
    Wait(15);      この状態なら向きを変えても無駄な線を描く心配もない。
    Off(OUT_B);
   
    OnFwd(OUT_A);      //ペンは持ち上がってるので向きを60°ほど変える。
    OnRev(OUT_C);
    Wait(80);
    
    OnFwd(OUT_C);      //右キャタピラの回転を戻し口の端から少し上に移動。
    Wait(15);
    Off(OUT_A+OUT_C);
    
    OnRev(OUT_B);      //ペンを下ろして描き始める準備
    Wait(10);
    Off(OUT_B);
   
    OnFwd(OUT_A+OUT_C);//目を棒状に少し書くためにペン先を当てながら少しだけ移動
    Wait(15);
    Off(OUT_A+OUT_C);
  
    OnFwd(OUT_B);   //目と目は離れてるから次の目を書くための移動をするために
    Wait(15);      ペンを持ち上げておく。
    Off(OUT_B);
   
    OnRev(OUT_C);   //目の上端から向きを90°変える。 
    Wait(145);
  
    OnFwd(OUT_C);   //そのまままっすぐ次の目の上端を描く位置まで移動。
    Wait(50);
   
    OnRev(OUT_C);   //そこでそのまま90°向きを変える。
    Wait(145);
    
    OnRev(OUT_A);   //ただそこからそのまま目を書くとペンが車体の前にあること
    Wait(5);        からここから描き始めるとこっちの目がさっきの目に比べて
    Off(OUT_A+OUT_C);  下にできてしまう。だからここで少し後ろに下がる。
    
    OnRev(OUT_B);   //描く位置まで動けたのでペンを下ろす。
    Wait(15);
    Off(OUT_B);
    
    OnFwd(OUT_A+OUT_C);//あとはさっきの目と同じように少しだけ直線を引いて目を
    Wait(15);      作る。
    Off(OUT_A+OUT_C);
    
    OnFwd(OUT_B);    //〆はペン先を当てたままだと紙にインクがにじむからペンを
    Wait(15);      上げる。
    Off(OUT_B);     上げたまま終わるとなんかかっこいいし。
                  「我が生涯に一片の悔い無し」みたいな感じで。できればそ
                         んな感じで擬人化したりイメージしていただけるとうれしい
    }

プログラム3

task main()
{
   
                                                  //顔の輪郭を書く
   OnFwd(OUT_C); SetPower(OUT_C,7);            //ギアレベルMAXで反時計回りに回転  
   
   Wait(1350);                                        //この時間回り続ける
   
   SetPower(OUT_A+OUT_C,5); Off(OUT_A+OUT_C);   //ギアレベルを少し下げて止まる
   
   OnFwd(OUT_B); Wait(16); Off(OUT_B);          //ペンを上げる
   
   OnRev(OUT_A); Wait(240); Off(OUT_A);   //目の位置にペンを持っていく
   
   OnFwd(OUT_A+OUT_C);Wait(30);      //前進する
   
   OnRev(OUT_B); Wait(16); Off(OUT_B);  //ペンを下げる
   
   Wait(30);    //ペンを下げている時間(目の長さ)
   
   OnFwd(OUT_B); Wait(16); Off(OUT_B);  //ペンを上げる
   
   Wait(20); 
   
   OnRev(OUT_B); Wait(16); Off(OUT_B);  //ペンを下げる
   
   Wait(30);           //ペンを下げている時間(目の長さ)
   
   OnFwd(OUT_B); Wait(16); Off(OUT_B);   //ペンを上げる
   
   Wait(20); Off(OUT_A+OUT_C);        //止まる
   
   OnFwd(OUT_C); OnRev(OUT_A); Wait(160);  //回転        
   
   OnFwd(OUT_A+OUT_C); Wait(50);   //前進
   
   OnFwd(OUT_C); OnRev(OUT_A); Wait(230);  //回転
   
   OnRev(OUT_A+OUT_C);Wait(10);
   
   OnRev(OUT_B);Wait(16);Off(OUT_B);  //ペンを下げる
   
   Wait(90);        //ペンで書く時間(口の長さ)
   
   OnFwd(OUT_B); Wait(16); Off(OUT_B);  //ペンを上げる
   
   Wait(20);                        
   
   Off(OUT_A+OUT_C);   //似顔絵完成
}

工夫・苦労した点

•ペンの摩擦で、ペンが紙に触れていないときに誤差が出たのでその補正をプログラムするのが大変だった。また、毎回の誤差が出るのも苦労した。

•本体は円を描くのにペンは円を描かないというのがすごく悩みました。ですが、ペンの位置を変えたらちゃんと円を描けるようになった。

•向きの変更ですね。どのぐらいの時間でどの角度か、誤差も含めてもうむちゃくちゃくちゃになって悲惨でした。結局最後まで細かい誤差は無視して続けました。

感想

•周りの人は髪の毛とか細かいところやっていたのに自分のはおおざっぱだった。

•ペンがしっかり濃く書いてくれなかった。

•ロボに対する愛が足りなかったかなと。次はつぎ込む愛を増やしてもっと精巧で面白いロボを作りたい。周りのロボや先輩方のを見てつくづく思いました。(正直プログラムは二の次でいいやというのが本音)

コメントをどうぞ


訪問者 本日1 昨日0 合計&counter([total|today|yesterday]);


添付ファイル: fileo.jpg 353件 [詳細] filee.jpg 381件 [詳細] fileu.jpg 404件 [詳細] filei.jpg 413件 [詳細] filea.jpg 377件 [詳細] file5.jpg 221件 [詳細] file4.jpg 186件 [詳細] file3.jpg 235件 [詳細] file2.jpg 221件 [詳細] file5.jpg 210件 [詳細] file4.jpg 224件 [詳細] file3.jpg 184件 [詳細] file2.jpg 238件 [詳細] file1.jpg 398件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-06-05 (木) 17:27:31