[[2006b/A6/L Room/サエグサのページ]]
*課題1 [#md1d9fe5]
**書道ロボット [#d08a2d93]
-何の文字をかこうとしたかわかりますか?
#ref(書いた文字)
[[答え>2006b/A6/L Room/サエグサのページ/サエグサ課題1/答え]] 

-ロボットの特徴 
 
#ref(2006b/A6/L Room/cimg0142_Medium.jpg,50%,書道型つぎはぎ君壱號)

 「足」可動式だったものを、タイヤに変更しより安定性を持たせました。さらに、ペンの上げ下げにギアとゴム動力を利用することによって、驚くほど機敏な筆運び(上げたり下げたりするだけですが)が可能になりました。

#ref(2006b/A6/L Room/つぎはぎ工房/またたび課題1/cimg0143_Medium.jpg,50%,書道型つぎはぎ君壱號 細部)

 この棒が、モーターで回転させられることによって、(この画像では左側にある)ギアが動き、黄色いワームが上下してペンを動かします。単純ですが、とても効率的な動きをしてくれました。
-苦労した点

 一番↑ の画像をみれば分かるように、このロボットはペンを(正面から見ると)左側に持っています。そのため、線を曲げたいときは、線の書き始めが、どこになるかをいちいち計算してプログラムしなければなりませんでした。そのため、画数の多い文字になればなるほど、プログラムが長く複雑になってしまいました。 
-短所と長所のまとめ

 長所は、ともかく動きが機敏なこと。安定した直線が引けることです・

 短所は、機敏すぎること。線の書き始めを設定するのが難し過ぎる事、そのためプログラムが長すぎる事です。

--短所改善のために・・・
---実行したこと

 ともかく、サブルーチンやディファイン(define)を用いて、できる限りプログラムが短くなるように努力しました。

-プログラム
 
 #define pen_down Off(OUT_A+OUT_C); OnRev(OUT_B); Wait(20);        
 #define pen_up  Off(OUT_A+OUT_C); OnFwd(OUT_B); Wait(20)
 #define LFwd  OnFwd(OUT_A)
 #define  LRev OnRev(OUT_A)
 #define LOff Off(OUT_A)
 #define  RFwd OnFwd(OUT_C)
 #define RRev OnRev(OUT_C)
 #define ROff Off(OUT_C)
 
     task main()
     { 
     // 1
     pen_down;
     LFwd; RFwd;Wait(100);
     pen_up;
    
     LFwd; RFwd;Wait(30);
     LRev;ROff;Wait(195);/*turn1*/
     LFwd; RFwd;Wait(20);
     
     // 2
     pen_down;
     LRev; RRev;Wait(100);
     pen_up;
     
     LFwd; RFwd;Wait(90);
     LRev; ROff;Wait(200);
     LOff;LFwd; RFwd;Wait(40);
     
     // 3
     pen_down;
     LRev; RRev;Wait(150);
     pen_up;
     
     LFwd; RFwd;Wait(215);
     RRev;Wait(45);/*turn3*/
     LRev; RRev;Wait(50);
 
      //4
      pen_down;
      LRev; RRev; Wait(25);
      pen_up;
     
     LFwd; RFwd; Wait(75);
     RFwd; Wait(45);
     LRev; Wait(45);
     LRev; RRev; Wait(200);/*back*/
     RFwd;Wait(20);
     LRev;Wait(20);/*turn4*/
     LRev;RRev;Wait(10);
     
     //5
     pen_down;
     LFwd; RFwd;Wait(35);
     pen_up;
     
     LFwd; RFwd; Wait(80);
     RRev;Wait(50);
     LFwd;RFwd;Wait(0);
 
     //6
     pen_down;
     LRev; RRev;Wait(100);
     LOff; ROff;
     pen_up;
    
     LFwd; RFwd;Wait(50);
     LRev; RFwd; Wait(30);
     LFwd;RFwd;Wait(50);
     LFwd;RRev;Wait(20);
    
     //7
     pen_down;
     LRev; RRev;Wait(80);
     pen_up;
      
     LFwd; RFwd; Wait(100); 
     LFwd; RRev; Wait(100);
     
     //8
     pen_down;
     LRev; RRev; Wait(120);
     pen_up;
     
     Off(OUT_A+ OUT_B+OUT_C);
     }

長い、長過ぎる……。プログラムを組んでいるうちに、自分でも訳が分からなくなりそうでした。いちを、それを防ぐために「//*(このプログラムで実行されること)*//」などを後ろにつける等の工夫をしたのですが、効果のほどはイマイチ……。

-反省だらけの感想

 ギア回転の時間を、その場の直感で設定するのではなく、ある程度ルールを決めて設定するべきだったと思いました。文字を書くという事を意識し過ぎたために、分かりやすいプログラムを書くという基本的な事が出来なかったようです。文字を書いている最中にギアの停止を全く挟まなかった事も、書くたびに誤差が生まれる原因となってしまいました。一画書き終わるごとにギアを停止させるなどの工夫をするべきだったと反省しています。また、ロボット設計段階を振り返って、ペンをなるべくロボットの重心に近い位置に来るように設計しておけば、回転にするたびにペンの位置が大きくずれてしまう事を防げたのに、と思いました。今回の課題は、自分としてはあまり満足のいくものが作れませんでしたが、それだけに学んだ事も多かったと思います。この反省を、次回に活かして、今度こそ自分で納得のいくものを作りたいです。


*足跡 [#ea68e4c8]
**意見がある方は、こちらにお書き込みください [#haed9116]
-プログラム内の見ただけではわかりにくい箇所は、やはり今回のようにコメント文をちゃんと書いておきましょう。 -- [[松本(教員)]] &new{2006-12-01 (金) 09:07:01};

#comment

*リンク [#e768998a]
[[またたび>2006b/A6/L Room/つぎはぎ工房]]

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