2007a/MemberOnly/進行状況A

2007a/A8/課題1左

書道ロボット

 今回の課題は、文字を書くロボットを制作することです。

 書く文字は、メンバーのひとりの出生地である、世田谷の「世」「田」「谷」です。これを三人で分担して、書きました。

それぞれのプログラミング

世田谷の『世』

   task main()
   {
   OnFwd(OUT_B);Wait(10);                    //一画目 ペンを降ろす
   OnFwd(OUT_A+OUT_C); Wait(150); 
   OnRev(OUT_B);Wait(10);      ペンを上げる
   OnRev(OUT_A+OUT_C);Wait(75);
   OnFwd(OUT_A);OnRev(OUT_C);Wait(250); 
   OnRev(OUT_A+OUT_C);Wait(25);
   
   OnFwd(OUT_B);Wait(10);      //二画目 ペンを降ろす
   OnFwd(OUT_A+OUT_C); Wait(100);
   
   OnRev(OUT_B);Wait(10);      ペンを上げる
   OnRev(OUT_A+OUT_C);Wait(100);
   OnRev(OUT_A);OnFwd(OUT_C);Wait(230);
   OnFwd(OUT_A+OUT_C); Wait(25); 
   OnFwd(OUT_A);OnRev(OUT_C);Wait(230);
   
   OnFwd(OUT_B);Wait(10);       //三画目 ペンを降ろす
   OnFwd(OUT_A+OUT_C); Wait(100);
   
   OnRev(OUT_B);Wait(10);    ペンを上げる
   OnRev(OUT_A+OUT_C);Wait(25);
   OnRev(OUT_A);OnFwd(OUT_C);Wait(230);
   OnRev(OUT_A+OUT_C);Wait(50);
   
   OnFwd(OUT_B);Wait(10);      //四画目 ペンを降ろす
   OnFwd(OUT_A+OUT_C); Wait(50);
   
   OnRev(OUT_B);Wait(10);
   OnRev(OUT_A+OUT_C);Wait(25);
   OnFwd(OUT_A);OnRev(OUT_C);Wait(140);
   OnRev(OUT_A+OUT_C);Wait(120);
   OnFwd(OUT_A);OnRev(OUT_C);Wait(100);
   
   OnFwd(OUT_B);Wait(10);       //五画目 ペンを降ろす
   OnFwd(OUT_A+OUT_C); Wait(150);
   
   OnRev(OUT_B);Wait(10);      ペンを上げる
   OnRev(OUT_A+OUT_C);Wait(25);
   OnRev(OUT_A);OnFwd(OUT_C);Wait(230);
   OnRev(OUT_A+OUT_C);Wait(25);
   
   OnFwd(OUT_B);Wait(10);        
   OnFwd(OUT_A+OUT_C); Wait(130);
   
   Float(OUT_A+OUT_B+OUT_C);
   }

世田谷の『田』

   task main()
   {                                           
   OnFwd(OUT_B);Wait(50);                  //1画目ペンを下ろす。
   OnFwd(OUT_A+OUT_C);Wait(90);     
   OnRev(OUT_B);Wait(50);      //ペンを上げる。
   OnRev(OUT_A+OUT_C);Wait(140);
   
   OnRev(OUT_A);OnFwd(OUT_C);Wait(190);
   OnFwd(OUT_B);Wait(50);      //2画目ペンを下ろす。
   OnFwd(OUT_A+OUT_C);Wait(110);
   OnFwd(OUT_A);OnRev(OUT_C);Wait(250);
   OnFwd(OUT_A+OUT_C);Wait(100);
   OnRev(OUT_B);Wait(50);      //ペンを上げる。 
   
   OnFwd(OUT_A);OnRev(OUT_C);Wait(230);
   OnFwd(OUT_A+OUT_C);Wait(60);                  
   OnFwd(OUT_A);OnRev(OUT_C);Wait(230);
   OnFwd(OUT_A+OUT_C);Wait(90);       
   OnFwd(OUT_B);Wait(50);      //3画目ペンを下ろす。
   OnRev(OUT_A+OUT_C);Wait(100);              
   OnRev(OUT_B);Wait(50);      //ペンを上げる。
   
   OnFwd(OUT_A+OUT_C);Wait(100);                  
   OnFwd(OUT_A);OnRev(OUT_C);Wait(250);
   OnRev(OUT_A+OUT_C);Wait(10);
   OnFwd(OUT_B);Wait(50);       //4画目ペンを下ろす。   
   OnFwd(OUT_A+OUT_C);Wait(120);     
   OnRev(OUT_B);Wait(50);      //ペンを上げる。
   
   OnFwd(OUT_A);OnRev(OUT_C);Wait(250);
   OnFwd(OUT_A+OUT_C);Wait(50);                  
   OnFwd(OUT_A);OnRev(OUT_C);Wait(230);
   OnFwd(OUT_A+OUT_C);Wait(100);       
   OnFwd(OUT_B);Wait(50);       //5画目ペンを下ろす。   
   OnRev(OUT_A+OUT_C);Wait(100);     
   OnRev(OUT_B);Wait(50);      //ペンを上げる。
   
   Float(OUT_A+OUT_C+OUT_B);   //完成。           
   }	

世田谷の『谷』

task main()
{
OnFwd(OUT_B);  Wait(10);     //一画目下げる
OnFwd(OUT_A+OUT_C);   Wait(45);
OnRev(OUT_B);  Wait(10);     //上げる
OnRev(OUT_A+OUT_C);  Wait(45);
OnFwd(OUT_A); OnRev(OUT_C);  Wait(100);

OnRev(OUT_A+OUT_C);  Wait(25);
OnFwd(OUT_A); OnRev(OUT_C); Wait(100);
OnFwd(OUT_B);  Wait(10);     //二画目下げる
OnRev(OUT_A+OUT_C);  Wait(45);
OnRev(OUT_B);  Wait(10);     //上げる
OnRev(OUT_A);  OnFwd(OUT_C);  Wait(40);

OnFwd(OUT_A+OUT_C);  Wait(55);
OnRev(OUT_A);  OnFwd(OUT_C);  Wait(160);
OnFwd(OUT_B);  Wait(10);    //三画目下げる
OnFwd(OUT_A+OUT_C);  Wait(80);
OnRev(OUT_B);  Wait(10);    //上げる
OnRev(OUT_A+OUT_C);  Wait(90);
OnRev(OUT_A);  OnFwd(OUT_C);  Wait(250);

OnRev(OUT_A+OUT_C);  Wait(15);
OnFwd(OUT_B);  Wait(10);   //四画目下げる
OnFwd(OUT_A+OUT_C);  Wait(80);
OnRev(OUT_B);  Wait(10);   //上げる
OnRev(OUT_A);  OnFwd(OUT_C);  Wait(70);

OnRev(OUT_A+OUT_C);  Wait(90);
OnFwd(OUT_A);  OnRev(OUT_C);  Wait(190);
OnFwd(OUT_B);  Wait(10);   //五画目下げる
OnFwd(OUT_A+OUT_C);  Wait(60);
OnRev(OUT_B);  Wait(10);   //上げる
OnRev(OUT_A+OUT_C);  Wait(60);
OnRev(OUT_A);  OnFwd(OUT_C);  Wait(230);

OnRev(OUT_A+OUT_C);  Wait(15);
OnFwd(OUT_B);  Wait(10);   //六画目下げる
OnFwd(OUT_A+OUT_C);  Wait(60);
OnRev(OUT_B);  Wait(10);   //上げる
OnRev(OUT_A+OUT_C);  Wait(10);
OnFwd(OUT_A);  OnRev(OUT_C);  Wait(245);
OnFwd(OUT_A+OUT_C);  Wait(5);
OnFwd(OUT_B);  Wait(10);   //下げる
OnFwd(OUT_A+OUT_C);  Wait(55);

OnRev(OUT_B);  Wait(10);   //上げる
OnRev(OUT_A+OUT_C);  Wait(5);
OnFwd(OUT_A);  OnRev(OUT_C);  Wait(245);

OnFwd(OUT_A+OUT_C);  Wait(45);
OnFwd(OUT_B);  Wait(10);   //七画目下げる
OnRev(OUT_A+OUT_C);  Wait(60);
OnRev(OUT_B);  Wait(10);   //上げる

Float(OUT_A+OUT_B+OUT_C);   //完成
}

 

苦労した点

ロボット製作について

 回転時にペンがずれるので、そのためのロボット改造が大変でした。

 特にギヤの大きさや噛み合わせ方が少しでも違うと、回転数がずれたりしてペンの上げ下げがぎこちなくなってしまうので、ペンを持つ部分をギヤで挟み込みました。

ギヤの部分

 ところが、ギヤの数を間違えたりすると両側のギヤがお互いに逆回転してしまったりと、とても頭を使う作業でした。

 また、モーターや黄色い本体の重みでバランスを崩してしまい、部品が取れてしまうことがあったので、そのための補強にも苦労しました。

プログラミングについて

 ロボットの向きを考えて、左右の転回を決めなければならないので想像力を働かせて書くのが困難でした。

 また、ロボットを90度に回転させる時、今まで作ってきたデータを使おうとしたが上手くいかない上に、モーターの調子にも影響されるので、そのための微調整に大変苦労しました。

工夫した点

ロボット製作について

回転時にペンがずれたこと

 ペンをロボットの後方に設置していましたが、方向転換するたびにペンの位置がずれてしまいました。それをペンの位置をロボットの中心に持っていくことで解消しました。

ペンの補正

 ペンの上げ下げを安定させるために、ペンを持つ部分を両側からギヤで挟み込むことにしました。また、ギヤとギヤの間を複数のギヤを使ってモーターの力を伝えました。

 ロボットの振動やペンの上げ下げによってペンを持つ部分が中心からずれてしまうことがありました。それを余っているブロックを使ってフォローすることで解消しました。 

ロボットの補強

 ペンを中心に持ってくるために、黄色い本体を片側に寄せることにしました。

 しかし、そのためにロボットのバランスが悪くなりました。さらにはロボットの横幅を広げることになり、ロボット自体の強度が落ちてしまいました。まず、ロボットのキャタピラの周りから、一つのブロックを多くのブロックとつなげることで補強しました。

 また、モーターを片方に二つ置くことで、上手くバランスを取れるようにしました。 ペンを持てない時←本体(空洞の部分に下の写真の部品を入れます。) ペンを持つ部分←ペンを持つ部分 合体後←完成。これでペンが中心からずれるのを防ぐことができた。

プログラミングについて

 まずはノートにプログラミングやロボットの軌跡を書いてから、パソコンに打ち込みました。こうすることによって頭の中が整理でき、角度などを微調整するときもどこを直せばいいかよくわかりました。

感想

 紙に書いてプログラミングした段階ではできていたことが、実際にパソコンに打ち込みロボットを動かしてみると、ロボットの調子や書かせる場所によってかなり誤差が出てしまい、困った。また、90度回転をさせる時も箇所によって数値をかえなければならなかったので、微調整に苦労した。

 しかし、『世』『田』『谷』の文字ができた(ぎこちない文字ではあるが)時は達成感が得られた。この課題で学んだことを活かして、次の課題に取り組め得たらよいと思う。

コメントをどうぞ



添付ファイル: fileDSC00103.JPG 304件 [詳細] fileDSC00101.JPG 282件 [詳細] fileDSC00104.JPG 259件 [詳細] fileDSC00107.JPG 272件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-05-24 (木) 19:29:46