*a7のロボ [#ic3a6d53]
#contents
*課題 〇顔絵ロボット [#ecc47e83]
自分のパートナーの似顔絵を描くロボットを作る!!!
*ロボット [#z8ccd17a]
土台は最初に作ったロボットです。
#ref(./100523_1810~01.jpg,100%,ロボット本体)

**ペンの部分 [#eebda64d]
シンプルな構造にしたかったので、最初は簡単な風に作りました。
#ref(./100523_1823~01.jpg,100%,ペンの初期);
実際動かしてみると強度がなく、すぐに外れてしまったので補強しました。
補強はブロックで回りを固定しました。固定しなければペンを下したときにペンが駆動部を押し上げてしまいペンユニットごと外れてしまう。

#ref(./100523_1830~01.jpg,100%,ペン補強);

**完成したロボット [#raa2447d]
割とイメージ通りでシンプルに仕上がったので良かったです。
#ref(./100523_1831~01.jpg,100%,ロボット正面);
#ref(./100523_1831~02.jpg,100%,ロボット側面);
#ref(./100523_1831~03.jpg,100%,ロボット背面);
*おがさわらの作品 [#y1004e82]
まずプログラムは・・・              

    #define go(t) OnFwd(OUT_A+OUT_C); Wait(t); Off(OUT_A+OUT_C); 
    #define turn_left OnFwd(OUT_A); OnRev(OUT_C); Wait(t); Off(OUT_A+OUT_C);
    #define turn_right OnFwd(OUT_C); OnRev(OUT_A); Wait(t); Off(OUT_A+OUT_C);
    #define pen_up SetPower(OUT_B); OnFwd(OUT_B); Wait(30); Off(OUT_B);
    #define pen_down SetPower(OUT_B); OnRev(OUT_B); Wait(30); Off(OUT_B);
   
 わかりやすく書くと [#i27b4c39]

    

    go        前進
    turn_left 左折
    turn_right右折
    pen_up    ペンを上げる 
    pen_down ペンを下げる
task main()

  task main()
{
    go(20);        //輪郭を書く
    pen_down;                          
    turn_left;             
    go(22);
    pen_up;
    turn_right;     
    go(10);
    pen_down;       //顎 
    turn_right;     
    go(10);
    turn_left;
    go(22);
    turn_left;
    pen_up;
    go(10);
    turn_right;           //目
    go(22);
    repeat(2){
    turn_right;
    go(10);
    pen_down;       //右目
    turn_left;
    go(22);
    pen_up;
    turn_left;
    go(10);
    pen_down;       //左目
    turn_right;
    go(22);
    pen_up;         
    turn_right;           
    go(20);
    turn_left;
    pen_down;       //口
    go(22);
    pen_up;
    off(OUT_A+OUT_C);
 }

**完成した似顔絵 [#yc4bf898]
#ref(./100521_1744~01.jpg,100%,似顔絵);
パートナーに似ていなかったのが残念でしたが、優しい雰囲気が出たのは良かった。
もっとプログラムを考えるべきだった。
*かまくらの作品 [#k879db24]
#ref(./100521_1748~01.jpg,100%,顔?);

まず書いたプログラムを記します
 
 

 #define felt_pen 27   //ペンを上げ下げする時間
 #define pepushi OnFwd(OUT_C);OnRev(OUT_A);Wait(110);Off(OUT_A+OUT_C);   //直角に曲がる
 #define zero_nine 90

   task main()
 {
    OnFwd(OUT_A+OUT_C);         //1,5s前進
    Wait(150);
    OnFwd(OUT_B);
    Wait( felt_pen );     //.撻鵑鮠紊欧
    Off(OUT_B); 
    OnRev(OUT_A+OUT_C);    //0,5s戻る
    Wait(50);
    OnRev(OUT_A);             //向きを変える
    Wait(100);
    Off(OUT_A+OUT_C);
    pepushi;         //コンパクトに向きを変える
   
BをFwdに操作することによりフェルトペンをさげて足跡をのこせるようにする(スタートでは最初はフェルトが紙に接地した状態)

方向転換の際は基本的にペンを上げた状態にする


    OnRev(OUT_B);       //▲撻鵑鬚気欧襦蔑愕坡槁分)
    Wait( felt_pen );
    Off(OUT_B);
    OnFwd(OUT_A+OUT_C);  //2,0前進
    Wait(200);
    Off(OUT_A+OUT_C);
    OnRev(OUT_A+OUT_C);  //0.5バック
    Wait(50);
    OnRev(OUT_A);     //コンパクトに曲がる
    Wait(100);
    Off(OUT_A+OUT_C);     
    OnFwd(OUT_B);
    Wait( felt_pen );
    Off(OUT_B);
     OnFwd(OUT_C);     //ここから顎部分   
   OnRev(OUT_A);
    Wait(110);
    Off(OUT_A+OUT_C);
    OnRev(OUT_B);
    Wait( felt_pen );   //左輪郭のためにペンを下げる
    Off(OUT_B);
多少余談ではあるがペンを下げてスタートして方向を変える際ペンをあげるまではよかったのだが、再びペンを下ろす際にペンのフェルトが曲がってしまった。もし何かをたたきつける動作が必要なときは最適であろう。しかしペンで何かを書くのは不便であった。 


   OnFwd(OUT_A+OUT_C);   //左輪郭
    Wait(200);       //右輪郭と同じ長さになるように時間を200に
    Off(OUT_A+OUT_C);
    OnFwd(OUT_B);     
    Wait( felt_pen );
    Off(OUT_B);
輪郭をかくときの方向変換のときペンを下したままであると余計な線をかいてしまうので上げて方向転換をする

  


   OnRev(OUT_C);    //右目
    Wait(10);
    Off(OUT_C); 
    OnRev(OUT_B);
    Wait( felt_pen );
    Off(OUT_B);
    OnRev(OUT_C);    //ペンを下したまま頭を振ることで三日月型を描く
    Wait(zero_nine);
    OnFwd(OUT_C);
    Wait(zero_nine);
    Off(OUT_C);
    OnFwd(OUT_B);
    Wait( felt_pen );
    Off(OUT_B);
人間でいう眉間をつくるために一旦ペンをあげ移動しペンを下ろす   
ここで問題が発生した。
鼻を描く時に時間数を間違えたらとんでもないことに(完成写真参照)鼻がかなり長くなってしまった


   OnRev(OUT_C);     //左目
    Wait(180);
    Off(OUT_C);
    OnRev(OUT_B);
    Wait( felt_pen );  //右目と同じく三日月を描く  
    Off(OUT_B);
    OnFwd(OUT_C);
    Wait(zero_nine);
    Off(OUT_C);
    OnFwd(OUT_B);
    Wait( felt_pen );  //口の位置までペンを上げていく
    Off(OUT_B);
    OnRev(OUT_A);      //口を書くために下がるので方向調整
    Wait(90);
    Off(OUT_A);
目を半円状にすることにより少ない移動でかけた    


   OnRev(OUT_A+OUT_C);    //口の位置までバック
    Wait(zero_nine);
    Off(OUT_A+OUT_C);
    OnRev(OUT_B);      //ペンを下し口を書く
    Wait( felt_pen );  
    Off(OUT_B);
    OnRev(OUT_C);
    Wait(zero_nine);
    Off(OUT_C);     //これでペンを使って描くすべての工程は終了!だけど・・

    
最後にアピール
ここでさらに余談このプログラムを三回以上同じフェルトペンで行うと確実に次のアピールでフェルトが折れる。

 repeat(3)  { OnFwd(OUT_B);     //ペンを上げ下げをして終了のアピール
                  Wait( felt_pen );
                 Off(OUT_B);
                 OnRev(OUT_B);
                  Wait( felt_pen );
                   Off(OUT_B);}   //ペンを上げたままで・・・・
    
 }//すべてのプログラムが終了!





**困ったこと [#u0df0b1c]

・まずプログラムを転送する際プログラムを受信できたときにでる音が鳴らず入ってるのかよくわからない状態になった。

・ペンを上げ下げするモーターBが動いた際モーターを回しすぎるとペンが本体を抑えつけてしまうのでモーターのユニットごと外れてしまう。
(回す時間0.27sでギリギリ外れないがペンにダメージが・・)

・配線の接合部分が酸化していてプログラムを送信してもうごかなかった。
・研磨剤を拝借し研磨しました。

**反省 [#u539db43]
・レポートが不十分で合格がもらえなかったのは残念でした。
・けど次回からはもっとちゃんとしたレポートを書いて一発合格にしようと思った。
・二人の時間が合わずなかなか協力できずに終わってしまった。
・輪郭、顎を書く際に細かい動きをして滑らかな曲線の輪郭を描くと顔に近いものができたであろう。
**感想 [#y75ab143]
・困ったことに記したようにハプニングの連続であった。たとえばプログラムを転送した際にでる「音」が出なかったりケアレスミスでプログラムにエラーが出たりと、慣れてなかったことが第一原因だろう。
・プログラムは書いているうちにできるようになったが、サブルーチン、関数などを使ったほうがもう少しスマートなプログラムになったであろう。
・二人で会う時間がなかったので大変だった。
・なんども述べているが、ペンがじゃじゃ馬であった。
・反省を次に必ず活かしたいと思います。
**コメント [#d60f8b29]
コメントぜひお願いします!!
- wikiの訂正ありがとうございます。内容については、困ったことに対する工夫なども書いてみてください。プログラムについてですが、ロボットの動きをイメージしながら作ると良いかもしれません -- [[TAKA]] &new{2010-06-18 (金) 16:52:01};
- 書くべきことはかけています。一人目に関していうと、プログラムにコメントを書けるようになると、複雑なプログラムを書く助けになります。 -- [[FI]] &new{2010-06-18 (金) 17:16:33};

#comment
wikiの修正を行い、コメント欄を作って下さい(TAKA)


**製作者 [#g1c77b03]
小笠原和貴
鎌倉竜馬

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS