''チームメンバー こだま&きたざわ''

&size(30){'''もくじ'''};
#contents


*今回の課題について [#s3e704a4]
今回はお絵かきロボットを作成しました。詳しい課題内容は[[課題1:http://yakushi.shinshu-u.ac.jp/robotics/?2010a%2F%CE%FD%BD%AC%CC%E4%C2%EA#kadai1]]をご覧ください。


*作成したロボット [#d6840f79]
&ref(./ロボ6_2010_A8_右.JPG,100%,土台);

土台は、説明書に載っていたものをほぼそのまま採用しました。

&ref(./ロボ2_2010_A8_右.JPG,100%,完成したロボット);
&ref(./ロボ1_2010_A8_右.JPG,100%,完成したロボット(横ver));

小型かつ、そこそこ強度にも優れた出来に仕上がりました。


''ペンを出すときの流れ''

&ref(./4_1.png,50%,図1);
&ref(./4_2.png,50%,図2);
&ref(./4_3.png,50%,図3);
&ref(./4_4.png,50%,図4);

(↑本当は順番に動くようにしたかったのですが、動画ファイルをうまくこのページに貼れませんでした(泣)すいませんが1枚1枚でお願いします。)

正面(タイヤが付いているほう)から見て、左上のタイヤにモーターが付いています。
主にペンの上げ下げにつかいます。
線を描くときには、描いている最中にボールペンが上にいかないよう、弱い力で抑え続ける役目もあります。


*工夫した点 [#w63a74c5]
**ボールペンの固定の仕方 [#v11f72db]
&ref(./ロボ3_2010_A8_右.JPG,100%,4個のタイヤ);
&ref(./ロボ4_2010_A8_右.JPG,100%,4個のタイヤ(ボールペン装着ver));

4個のタイヤを使うことで、スムーズにペンが上下に動くようになりました。

**部分ごとに作り分け [#k718c12f]
&ref(./ロボ5_2010_A8_右.JPG,100%,ロボ分解);

簡単にこの状態まで分解できます。
持ち運ぶときに便利です。


*苦労した点 [#t95ab77e]
タイヤが回るようブロックの穴に、棒のパーツといっしょにタイヤを固定することにより、おのずとタイヤの固定可能位置が決まってしまいます。
これにより、タイヤとタイヤの間隔を、ボールペンがピッタリはまる間隔にすることが難しかったです。
いろんなタイヤのサイズを試したり、いくつかのボールペンで検証してみたことにより、
ピッタリな組み合わせを発見しました。


*プログラム [#o8705ba6]
**こだまver [#q8e5c7da]
プログラムが長くならないようにするために、マクロを使ってなるべく短くしてみました。
 #define up_pen SetPower(OUT_B,7);OnRev(OUT_B);Wait(5);Off(OUT_B);//ペンを上げる
 #define down_pen SetPower(OUT_B,7);OnFwd(OUT_B);Wait(10);Off(OUT_B);//ペンを下げる
 #define go_straight(t) OnRev(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);//前進
 #define write_line(t) OnRev(OUT_A+OUT_C);OnFwd(OUT_B);Wait(t);Off(OUT_A+OUT_B+OUT_C);//線を書く
 
 
 task main()
 {
     SetPower(OUT_B,1);
     OnFwd(OUT_A+OUT_B);OnRev(OUT_C);Wait(450);//輪郭を書く
     Off(OUT_A+OUT_B+OUT_C);
 
     up_pen;
 
     go_straight(10);
 
     down_pen;
 
     SetPower(OUT_B,1);
     write_line(20);
 
     up_pen;
     
     go_straight(20);
 
     SetPower(OUT_B,7);
     down_pen;
 
     SetPower(OUT_B,1);
     write_line(20);
 
     up_pen; 
 
     OnRev(OUT_A);OnFwd(OUT_C);Wait(59);//下方に移動
     Off(OUT_A+OUT_C);
 
     OnFwd(OUT_A);Wait(15);//方向修正
     Off(OUT_A);
 
     OnFwd(OUT_A);OnRev(OUT_C);Wait(20);
     Off(OUT_A+OUT_C);
 
     down_pen;
 
     SetPower(OUT_B,1);
     OnFwd(OUT_A+OUT_B+OUT_C);Wait(40);//口を書く
     Off(OUT_A+OUT_B+OUT_C);
      }

&ref(./似顔絵_アキヒロ.JPG,100%,ロボットが描いた絵);
&ref(./似顔絵2_アキヒロ.JPG,100%,ロボットが描いた絵);

口を傾けて少し表情をつけてみました。

本人には全然似ていません。


**きたざわver  [#d426477e]
 #define pen_up SetPower(OUT_B,7);OnRev(OUT_B);Wait(5);Off(OUT_B);                      //ペンを持ち上げる  
 #define pen_down SetPower(OUT_B,7);OnFwd(OUT_B);Wait(10);Off(OUT_B);                    //ペンを下げる
 #define go_straight(t) OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);                    //直進
 #define go_straight_write(t) SetPower(OUT_B,1);OnFwd(OUT_A+OUT_B+OUT_C);Wait(t);Off(OUT_A+OUT_B+OUT_C);    //線を描きながら直進
 #define go_back(t) OnRev(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);                      //後ろにまっすぐ下がる
 #define spin_left OnRev(OUT_A);OnFwd(OUT_C);Wait(100);Off(OUT_A+OUT_C);                  //その場で左回転
 task main()
 { 
    repeat(2){ 
      SetPower(OUT_B,1);                         //線を描き始めるので、ペンを動かすモーターの力を弱くする(強すぎると車体が浮く)
      OnFwd(OUT_A+OUT_B);Wait(350);              //弱い力でペンを地面に押しつけながら線を引く(ここで描くのは頭の丸い部分)
      Off(OUT_A);                    
      pen_up;                                    //ここでペンを上げ、次からロボの位置変更を開始する
      go_straight(30);                          //ここから3行で次の描き始めまで移動    
      OnFwd(OUT_A);OnRev(OUT_C);Wait(90); 
      go_back(30);
      pen_down;                            
      go_straight_write(100);                    //ここで顔右側の直線を描く。今までの動きを2回繰り返し、顔全体の輪郭を描く
    }
      pen_up;                                    //ここから4行で次の描き始めまで移動
      go_straight(30);  
      spin_left;        
      go_back(30);      
      pen_down;         
    repeat(6){
      SetPower(OUT_B,1);                   
      OnRev(OUT_A);OnFwd(OUT_B);Wait(50);        //ロボを右寄りにバックさせ、髪の毛の線を描く
      SetPower(OUT_C,3);                         
      OnFwd(OUT_A+OUT_B);OnRev(OUT_C);Wait(50);  //ロボを右上のほうに動かし線を描く。ここまでで髪の毛のギザギザ1つ完成。計6回同じ動きでギザギザを頭全体に描く。
      Off(OUT_A+OUT_B+OUT_C);                    
    }
      SetPower(OUT_C,7);  
      pen_up;             
      spin_left;                                 //ここから3行で次の描き始めまで移動
      go_back(50);        
      spin_left;          
    repeat(2){
      go_straight(30);                           //ここでロボは左耳のあたりにいるはず。少し進んで目を描く
      pen_down;               
      go_straight_write(30);  
      pen_up;                           //2回繰り返し目が2つ完成
    } 
      OnRev(OUT_A);OnFwd(OUT_C);Wait(100);     //ロボが顔の下の方向を向くように回転
      Off(OUT_A+OUT_C);                     
      pen_down;  
      SetPower(OUT_B,1);                                               
      OnRev(OUT_A);OnFwd(OUT_C+OUT_B);Wait(50);  //ここでロボを少し回転させ口を描く
      Off(OUT_A+OUT_B+OUT_C);                    
 }
&ref(./似顔絵1_2010_A8_右.JPG,100%,実際にロボが描いた絵);

こんな感じに描けました。


*今回の感想 [#g9f44a74]
**こだま [#g2c41875]
プログラムを作るのは、初めてで簡単な似顔絵を描くだけでもとても苦労しました。

自分が普通にしている書くということがロボットにやらせてみると、思った以上に大変でした。

時間の関係もあって、かなり簡単なプログラムでもっと改良できた思っています。次はもう少し凝った物を作りたいと思います。


**きたざわ [#se552ae3]
初めての作業が多く、大変でした。特にプログラミング。
最終的に、そこそこ顔に見えるレベルにまではいけてよかったです。

ロボットの移動速度が速く、プログラムの調整が大変でした。ギアを追加するなど、速度をもう少し抑えればよかったです。しかし、速度が速いおかげで、まっすぐな線を描けたというメリットもあったと思います。
*コメント [#w558f5a7]
コメントお願いします。
- ロボットもプログラムもきちんと説明しているみたいで良いです -- [[FI]] &new{2010-05-21 (金) 08:20:47};
- イラストも使って、良く説明されています。写真に解説を入れるなど、より詳しくまとめてみてもいいかもしれません -- [[TAKA]] &new{2010-05-21 (金) 13:48:48};

#comment


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