[[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//for go
#define FL OUT_A//turn left
#define FR OUT_C//turn right
#define FA OUT_B//pen


sub up()              //ペンを上げるsub
 {SetPower(FA,5);
  OnFwd(FA_B);
  Wait(t);
  Off(FA);}

sub down()            //ペンを下げるsub
  {SetPower(FA,5);
   OnRev(FA);
  Wait(t);
  Off(FA);}

sub fore()            //本体を前に動かすsub
  {SetPower(FF,5);
  OnRev(FF);}
 
sub back()            //本体を後ろに動かすsub
  {SetPower(FF,5);
  OnFwd(FF);}

sub right()            //右に旋回するsub
  {SetPower(FR,5);
  OnRev(FF);}

sub left()             //左に旋回するsub
  {SetPower(FL,5);
   OnRev(FF);}
   
sub turn_left_025()           // 90度左旋回
 {turn_time = WHOLETIME ;
    turn_time /= 4 ;
    OnFwd(FL); Rev(FF); Wait(turn_time); 
    Off(FF);           }
    
sub turn_left_0125()           // 45度左旋回
 {turn_time = WHOLETIME ;
    turn_time /= 8 ;
    OnFwd(FL); Rev(FF); Wait(turn_time); 
    Off(FF);              }
 
sub turn_right_025()           // 90度右旋回
 {turn_time = WHOLETIME ;
    turn_time /= 4 ;
    OnFwd(FR); Rev(FF); Wait(turn_time); 
    Off(FF);           }
    
sub turn_right_0125()           // 45度右旋回
 {   turn_time = WHOLETIME ;
    turn_time /= 8 ;
    OnFwd(FR); Rev(FF); Wait(turn_time); 
    Off(FF);              }
  
main task()
 {          down();           //筆先を下ろします
      repeat(2){         //まずは輪郭です
           fore();
           Wait(t);
           Off(FF);          
           
           left();
           Wait(t);
           Off(FL);}         //輪郭描けました
      
           up();
           turn_left_025();
      repeat(2){
           fore();
           Wait(t);
           Off(FF);
           down();
           fore();
           Off(FF);
           up();}
           
           fore();                  //目を描きました
           
           back();
           Wait(t);
           Off(FF);
           turn_ right_025();
           fore();
           Wait(t);
           Off(FF);
           down();
           fore();
           Wait(t);
           Off(FF);
           up();                    //鼻を描きました
           
           turn_left_025();
           fore();
           Wait(t);
           Off(FF);
           turn_right_025();
           Wait(t);
           Off(FF);
           turn_right_025();
           Wait(t);
           Off(FF);
           down();
           fore();
           Wait(t);
           Off(FF);
           up();
           fore();
           Wait(t);
           Off(FF);                 //口が描けました
           
           turn_right_025();
           fore();
           Wait(t);
           Off(FF);
       repeat(3){   
           turn_right_0125();
           fore();
           Wait(t);
           Off(FF);
           turn_left_0125();}       //髪まで描きます!


 //サブルーチンは上限八個であることが判明
 //これから試行錯誤します

***その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()                                      //pennup
sub up()  ペンを上げる                                
 {SetPower(FA,5);
  OnFwd(FA);
  Wait(5);
  Off(FA);}
 
 sub down()                                  //pendown
sub down()  ペンを下げる                            
 {SetPower(FA,5);
  OnRev(FA);}
 
 sub fore()                                  //gofore
sub fore()  直進                                
 {SetPower(FF,5);
  Off(FA); 
  OnRev(FF);}  
 
 sub back()                                  //goback
sub back()    後退                              
 {SetPower(FF,5);
  OnFwd(FF);}
 
 sub right()                                  //turnright

Wait(t);
 Off(FA);}

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

task main()
 {
     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();
 

 }

/まだ未完成です。
    


                   


*コメント [#zc823165]
コメントがあればどうぞ

#comment


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