[[2008b/A2/課題1/メンバーページへ:http://yakushi.shinshu-u.ac.jp/robotics/?2008b%2FA2]]

*目次 [#q7c2244f]

#contents

*課題1/似顔絵を作成する [#c3d27323]

**1課題の概要 [#aaf96f25]

A3の用紙に相棒の似顔絵を作成するロボットの作成。
 

**2ロボット本体の制作過程 [#cfc33310]

***土台構成について [#n884bd06]

~土台となる部分は作成用の本に書いてあった四輪のタイプを使用しました。
~土台の部分には特に手を加えず、そのままの形で製作。

***ペンを持たせる部分について [#l7012eb2]

~ここの部分には過去の作品のアイディアを一部使用しながら工夫し、完成。予定よりもかなり少ない部品でつくることの成功しました。&br;主な工夫点については後に記載します。
**3ロボット本体の完成 [#hb2eb680]

完成したロボットがこちら
~正面~


~真上から~

まだ写真はありません。
***主な工夫点 [#x742bc48]

~ペンを動かすにはタイヤを使って上下に移動する方法を採用。&br;
三つタイヤを使うことによりペンの上下を安定させることが出来たと思います。&br;
また、なるべく少ない部品で組み立てることで、小型化、軽量化することができました。
***ロボットの欠点と改善に向けて [#c8c5aa72]

~このロボットの弱点、つまり改良点は、非常に衝撃に弱いことです。&br;ブロックばかりでの構成なので、外れやすく、組み込みが複雑なので取り外しも簡単に出来ません。
&br;前のほうにパーツが多い所為か前に重心がかかっているらしく、アームの部分だけが外れることもよくあります。
&br;なので改良すべき点はパーツが外れないよう補強すること、ブロック以外の部品の活用です。
&br;だからといってパーツを多く使いすぎれば小型、軽量の意味がなくなってしまうので難しいところです。
**4ロボットのプログラム [#g0004a6b]

***その1 [#n119425f]
int turn_time;

#define FF OUT_A+OUT_C
#define FL OUT_A
#define FR OUT_C
#define FA OUT_B

void up()// ペンを上げる
void up() //

 { OnRev(FA);  Wait(10); Off(FA); }
 { SetPower(FA,5); OnRev(FA);  Wait(10); Off(FA); }
void down() //

void down() // ペンを下げる
 { SetPower(FA,5); OnFwd(FA); Wait(10); Off(FA);}

 { OnFwd(FA); Wait(10); Off(FA);}
sub go() // 

void fore(int t) // t秒間直進
 {OnRev(FF); Wait(10); Off(FF);}

 { OnRev(FF); Wait(10); Off(FF);}
sub go_back() //

void back(int t)// t秒間後退

 { OnFwd(FF); Wait(10); Off(FF);}


sub right() 

 {SetPower(FR,5);
 OnRev(FR);}

sub left() 
 {SetPower(FL,5);
  OnRev(FL);}
  
sub turn_left_025()           // TURN LEFT - 0.25 左に90°回転

 { turn_time /= 4 ; OnFwd(FL); Rev(FF); Wait(turn_time); Off(FF);           }
sub turn_left_025()           // TURN LEFT - 0.25
 { 
    turn_time /= 4 ;
    OnFwd(FL); Rev(FF); Wait(turn_time); 
    Off(FF);           }
    
sub turn_left_0125()           // TURN LEFT - 0.125 左に45°回転

 { turn_time /= 8 ; OnFwd(FL); Rev(FF); Wait(turn_time); Off(FF);              }
sub turn_left_0125()           // TURN LEFT - 0.125
 { 
    turn_time /= 8 ;
    OnFwd(FL); Rev(FF); Wait(turn_time); 
    Off(FF);              }
 
sub turn_right_025()           // TURN LEFT - 0.25 rightに90°回転

 { turn_time /= 4 ; OnFwd(FR); Rev(FF); Wait(turn_time); Off(FF);           }
sub turn_right_025()           // TURN LEFT - 0.25
 { 
    turn_time /= 4 ;
    OnFwd(FR); Rev(FF); Wait(turn_time); 
    Off(FF);           }
    
sub turn_right_0125()           // TURN LEFT - 0.125 rightに45°回転
sub turn_right_0125()           // TURN LEFT - 0.125
 {
    turn_time /= 8 ;
    OnFwd(FR); Rev(FF); Wait(turn_time); 
    Off(FF);              }

 { turn_time /= 8 ; OnFwd(FR); Rev(FF); Wait(turn_time); Off(FF);              }


  
  
task main()
 
 {         down();           //ready OK
 {          down();           //ready OK
      repeat(2){     
           fore();
           go();
           Wait(10);
           Off(FF);          //start
           
           left();
           Wait(10);
           Off(FL);}        //rinkaku OK
      
           up();
           turn_left_025();
      repeat(2){
           fore();
           go();
           Wait(10);
           Off(FF);
           down();
           fore();
           go();
           Off(FF);
           up();}
           
           fore();                  //eyes OK
           go();                  //eyes OK
           
           back();
           go_back();
           Wait(10);
           Off(FF);
           turn_right_025();
           fore();
           go();
           Wait(10);
           Off(FF);
           down();
           fore();
           go();
           Wait(10);
           Off(FF);
           up();                    //nose OK
           
           turn_left_025();
           fore();
           go();
           Wait(10);
           Off(FF);
           turn_right_025();
           Wait(10);
           Off(FF);
           turn_right_025();
           Wait(10);
           Off(FF);
           down();
           fore();
           go();
           Wait(10);
           Off(FF);
           up();
           fore();
           go();
           Wait(10);
           Off(FF);                 //mouse OK
           
           turn_right_025();
           fore();
           go();
           Wait(10);
           Off(FF);
       repeat(3){   
           turn_right_0125();
           fore();
           go();
           Wait(10);
           Off(FF);
           turn_left_0125();}                  //hair OK
                                      }       //finish
           turn_left_0125();
           go();
           Wait(10);
           Off(FF);}                  //hair OK
                                                }       //finish
           
 //subを減らしました Waitの時間は適当です
           
                     
                      
 //一応プログラムはこれで完了です
 //これから試行錯誤します

***その2 サブルーチンなどは、その1とほとんど同じです。 [#sbdf315f]

 int turn_time;

 #define FF OUT_A+OUT_C
 #define FL OUT_A
 #define FR OUT_C
 #define FA OUT_B
 
sub up()  ペンを上げる                                
 {SetPower(FA,5);
  OnFwd(FA);
  Wait(5);
  Off(FA);}
 
sub down()  ペンを下げる                            
 {SetPower(FA,5);
  OnRev(FA);}
 
sub fore()  直進                                
 {SetPower(FF,5);
  Off(FA); 
  OnRev(FF);}  
 
sub back()    後退                              
 {SetPower(FF,5);
  OnFwd(FF);}

Wait(t);
 Off(FA);}

sub right()  右に曲がる                           
 {SetPower(FR,5);
  OnRev(FF);}
 
sub left()    左に曲がる                             
 {SetPower(FL,5);
  OnRev(FF);}



task main()

#ref(輪郭.jpg)

 {
     down();     //輪郭(左頬からスタート)
     fore();
     Wait(130);
     up();
 
   repeat(2){      //アゴの辺り
     left();
     Wait();
     down();
     fore();
     Wait();
     up();
     
     left();
     Wait();
     down();
     fore();
     Wait();
     up();
     
     left();
     Wait();
     down();
     fore();
     Wait();
     up();
     }
     
     down();      //右頬の辺り
     fore();
     Wait();
     up();
     back();
     Wait();
     left();
     Wait();

#ref(メガネ.jpg)

   repeat(2);{          //メガネ
     down();
     fore();
     Wait();
     up();
     right();
     Wait();
     down();
     fore();
     Wait();
     up();
     left();
     Wait();
     down();
     fore();
     Wait();
     up();
     
     left();
     Wait();
     down();
     fore();
     Wait();
     up();
     left();
     Wait();
     down();
     fore();
     Wait();
     
     up();
     left();
     Wait();
     fore();
     Wait();
     }
     
   down();
   fore();
   Wait();

#ref(鼻.jpg)
  
   up();          //鼻までの移動
   back();
   Wait();
   left();
   Wait();
   fore();
   Wait();
   
   down();     //鼻
   fore();
   Wait();
   up();

#ref(口.jpg)

   up();     //鼻から口   
   right();
   Wait();
   fore();
   Wait();
   left();
   Wait();
   fore();
   Wait();
   
   down();          //最後に口を書きます
   repeat(2){
      left();
      Wait();
      down();
      fore();
      Wait();
      up();
   
      left();
      Wait();
      down();
      fore();
      Wait();
      up();
 
      left();
      Wait();
      down();
      fore();
      Wait();
      up();
      }  
      }                 //口を書き終わって終了です。

/図は後で足します。
    


                   


*コメント [#zc823165]
コメントがあればどうぞ
- 相方への連絡です。ロボットの動きを知りたいので、CD含めた一式を5コマ目の後パソコン室(十番教室)に持ってきて下さい。六時から七時まで、一時間ほど待機しています。 -- [[ハマダ]] &new{2008-11-10 (月) 09:06:55};
- ロボットを動かさないことにはプログラムの改良のしようがありません。明日のお昼にパソコン室に持ってきてくださるか、そちらでロボットの改良及び動きの時間の計測をお願いします。 -- [[ハマダ]] &new{2008-11-10 (月) 18:23:22};
- コメントに気付きませんでした。本当にすいません。明日4コマ目終わってから10番教室にいます。来れる時間帯教えてもらえると助かります。 -- [[しみず]] &new{2008-11-11 (火) 13:37:49};
- 分かりました、こちらも10番教室で待っています。 -- [[ハマダ]] &new{2008-11-12 (水) 14:55:50};
- ソースがきれいに貼れてないのでそこらへん直してください -- [[なかむら]] &new{2008-11-12 (水) 17:02:06};

#comment


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