#contents
*課題1:似顔絵ロボットの作成 [#u7ac9691]
ペアになった相手の似顔絵を書くプログラムを作る。
 
**メンバー紹介 [#t22ae3b2]

小次郎  ロボット担当 頼りになります!

コリン  ホムペ担当 ロボットには全く関与せず。ホムペ作りは頑張ってます。

プログラムは二人で考えて、コリンが書き込む感じ。協力してやってます!

**使用するロボットについて [#cf08e12a]
 
#ref(2008a/A4/課題1左/borotto_ue.jpg,100%,上から見た図)

↑ 上から見た図

#ref(2008a/A4/課題1左/borotto-mae.jpg,100%,前から見た図)
 
↑ 前から見た図

 ペンを持つ部分は、B出力のモータを利用。
 
 キャタピラを動かすモータは、A出力とC出力のモータをしよう。
 
 後々、キャタピラにしたことをものすごく後悔しました・・・。
 ペンを持つ部分は、B出力のモータを利用。キャタピラを動かすモータは、A出力とC出力のモータを使用。

 後々、キャタピラにしたことをものすごく後悔しました・・・。小回りが全然効きません。


*プログラムについて [#c066720d]
**その1(小次郎の似顔絵)[#z954d1aa]

 void go(int t)   // 前に進む動作を go と設定
 {
 OnFwd(OUT_A+OUT_C);    // AとC出力のモータを正回転させる
 Wait(t);            // t秒間実行
 Off(OUT_A+OUT_C);     // AとC出力のモータを止める
 }

 void back(int t)    // 後ろに下がる動作を back と設定
 {
 OnRev(OUT_A+OUT_C);   // AとC出力のモータを負回転させる
 Wait(t);           // t秒間実行
 Off(OUT_A+OUT_C);    // AとC出力のモータを止める
 }

 void go_right(int t)   // 右に曲がる動作を go_right と設定
 {
 OnFwd(OUT_A);       // A出力のモータを正回転させる
 Wait(t);           // t秒間実行
 Off(OUT_A);        // A出力のモータを止める
 } 

 void back_left(int t)   // 左に下がる動作を back_left と設定
 {
 OnRev(OUT_C);       // C出力のモータを負回転させる
 Wait(t);           // t秒間実行
 Off(OUT_C);         // C出力のモータを止める
 }

 void turn_left(int t)   // 反時計回りに回転する動作を turn_left と設定 
 {
 OnFwd(OUT_C);       // C出力のモータを正回転させる
 OnRev(OUT_A);       // A出力のモータを負回転させる
 Wait(t);           // t秒間実行
 Off(OUT_A+OUT_C);     // AとC出力のモータをとめる
 }

 void turn_right(int t)   // 時計回りに回転する動作を turn_right と設定 
 {
 OnFwd(OUT_A);       // A出力のモータを正回転させる
 OnRev(OUT_C);       // C出力のモータを負回転させる
 Wait(t);           // t秒間実行
 Off(OUT_A+OUT_C);     // AとC出力のモータをとめる
 }

 void pen_sage(int t)   // ペンを下げる動作を pen_sage と設定 
 {
 OnFwd(OUT_B);       // B出力のモータを正回転させる
 Wait(t);          // t秒間実行
 Off(OUT_B);        // B出力のモータをとめる
 } 

 void pen_age(int t)   // ペンを上げる動作を pen_age と設定 
 {
 OnRev(OUT_B);       // B出力のモータを負回転させる
 Wait(t);          // t秒間実行
 Off(OUT_B);        // B出力のモータをとめる
 }
 
 
↓上記で定義した関数を用いてロボットの動きを作る。

 task main()
 {
 pen_sage(150);   // ペンを下げる。
 go(140);      // まずは向かって右側の輪郭の線から書き始める。
 
 go_right(180);   // あごの部分を書く。すこし丸く。
 
 pen_age(200);   
 go_right(310);   
 back_left(170);   
 back(120);     // ペンを上げて向きを変える。
 
 pen_sage(150);   // ペンを下げる。
 go(210);      // まっすぐ進む。向かって左側の輪郭を書く。
 
 go_right(270);   
 
 pen_age(200);  
 go_right(250);   
 back_left(300);
 back(70);     
 
 pen_sage(150);
 go(50);       
 
 pen_age(200);
 go(150);
 back_left(380);
 back(50);    

 pen_sage(150);
 go(120);       // 頭&髪を書く。
 
 pen_age(200);
 go(200);
 
 turn_left(160);
 go(100);
 
 turn_left(160);    // 目をかくために方向を変えて移動。
 
 pen_sage(150);
 go(30);
 pen_age(200);
 go(25);
 pen_sage(150);
 go(30);         // 目を書く。
 }

#ref(2008a/A4/課題1左/kadai1.jpg,100%,プログラムその1)

↑実際に描いた絵。

描かせようと思っていた似顔絵とは大きく違ってしまったが、なかなか味のある表情が描けた。

**その2(コリンの似顔絵) [#u74c7137]

 void go(int t)   // 前に進む動作を go と設定
 {
 OnFwd(OUT_A+OUT_C);   // A出力とC出力のモータを正回転させる
 Wait(t);           // t 秒間実行
 Off(OUT_A+OUT_C);     // A出力とC出力のモータを止める
 }

 void back(int t)   // 後ろに下がる動作を back と設定
 {
 OnRev(OUT_A+OUT_C);   // A出力とC出力のモータを負回転させる
 Wait(t);           // t秒間実行
 Off(OUT_A+OUT_C);     // A出力とC出力のモータを止める
 }
 
 void go_right(int t)   //右に曲がる動作を go_right と設定
 {
 OnFwd(OUT_A);    // A出力のモータを正回転させる
 Wait(t);        // t秒間実行
 Off(OUT_A);      // A出力のモータを止める
 }
 
 void back_left(int t)   // 左に下がる動作を back_left と設定
 {
 OnRev(OUT_C);     // C出力のモータを負回転させる
 Wait(t);         // t秒間実行
 Off(OUT_C);       // C出力のモータを止める
 }
 
 void turn_left(int t)   // 反時計回りに回転する動作を turn_left と設定
 {
 OnFwd(OUT_C);     // C出力のモータを正回転させる
 OnRev(OUT_A);     // A出力のモータを負回転させる
 Wait(t);         // t秒間実行
 Off(OUT_A+OUT_C);   // A出力とC出力のモータを止める
 }
 
 void turn_right(int t)   // 時計回りに回転する動作を turn_right と設定
 {
 OnFwd(OUT_A);      // A出力のモータを正回転させる
 OnRev(OUT_C);      // C出力のモータを負回転させる
 Wait(t);          // t秒間実行
 Off(OUT_A+OUT_C);   // A出力とC出力のモータを止める
 }
  
 void pen_sage(int t)   // ペンを下げる動作を pen_sage と設定
 {
 OnFwd(OUT_B);     // B出力のモータを正回転させる
 Wait(t);         // t秒間実行
 Off(OUT_B);       // B出力のモータを止める
 } 

 void pen_age(int t)   // ペンを上げる動作を pen_age と設定
 {
 OnRev(OUT_B);     // B出力のモータを負回転させる
 Wait(t);         // t秒間実行
 Off(OUT_B);       // B出力のモータをとめる
 }
 

↓上記で定義した関数を用いてロボットの動きを作る。

 task main()
 {

 pen_sage(150);
 go(140);
 
 go_right(180);
 
 pen_age(200);
 go_right(310);
 back_left(170);
 back(120);
 
 pen_sage(150);
 go(210);
 
 go_right(270);
 
 pen_age(200);
 go_right(270);
 back_left(150);
 back(120);
 
 pen_sage(150);
 go(210);
 
 turn_right(70);
 pen_age(200);
 turn_right(110);
 pen_sage(150);
 go(50);
 pen_age(200);
 turn_right(180);
 pen_sage(150);
 back(30);
  }


**制作してみての感想 [#y9cee856]

<苦労した点> 

 電池の消耗が早く、プログラムを作って実行するたびに結果が違うので、微調整ができず、とても苦労しました。本当に大変でした。特に、輪郭や頭の部分で一度ペンを持ち上げてからロボットの向きを変えて同じところにペンを下げさせる作業は微調整なくしてはできない作業だったのでとても大変でした。
 キャタピタラは小回りが利くと思いきやスムーズな動きができませんでした。
 ロボットの動きを考慮してロボットに描かせる絵を考えることが難しかったです。


<工夫した点>

 ロボットの片方のキャタピラを回転させて描く円を輪郭と頭に使ったこと。
 ペンを着ける位置によって描く線がかわってしまうので、ペンをつける位置や角度に注意した。

***コメントお願いします [#n5aa7163]
#comment

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