[[2009b]]
#contents

*ロボット [#z3543e90]

アームを取り付ける前のロボット [#u4dc1ed5]
#ref(./GetAttachment[1].jpg,サイズ,画像の説明)
アーム
#ref(./GetAttachment[2].jpg,サイズ,画像の説明)
最終形態
#ref(./GetAttachment[3].jpg,サイズ,画像の説明)

**ロボット作成裏話   [#nb56d738]
  他の班が凝りに凝った機体を作る一方で今回我が班は、「初心にかえる」をモットーに第二回目の授業の際に作成した機体に残ったモーターで上下に稼働するアームを取り付けることに成功した!。というと結構かっこいい気がしないでもありませんが、実際は、課題が出た会の講義のときに、「これ作ったら俺たちすごくね!?」とテンションの命ずるがままにテキストの後半の方に載っている「インベンタロボット」なるものを作成。これで行けると思っていたんです。作成後に気づいたのですがこのロボット足動かないんですよね(´;ω;`)。これはヤバいと休日に集まり新しい機体の作成に着手。しかし思うようには進まず絶望にうちひしがれているところに班メンバーのまさやくんが「最初の機体でよくない?」と提案したところ、「じゃあそれで行こうか」と自分も賛同し、結果この機体でがんばることになりましたヾ(*´ω`*)ノ。 [#g1b4f0a2]
*課題 [#ce3d24bf]
 パートナーの似顔絵を描く
*目標 [#nc3e8229]
 目、鼻、口、顔の輪郭を描く
 プログラムをなるべく簡潔にする
*構造 [#e7fc86d9]
 アーム:歯車を4つ使って(ギア比)アームの上げる速度を調節。
#ref(./091106_1658~0001-1.jpg,サイズ,画像の説明)
 本体:進む速度をゆっくりにするためにタイヤのところには大きな歯車を使いました(歯数40)。
#ref(./GetAttachment-1.jpg,サイズ,画像の説明)
 またタイヤの直径が短いものにして進む速度を調整。
#ref(./091106_1700~0001.jpg,サイズ,画像の説明)
 前輪と後輪との間の距離を短くすることで小回りをできるようにしました。アーム(ペンの位置)をなるべく本体に近づけることで安定するようになりました。
 モーターは3つ使いました。2つは本体のタイヤを回すために、1つはアームを上下させるために使いました。
*プログラム [#i8b93073] 
   *しんごのプログラム
        
 sub ku()                           //これは口と鼻をかくためのプログラムです。
 {OnRev(OUT_C);                      //其の場で90度旋回
 OnFwd(OUT_A);Wait(70);
 OnFwd(OUT_B);
 Wait(25);
 Off(OUT_B);
 OnFwd(OUT_A+OUT_C);Wait(60);        //前進後退します。
 OnRev(OUT_B);Wait(25);
 Off(OUT_B);
 OnRev(OUT_A+OUT_C);Wait(60);   //そして90度反転し元の位置に戻ります。 
 OnRev(OUT_A);
 OnFwd(OUT_C);Wait(90);
 Off(OUT_A+OUT_C);   
 }	  
 sub uparm()                                                //名前の通りペンを持たせたアームを上げ下げするためのグラムです。
 {
 OnRev(OUT_B);Wait(25); 
 Off(OUT_B);
 } 
 sub downarm()
 {
 OnFwd(OUT_B);Wait(25);
 Off(OUT_B);
 }
  
  
     
 #define usiro(t) OnRev(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);   //「usiro」は機体をバックさせるためのものです。 
 #define mae(t) OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);//機体を前進させます
 #define  owari Off(OUT_A+OUT_C);   //機体をその場で停止させます。
 
 
 task  main()
 {          ku();                                                                                      //これで口をかきます
   mae(70);
 OnRev(OUT_C);                                                                   //3行目から15行目までで目をかきます
   OnFwd(OUT_A);Wait(80);
   usiro(30);
   downarm();
   mae(30)
   uparm();
   mae(30);
   downarm();
   mae(30);
   uparm();
   usiro(90);  
   OnRev(OUT_A);
   OnFwd(OUT_C);Wait(80);   
   mae(50);
   OnRev(OUT_C);
   OnFwd(OUT_A);Wait(90);
  mae(140);
  usiro(20);    
  downarm();
  OnFwd(OUT_A);Wait(710);                          //ぐるりと一回転。立派な丸顔ですがこれで輪郭がかけたことになります.
 Off(OUT_A);}
そしてこれが実際に書いた顔になります。
#ref(./GetAttachment[4].jpg,サイズ,画像の説明)

  まさやのプログラム [#jce395fb]
  #define up OnRev(OUT_B);Wait(20);Off(OUT_B);               //アームを上げる
 #define down OnFwd(OUT_B);Wait(20);Off(OUT_B);              //アームを下げる
 #define back(t) OnRev(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);//後退
 #define go(t) OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);  //前進
 #define turn_l(t) OnFwd(OUT_C);Wait(t);Off(OUT_C);          //前進左折
 #define turn_r(t) OnFwd(OUT_A);Wait(t);Off(OUT_A);          //前進右折
 #define back_turn_l(t) OnRev(OUT_C);Wait(t);Off(OUT_C);     //後退左折
 #define back_turn_r(t) OnRev(OUT_A);Wait(t);Off(OUT_A);     //後退右折
 task main()
 {    
     OnFwd(OUT_A+OUT_C); //顔の輪郭を描くプログラム
     Wait(40);
     Off(OUT_A);Float(OUT_C);
     turn_r(110);        //左ほほを描いてます
     OnFwd(OUT_A);OnRev(OUT_C);Wait(3);Off(OUT_A+OUT_C);     //ここからあごの部分
     turn_r(200);        //ここからは右ほほ
     up;                 //ペンを上げて目を描くための準備に入る
     go(25);
     turn_l(70);
     back(100);
    repeat(2){           //目を描くプログラム、一回目の繰り返しで左目、二回目で右目
     down;
     back(25);
     up;
     back(25);
     }
     turn_r(40);         //ここから髪の毛を描く準備に入る
     go(40);
     turn_l(25);
     go(70);
     down;
    repeat(3){           //髪の毛を描くプログラム、この繰り返しで髪の毛をギザギザで表現
     back_turn_r(50);
     back_turn_l(50);
     }
     up;
     go(80);
     turn_l(180);        //だいたい90度左へ曲がり鼻を描くために向きを整える
     back(70);           //鼻の書き始める位置の調節
     down;               //鼻を描くプログラム
     go(20);
     up;
     go(10);             //鼻から口へ移動
     OnFwd(OUT_C);OnRev(OUT_A);Wait(7);Off(OUT_A+OUT_C);
     down;
    repeat(8){           //口を描くプログラム、短い時間の繰り返しで曲線を描く(笑っているように)
     turn_r(2);
     OnFwd(OUT_A);OnRev(OUT_C);Wait(2);Off(OUT_A+OUT_C);
     }
     up;                 //ペンを上げる
     go(250);            //紙の上から退場
 }

 輪郭を描くのが思っていたより大変でした。思うような曲線をなかなか描いてくれませんでした。
こんな感じです。
#ref(./091105_2010~0001.jpg,サイズ,似顔絵)

*コメントをどうぞ [#f01de94a]
- 更新しました。よろしくお願いします。 -- [[まさや]] &new{2009-11-13 (金) 11:41:05};
- 説明が追加されて、わかりやすくなっており、とても良いです。情報の量や質とは別に、ページの見やすさを工夫してみてください。(今は、妙にページが横長になってしまっているような気がします。)プログラムのインデントの入れ方は自由ですが、あくまでも「見やすいように」入れてください。検索して調べたり、先生の書かれた[[[NQC入門/3. もう少し複雑なプログラム]]]のページなどを見て、どうしたら見やすいインデントが入れられるか考えてみてください。 -- [[こさか]] &new{2009-11-14 (土) 15:39:04};
- 一回目よりわかりやすくて良くなったと思います。プログラムの各要素が似顔絵のどの部分と対応するかなどを書いたりやギア比についてもっと詳しく考察してみるなど、もっと充実させられると思います。 -- [[FI]] &new{2009-11-20 (金) 08:30:32};

#comment
書くべきことは書けています。あとは、もっと詳しくわかりやすくをキーワードに内容を充実させてみてください。過去のホームページを参考になると思います。あと、今回はあまり迷うところはありませんでしたが、何をサブルーチンにすると効率的かを考えていくきっかけにしてみてください。例えば、一つ目のプログラムでは、鼻と口を書く部分をサブルーチンにしていますが、これは、まとまりをわかりやすくしたり、部分から先にを作って後で全体を組み立てるときには有効です。(結局、このサブルーチンは一回しか使ってないですが)二つ目では何度も使う動作を関数としていて、省エネ・見やすくなっているという点で役に立っています。FI

内容としては必要な部分はできています。「構造」の部分に書いた工夫の点をアップにした写真などをつけてもいいと思います。また、ページの見易さとして、プログラムのコメントを長い一文にするのではなく、細かく区切ってそれぞれの行につけたり、インデント(見やすくするための空白文字下げ)をいれるといいでしょう。それから、コメント欄があるとコメントしやすいです。 こさか(KA)

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