[[2009b]]
オレが、最強だ。

#contents

*課題:似顔絵ロボットを作ろう! [#jf77f7eb]

 似顔絵ロボットを作り、パートナーの似顔絵を描く!
 
 

*チーム [#yd28a479]
-チーム名 「合衆国陸軍JSOC統合幕僚本部」

-メンバー紹介(「」内は意気込み。)~
 隊長   (工学部) 「熱き魂の邂逅」~
 なかみう (教育学部)「工学部2人がいじり始めるとすることないんですけど 汗」~
 ゆあ   (工学部) 「がんばりたいオブジイヤーです。」~
~
~
似顔絵ロボ完成記念!!~
#ref(2009b/A1/課題1左/syugou.jpg,25%,集合写真)
(左から、ゆあ、なかみう、隊長)

*ロボット [#z1079e5a]
ロボットに似顔絵を描かせるには、本体はあまり動かず、アームが器用に動いて、絵を
描かせる方法と、本体が動き回ってその軌跡で描かせる方法の2つがあると思う。
(他にもあるかもしれないがそれは筆者が思いつかなかったので。orz)
最初のロボットは四輪でアームはスライド式にしてみた。
反省点はタイヤが大きすぎて、速度が速くて旋回がしにくかったこと、アームを降ろした状態のとき、固定されていなく、描きにくかったことだと思う。
そこで、次のロボットは単純にアームを回して降ろす形式にしてみた。
車輪は二輪駆動にして、自由に動く車輪をつけて、旋回しやすくしたつもりだった。 しかし、自由に動くタイヤが逆に曲がる邪魔になってしまった。
(´;ω;`)~
&ref(2009b/A1/課題1左/iii.jpg,50%,これが最初のロボット);~
これが最初のロボット。~
タイヤがおおきいお。~
~
~
~

#ref(2009b/A1/課題1左/nikome.jpg,25%,2個目のロボット)


**現在の構造になるまで [#ra1b7c02]
今のペンを上げ下げする構造はペンが地面に設置する部分が重心を射抜いておらずプログラムを組む際にその点を考慮する必要があったその為当初はマシンの重心(構造的重心)、現在ではCPUが居座っている部分に穴を開けてその部分にペンを上げ下げするスタンスで行こうとしたが技術的な面により断念 アームを用いる現構造を指針にする様方針を転換した
~
~ そこで次に出た案が前述したアーム上げ下げ方式(仮)である
~ただこのモデルは幅が狭く安定性能がイマイチである側面も併せ持っていた アーム装着のためにマシンの上背を高くしたのもその原因に一役買っていた
~ そして最終的に打ち出されたのが安定して走行 そして頑健なBodyを持つ という基本的スタンスを踏まえながらもこちらが発した命令を忠実に再現する第3世代ロボの開発である 
~
~
**このマシンを組む際に注意した点 [#xbdd9b89]
まずこのレゴロボの占める重量の内、かなりの部分がCPUに集まっている。~
そのため走行中のマシンを安定させるためCPUをマシンの下部に設置した。~ 
これは様々な試行錯誤の上にCPUを上部に乗せるのはナンセンスだと気付いた経験に基づくものである。
~
~ 
またそのためにマシンの幅を広くする必要に迫られたのだが、逆にこのことが安定性を更に上げてくれた。怪我の功名とはこのこと。 
~
~


**似顔絵ロボットを作る上で [#g6ed7ffc]


*プログラム [#j864400d]
現実は甘くなかった。プログラムも難しかった。~
特に、微調整に時間がかかり、かなりの時間がかかってしまった。~
以下はプログラムの解説。

**時間がないから・・・ [#gc30e406]

効率を考え、以下のように行った。~
~
+顔をいくつかのパーツに分ける
+分担して、プログラミングを行う
+出来たものをまとめ、スタンダードモデルを完成させる
+スタンダードモデルを各自改良し、オリジナルモデルを完成させる。

**スタンダードモデル [#x4ff312d]
-分担~
 隊長  ・・・欠席のため分担なし 主にメカニック担当~
 隊長  ・・・主にメカニック担当~
 なかみう・・・髪・輪郭~
 ゆあ  ・・・顔のパーツ~

-プログラム
分担して作ったプログラムを載せる。
***共通した定義! [#mbe3dfb3]
分担して作ったプログラムをうまく合体させるには、定義を共通させる必要があった。~
まずその定義を載せる。~

  #define go_st(t) OnFwd(OUT_A+OUT_C); Wait(t);  //前進
  
  #define go_ba(t) OnRev(OUT_A+OUT_C); Wait(t);  //後退
  
  #define off Off(OUT_A+OUT_C);  //停止
  
  #define right(t) OnFwd(OUT_C); Wait(t); Off(OUT_C); //右折
  
  #define left(t) OnFwd(OUT_A); Wait(t); Off(OUT_A); //左折
    
  #define h_right(t) OnRev(OUT_C); Wait(t); Off(OUT_C); //バックで右折(前髪)
 
  #define h_left(t) OnRev(OUT_A); Wait(t); Off(OUT_A); //バックで左折(前髪)

-注意点~

「OnFwd(OUT_C)で右折なの?」と思った方もいるだろう。~
その訳は、NQCの取り付け方にある。~
通常とはちがい、図のように取り付けてあるので、OUT_AとOUT_Cが逆になっている。~
この点にも注意しながらプログラミングした。~
上が進行方向。
#ref(2009b/A1/課題1左/cpuu.jpg,25%,取り付け方)

***隊長 [#x3dffc3a]
 task main(){

   OnFwd(OUT_A);            Wait(1100);            //モーターAを11秒間 駆動させる
   OnRev(OUT_A+OUT_C);      Wait(50);              //機体を0.5秒間バックさせる
   OnFwd(OUT_B);            Wait(300);             //モーターBを動かしてペンを地面に落とす 0.5秒バックさせたのはペン先が顔の輪郭と重ねるため  
   OnFwd(OUT_C);            Wait(40);              //モーターCを動かして機体を反時計回りに0.4秒間旋回させる
  
   OnFwd(OUT_A);            Wait(400);             //機体を4秒間時計回りに旋回 簡易髪の毛を描く動作
   OnRev(OUT_A+OUT_C);      Wait(50);              //機体を0.5秒間バックさせる
  
   OnRev(OUT_B);            Wait(300);             //モーターBを動かしてペンを持ち上げる 
  
   OnFwd(OUT_A); OnRev(OUT_C); Wait(140);          //モーターを重心をずらさず時計回りに約4分の1回転させる
  
   OnFwd(OUT_A+OUT_C); Wait(50);  OnFwd(OUT_B); Wait(300);    
   OnFwd(OUT_A+OUT_C); Wait(75);  OnRev(OUT_B); Wait(300);
   OnFwd(OUT_A+OUT_C); Wait(50);  OnFwd(OUT_B); Wait(300);    
   OnFwd(OUT_A+OUT_C); Wait(75);  OnRev(OUT_B); Wait(300);
   OnFwd(OUT_A+OUT_C); Wait(50);  OnFwd(OUT_B); Wait(300);   //顔(円)の内部に二つの一(目)を描く

   OnRev(OUT_A+OUT_C);         Wait(150);                    //1.5秒間後退して二つの目の間に戻る
   OnFwd(OUT_C); OnRev(OUT_A); Wait(225);                    //モーターを重心をずらさず反時計回りに約2分の1回転させる
   OnFwd(OUT_B);               Wait(300);                    //ペンを下ろす
   OnFwd(OUT_A+OUT_C);         Wait(200);                    //2秒間前進して鼻を描く
  
   OnRev(OUT_B);               Wait(300);                    //モーターBを動かしてペンを持ち上げる 
   OnFwd(OUT_A); OnRev(OUT_C); Wait(140);                    //モーターを重心をずらさず時計回りに約4分の1回転させる
   OnFwd(OUT_B);               Wait(300);                    //ペンを下ろす
   OnFwd(OUT_C); OnRev(OUT_A); Wait(140);                    //モーターを重心をずらさず反時計回りに約4分の1回転させる
   OnRev(OUT_B);               Wait(300);                    //ペンを持ち上げる 
  }

プログラム後期~
正直私がプログラムを作り始めた時私たちの班の似顔絵製作マシンが既にこの世には存在しなかった(解体後)ためプログラム製作は至極困難を極め、・・・・・まあ自己責任なのですが~
簡易マシンによる動作テストを行いましたが、なんとかまずまずといったところです

***なかみう[#ab07ed37]
髪の毛と輪郭を担当。

 sub mae_gami()  //前髪のギザギザを表現するサブルーチン。
 {
     
      repeat(6){     //6回繰り返す。
          
          go_st(20);   //進んで
          h_right(20);  //ちょこっとバックで右折
          off       //offも重要。       これで1ギザ完成。 
          
      }          //1ギザ×6回で、前髪完成。
      off;       
 }
 
 
       
 task main()
 { 
     mae_gami();  //前髪。(上部参照)
     go_ba(30);  //ここがものすごいポイント。
           //これが無いと髪の毛が薄くなる。
     off;
     
     right(1250);  //頭と輪郭を描く。時間がポイント。
            //次の眉毛のために、丁度いい時間が1250。    
          
     
 }    
    

-プログラム後記~
前髪の部分は、~
本来移動のためのプログラムだったが、~
微調整の過程でこちらを使用することにした。~
角度の調整がとても難しかったが、~
根気、勇気、友情、愛情、根性で乗り切った。~
~
輪郭は、○を描くだけだったので簡単だったが、~
前髪から輪郭に移る部分の~
go_ba(30):後退のプログラム
が少し大変だった。~
しかし、かなりの出来!達成感があった。

***ゆあorz[#xa39a37a]
自分の担当は目、眉毛、口です。
  task main()
 {
  mae_gami(); //mae_gami
     go_ba(30);
     off;
     
     right(1300); //atama_rinnkaku  //ここまでなかみうのプログラム。
    
 
  
   
   //eyebow1
   go_st(40);
   go_st(40);//眉毛1を描く
   
   //move to eyebow2
   penup();
   penup();//眉毛1から2まで動く
   go_st(50);
   //eyebow2
   Float(OUT_A+OUT_C);
   Float(OUT_A+OUT_C);//眉毛2を描く
   pendown();
    Float(OUT_A+OUT_C);
   go_st(40);
   //move to eye2
   Off(OUT_A+OUT_C);
   penup();
   Off(OUT_A+OUT_C);//目2まで動く
   penup();   //ペンを上げる
   go_ba(100);
   right(90);
   go_st(100);
   //eye2
   pendown();
   pendown(); //目2を描く
   go_st(20);
    Off(OUT_A+OUT_C);
   //move  to mouth
   //口まで動く
   penup();
   h_left(200);
   go_st(100);
   //mouth
   //口を描く
   pendown();
   go_st(100);
   Off(OUT_A+OUT_C);
    //move  to eye1
   penup();
    h_left(200);
    go_st(180);
    //eye1
    //目1を描く
    pendown();
    go_st(20);
    Float(OUT_A+OUT_C);
    }
 ~  
 ~
-プログラム後記~
なかみうのプログラムからの繋ぎが……つらかった。~
旋回、ペンの上げ下げが多くて……(´;ω;`)~
ペンを下げる強さが強すぎるのが、問題点だと思う。~
プログラムで改善しようと努力はしたが、ハードの問題も大きかった。~
しかし、プログラム作りは楽しかった!~



*完成品!! [#x0c40367]
**ゆあのロボ子が描いた絵~ [#cc851940]
&ref(2009b/A1/課題1左/kannseiy.jpg,20%,);~
**なかみうのロボ子が描いた絵~ [#ne317b0b]
&ref(2009b/A1/課題1左/kannsein.jpg,20%,);~
ペンをボールペンから蛍光ペンに変えると、~
ペンがつっかえてうまく描けなかった。~
ペンごとにプログラムを変更する必要性に気づいた。~
*コメントのコーナー [#ne777b9d]
- プログラムは、ここに載っているものをコピペしたら動くようにしてください。つまり、説明はコメントとして記述してください。なかみうさんのプログラムは、コメントにしていないという点以外はとても見やすくて良いです。[[課題1>2009b/練習問題#wbd6a6db]]に「ひとりにつき一つ以上のプログラム」とありますので、3人分をお願いします。あと、wordのdocファイルはブラウザから直接見られないので、NQCの取り付け図を画像にしてもらえるとありがたいです。 -- [[こさか]] &new{2009-11-14 (土) 16:16:43};
- 内容は十分に○以上だと思いますが、プログラムの完成品を3人分載せてください。スタンダードモデルをまず作るというのは面白いアイディアだと思います -- [[FI]] &new{2009-11-20 (金) 08:15:35};

#comment


発想の仕方がきちんとしていますし、またそれをちゃんとレポートに書いてあるのはとても良いです。まだ、「書き終えて」以降に書いていなかったり、写真をアップしていないので、終わっていないと判断して評価はしませんでした。書いた似顔絵がどんなものか、そして各パーツがロボットの度の動きと対応するかわかるように写真をはったり、プログラムにコメントの形で説明を加えると良いと思います。 FI

やる気が伝わってくるよいページです。まだ不足があるので、そこを補ってください。プログラムの説明は、コメントとしてソースの中に入れて、#ここで○○している のように書いたほうがわかりやすいです。各マクロについても、同様に何をするマクロなのか説明を入れてください。 こさか(KA)


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