[[2009a]]

CENTER:#ref(クリスティーナ号.jpg)

*目次 [#o18a8d3e]
#contents
*課題 [#yd5cc038]
**課題1 お絵描きロボット [#t79c203a]
&size(18){''A3の紙に相棒の似顔絵を書くロボットを作成せよ。''};

~・ひとりにつき一つ以上のプログラムを作成すること。 
~・ペン以外はキットに含まれる部品を使うこと。 
~・キットに付属の高価な輪ゴムは切れやすいので切れないように十分注意すること。 
~・改良や調整をしやすくするため、ロボット本体だけでなく、プログラムについても可能な部分についてはサブルーチンや関数、マクロなどを使って部品に分けること。

*ロボット(クリスティーナ)の概略 [#q115b59b]
**コンセプト [#f355521d]
~&size(18){''・2輪駆動''};
~&size(18){''・シンプルなつくり''};
~&size(18){''・カッコよさの追求''};
~以上の3本柱を軸に作者(Haunt)の好きなフォーミュラカーを参考に、壱号機を完成させた。作者はコンセプトの最後にある「カッコ良さ」を追求しすぎたために、後に苦しむこととなる。ちなみに、壱号機完成時に「クリスティーナ」と名付けられる。由来は作者もよくわからない。通りすがりの名無しさんが名付け親らしい…。
**変遷 [#v65961aa]
基本構造は同じであるが、プログラミングをするうえで、改造を施してきた。
~・壱号機…前輪を固定していたため、うまく旋回が出来ず、すぐに改造された幻のマシーン。
~・弐号機…前輪が自由に回転出来るようになり、滑らかに旋回が可能になる。しかし後輪が大きいために小回りが利かず、変更を余儀なくさせられる。作者にとって後輪の変更はカッコよさを追求する上で、マイナスポイントとなるため、最後まで変更を悩ませた。
~・参号機…ついに決心して後輪のサイズを小さくする。小回りが利き、微妙な曲線も描けるようになる。最終的に納得のいく似顔絵を描くことにつながる。
~それでは以下に各部位の構造と変遷を見ていこう。
**本体 [#mc7e9e28]
~壱号機 幻の如く写真すら残っていない…(汗)
~弐号機
#ref(弐号機.jpg)
~参号機
#ref(参号機.jpg)
~*4輪に見えるが実は3輪(厳密には4輪だが…)。&br;後輪を二つ前輪を一つの3輪にすることにより細かい動きを可能する。
~前輪のダミーは作者の追求を貫いたが故。弐号機も同様。
**足回り [#o6ae714e]
~''「前輪」''(旋回性能が飛躍的に伸びた)
#ref(前輪.jpg)
~''「後輪」''&br;&size(18){Before};
&br;長所…スピードはかなり出る。&br;短所…タイヤが大きく、ギヤもかませずに取り付けたため細かい動きができない。
#ref(後輪1.jpg)
&size(18){After};
&br;長所…微妙な動きが出来るようになり、スピードを落とすことができた。&br;短所…ギヤのかみ合わせが悪く、不安定になった。(取り付け位置の改善が出来なかった。)
#ref(後輪2.jpg)
 *この改善により旋回性が向上
**ペンとその取り付け [#vcd11d3f]
#ref(pen.jpg)
**工夫 [#q13ec8a2]
~ *黒のブロックにストッパーを付けたことによりペンの下げ過ぎ、上げ過ぎを防ぐ。&br;上げ下げするだけの単純な機構にした。取り付け位置は真ん中にしたかったがうまくいかず、左はしになった。
*似顔絵 [#o7a3a983]
**完成予定図と描く過程 [#ac09b57e]
***Hauntの完成図 [#z565743e]
#ref(2009a/A7/課題1右/顔完成図.jpg,50%)
***Haunt描く過程 [#jd1b8d9c]
#ref(過程.jpg)
#ref(2009a/A7/課題1右/katei527.png,80%)
***とさ犬の完成図 [#i1bfe743]
#ref(とさ犬完成予定図.jpg)
***とさ犬のメガネの書き方 [#s367b6af]
#ref(メガネ2.jpg)
~・眼鏡と鼻を一発描きにすることにより無駄な動きをなくしたつもり。
**プログラム [#n39b4df7]
***Hauntのプログラム [#s3291415]
基本操作
 〜基本操作〜
 #define FW OUT_A+OUT_C
 #define FA OUT_A
 #define FB OUT_B
 #define FC OUT_C

 
 sub arm_down() //ペンを下げる
 { OnFwd(FB); Wait(15); Off(FB); }

 
 sub arm_up() //ペンを上げる 
 { OnRev(FB); Wait(15); Off(FB); }

 void go_st(int t)//前進
 void go_st(int t)//t秒間前進
 { OnRev(FW); Wait(t); Off(FW);}

 void go_back(int t)//後退
 void go_back(int t)//t秒間後退
 { OnFwd(FW); Wait(t); Off(FW);}

 void turn_l(int t)//左折
 void turn_l(int t)//t秒間左折
 { OnRev(FC); OnFwd(FA); Wait(t); Off(FW);}

 void turn_r(int t)//右折
 void turn_r(int t)//t秒間右折
 { OnRev(FA); OnFwd(FC); Wait(t); Off(FW);}

 void turn_rb(int t)//右後退
 void turn_rb(int t)//t秒間右後退
 { OnFwd(FA); OnRev(FC); Wait(t); Off(FW);}

 void turn_lb(int t)//左後退
 void turn_lb(int t)//t秒間左後退
 { OnFwd(FC); OnRev(FA); Wait(t); Off(FW);}

プログラム
#ref(2009a/A7/課題1右/katei527.png,50%)
*プログラム中の数字は
 上図の描く過程の数字に対応    
 task main()
 {
    arm_down();
    go_st(20);
    turn_l(130);
    arm_up();
    turn_l(200);
    go_back(150);
    turn_lb(50);
    turn_rb(10);
    arm_down();
    go_st(100);
    arm_up();
    go_st(72);
    turn_rb(50);
    go_back(60);
    arm_down();
    go_st(35);
    SetPower(FC,8);
    SetPower(FA,0);
    arm_down();              //書き始め
    go_st(20);        //髪1
    turn_l(130);             //髪2
    arm_up();                //書き終わり

    turn_l(200);             //左旋回
    go_back(150);            //後退3
    turn_lb(50);             //微調整
    turn_rb(10);             //微調整

    arm_down();              //書き始め
    go_st(100);              //輪郭4
    arm_up();                //書き終わり

    go_st(72);               //前進4’
    turn_rb(50);             //5
    go_back(60);             //5’

    arm_down();              //書き始め
    go_st(35);               //輪郭6
    SetPower(FC,8);          //モーターCの出力8
    SetPower(FA,0);          //マーたーAの出力0
    OnRev(FW);
    Wait(80);
    Wait(80);                //微妙な曲線の輪郭7
    Off(FA);
    Wait(180);
    Wait(180);               //輪郭の曲線7
    Off(FC);
    arm_up();
    go_st(100);
    SetPower(FA,8);
    turn_rb(120);
    go_back(80);
    arm_up();                //書き終わり

    go_st(100);              //8
    SetPower(FA,8);          //モーターAの出力8
    turn_rb(120);            //移動9
    go_back(80);             //移動9’
    OnRev(FA);
    Wait(42);
    Off(FA);
    Wait(42);                //微調整
    Off(FA);                 

    arm_down();              //書き始め
    OnRev(FA);               
    Wait(30);                //輪郭10
    OnRev(FC);               
    Wait(80);                //輪郭10
    Off(FW);                 
    OnRev(FC);               
    Wait(250);               //髪11
    go_back(30);             //髪12
    arm_up();                //書き終わり

    go_back(100);            //移動13
    OnRev(FC);               
    Wait(25);                //移動13
    go_st(50);               //移動14

    arm_down();              //書き始め
    go_st(30);               //鼻15
    OnRev(FC);               
    Wait(20);                //鼻15’
    arm_up();                //書き終わり

    Wait(30);                //移動16
    Off(FC);                 
    turn_l(10);              //移動16

    arm_down();              //書き始め
    turn_r(50);              //口17
    arm_up();                //書き終わり

    turn_r(65);              //移動17
    go_back(40);             //移動17

    arm_down();              //書き始め
    go_back(30);             //目18
    arm_up();                //書き終わり

    go_back(30);             //移動19

    arm_down();              //書き始め
    go_back(30);             //目20
    arm_up();                //書き終わり
 }

いかにとさ犬に似せるかでこだわった結果、納得いくものとなった。
&br;とくにあごの部分の曲線7番と曲線4番から7番、7番から10番への切り返しの部分は苦労した。
 
***土佐犬のプログラム [#m5a02a46]
 〜基本動作〜
 #define FW OUT_A+OUT_C
 #define FA OUT_A
 #define FB OUT_B
 #define FC OUT_C
 sub arm_down() //
 { OnFwd(FB); Wait(15); Off(FB); }
 sub arm_up() //
 { OnRev(FB); Wait(15); Off(FB); }
 void go_st(int t)//
 { OnRev(FW); Wait(t); Off(FW);}
 void go_back(int t)//
 { OnFwd(FW); Wait(t); Off(FW);}
 void turn_l(int t)//
 { OnRev(FC);  Wait(t); Off(FW);}
 void turn_r(int t)//
 { OnRev(FA); Wait(t); Off(FW);}



 task main()
 {
    arm_down();
    OnRev(FA);
    Wait(30);
    OnRev(FC);
    Wait(80);
    Off(FW);
    OnRev(FC);
    Wait(250);
    go_back(30);
    turn_l(20);
    go_back(50);
    turn_r(20);
    turn_l(1);//眼鏡 右側
    OnFwd(FB);
    Wait(5);
    Off(FB);//筆圧が薄くなったためペンを下ろす
    go_st(90);
    turn_l(20);
    go_back(50);
    turn_r(60);//眼鏡 左側
    go_back(20);//鼻
    arm_up();
    go_back(100);
    OnRev(FC);
    Wait(25);
    go_st(50);
    arm_down();
    go_st(30);
    OnRev(FC);
    Wait(20); 
    arm_up();
    Wait(30);
    OnFwd(FC);
    Wait(190);
    Off(FC);
    turn_l(10);
    OnFwd(FA);
    Wait(30);
    Off(FA);
    OnFwd(FW);
    Wait(40);
    Off(FW);//軌道修正 鼻から輪郭に移る
    arm_down();
    turn_r(50);
    go_st(130);
    turn_l(380);//輪郭
    arm_up();
    turn_r(65);
    go_back(40);
    go_st(10);
    turn_l(220);
    go_back(140);//軌道修正 輪郭から髪の毛に移る
    arm_down();
    go_back(30);
    turn_r(40);
    turn_l(40);
    turn_r(40);
    turn_l(40);
    turn_r(40);
    turn_l(55);//髪の毛
    arm_up();
    go_back(30);
    turn_l(175);//軌道修正 髪の毛から口に移る
    arm_down();
    go_back(30);
    arm_up();
    turn_l(70);//口
    arm_up();//完成
 }

***土佐犬のプログラム [#m5a02a46]
 task main ()
 {
    OnFwd(OUT_B);
    Wait(15);
    Off(OUT_B);//ペンを下げる
    OnRev(OUT_C);
    Wait(20);
    Off(OUT_C);//←
    OnFwd(OUT_A+OUT_C);
    Wait(50);
    Off(OUT_A+OUT_C);//↓
    OnRev(OUT_A);
    Wait(20);
    Off(OUT_A);//→
    OnRev(OUT_C);
    Wait(1);
    Off(OUT_C);//止め
    OnFwd(OUT_B); 
    Wait(2);
    Off(OUT_B);
    OnRev(OUT_A+OUT_C);
    Wait(90); 
    Off(OUT_A+OUT_C);//↑
    OnRev(OUT_C);
    Wait(20);
    Off(OUT_C);//← 
    OnFwd(OUT_A+OUT_C);
    Wait(50);
    Off(OUT_A+OUT_C);//↓ 
    OnRev(OUT_A);
    Wait(60);
    Off(OUT_A);//→ 
    OnFwd(OUT_A+OUT_C);
    Wait(20); 
    Off(OUT_A+OUT_C);//眼鏡と鼻
    OnRev(OUT_B);
    Wait(11);
    Off(OUT_B);//ペンを上げる
    OnFwd(OUT_C);
    Wait(180);
    OnFwd(OUT_A);
    Wait(80);
    Off(OUT_A+OUT_C);
    OnRev(OUT_C);
    Wait(35);
    Off(OUT_C);
    OnFwd(OUT_B);
    Wait(15);
    Off(OUT_B);//ペンを下げる
    OnRev(OUT_C+OUT_A);
    Wait(130);
    Off(OUT_A+OUT_C);
    OnRev(OUT_C);
    Wait(380);
    Off(OUT_C);
    OnRev(OUT_B);
    Wait(15);
    Off(OUT_B);//ペンを上げる
    OnRev(OUT_A+OUT_C);
    Wait(10);
    Off(OUT_A+OUT_C);
    OnRev(OUT_C);
    Wait(220);
    Off(OUT_C);
    OnFwd(OUT_A+OUT_C);
    Wait(140);
    Off(OUT_A+OUT_C);
    OnFwd(OUT_B);
    Wait(15);
    Off(OUT_B);
    OnRev(OUT_A); 
    Wait(40);
    Off(OUT_A);
    OnRev(OUT_C);
    Wait(40);
    Off(OUT_C);
    OnRev(OUT_A);
    Wait(40);
    Off(OUT_A);
    OnRev(OUT_C);
    Wait(40);
    Off(OUT_C);
    OnRev(OUT_A);
    Wait(40);
    Off(OUT_A);
    OnRev(OUT_C);
    Wait(50);
    Off(OUT_C);
    OnRev(OUT_B);
    Wait(12);
    Off(OUT_B);
    OnRev(OUT_C);
    Wait(170);
    Off(OUT_C);
    OnFwd(OUT_B);
    Wait(15);
    Off(OUT_B);
    OnRev(OUT_C);
    Wait(70);
    Off(OUT_C);
 }

**完成作品 [#s224b73b]
***Hauntの作品 [#j4abed2e]
#ref(2009a/A7/課題1右/CIMG0243.JPG,30%)
#ref(2009a/A7/課題1右/hauntkansei522.png,95%)
特徴はとらえてたつもりです。性別もわかる?はず。
***とさ犬の作品 [#pd7793a3]
#ref(土佐犬課題1.jpg)
~輪郭をもっと角張った感じにしたかったが、良くできなかった。
~眼鏡は結構気に入っている。
*まとめ [#x9f3b023]
***Haunt [#t3ba1a0d]
今回は、最初ということもあってやる気満々で臨むも、幾多の困難と挫折を味わった。しかし、当初の予定を大幅に遅れながらも仲間とともに夜を徹しながらの作業でなんとかなった。次回は今回の反省をしっかり洗いだし、もっとゆとりをもって作業したい。

反省点 
&br;・作業開始がおそかった。&br;・ひとつのコンセプトにこだわりすぎて作業が進まなかった。&br;・関数やサブルーチンを使い始めるのが遅かった。&br;・ペアのとさ犬とプログラミングの共有が出来ていなかった。(コメントで指摘されてから改善。)&br;・小回り出来るようにするために、タイヤの大きさばかり気にしていたが、ギヤ比を調整すればよかったということに気付かなかった。(次回への課題)
***とさ犬 [#bff20334]
プログラムが全く分からなくて最初はとても戸惑った。未だに短くする方法は良く分かってないが、一応完成までいけてほっとしている。最後の方ではやり方が分かってきて結構楽しかった。
プログラムが全く分からなくて最初はとても戸惑った。
一応完成までいけてほっとしている。
理解していないところが多くペアには本当に迷惑をかけてしまった。本当に申し訳ない。感謝しています。最後の方ではやり方が分かってきて結構楽しめたが、やはり大変だった。この作業と通して学んだことは計り知れないだろう。
*コメント [#ne0ff67a]
コメントをどうぞ
- クリスティーナのリアウィング(?)と説明はとても良いです。似顔絵の工夫に関する記述があるのも素晴らしい。プログラムに関して、Hauntさんのプログラムは、サブルーチンと関数を適切に使用していると思います。ぜひ土佐犬さんと知識の共有を!両名とも、もっとプログラムの説明が欲しいです。 -- [[こさか]] &new{2009-05-21 (木) 22:46:13};
- プログラムがわかりやすく、美しくなりました。マクロとサブルーチンの使用もできています。 -- [[こさか]] &new{2009-06-05 (金) 13:22:12};

#comment

CENTER:本日の訪問者&counter(today);
CENTER:昨日の訪問者&counter(yesterday);
CENTER:今日までの訪問者&counter(all);


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