[[2009a]] *目次 [#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輪だが…)。 ~前輪のダミーは作者の追求を貫いたが故。弐号機も同様。 **足回り [#o6ae714e] ~''「前輪」''(旋回性能が飛躍的に伸びた) #ref(前輪.jpg) ~''「後輪」''&br;&size(18){Before}; #ref(後輪1.jpg) &size(18){After}; #ref(後輪2.jpg) *この改善により旋回性が向上 **ペンとその取り付け [#vcd11d3f] #ref(pen.jpg) ~ *黒のブロックにストッパーを付けたことによりペンの下げ過ぎ、上げ過ぎを防ぐ。 **工夫 [#q13ec8a2] ~後輪を二つ前輪を一つの3輪にすることにより細かい動きを可能する。 *似顔絵 [#o7a3a983] **完成予定図と描く過程 [#ac09b57e] ***Hauntの完成図 [#z565743e] #ref(2009a/A7/課題1右/顔完成図.jpg,50%) ***Haunt描く過程 [#jd1b8d9c] #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)//t秒間前進 { OnRev(FW); Wait(t); Off(FW);} void go_back(int t)//t秒間後退 { OnFwd(FW); Wait(t); Off(FW);} void turn_l(int t)//t秒間左折 { OnRev(FC); OnFwd(FA); Wait(t); Off(FW);} void turn_r(int t)//t秒間右折 { OnRev(FA); OnFwd(FC); Wait(t); Off(FW);} void turn_rb(int t)//t秒間右後退 { OnFwd(FA); OnRev(FC); Wait(t); Off(FW);} 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); //髪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); //微妙な曲線の輪郭7 Off(FA); Wait(180); //輪郭の曲線7 Off(FC); 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); 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(); //書き終わり } ***土佐犬のプログラム [#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(); 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(); OnFwd(FC); Wait(190); Off(FC); OnFwd(FA); Wait(30); Off(FA); OnFwd(FW); Wait(40); Off(FW);//軌道修正 鼻から輪郭に移る arm_down(); go_st(130); turn_l(380);//輪郭 arm_up(); go_st(10); turn_l(220); go_back(140);//軌道修正 輪郭から髪の毛に移る arm_down(); turn_r(40); turn_l(40); turn_r(40); turn_l(40); turn_r(40); turn_l(55);//髪の毛 arm_up(); turn_l(175);//軌道修正 髪の毛から口に移る arm_down(); turn_l(70);//口 arm_up();//完成 } **完成作品 [#s224b73b] ***Hauntの作品 [#j4abed2e] #ref(2009a/A7/課題1右/hauntkansei522.png,95%) ***とさ犬の作品 [#pd7793a3] #ref(土佐犬課題1.jpg) ~輪郭をもっと角張った感じにしたかったが、良くできなかった。 ~眼鏡は結構気に入っている。 *まとめ [#x9f3b023] ***Haunt [#t3ba1a0d] 今回は、最初ということもあってやる気満々で臨むも、幾多の困難と挫折を味わった。しかし、当初の予定を大幅に遅れながらも仲間とともに夜を徹しながらの作業でなんとかなった。次回は今回の反省をしっかり洗いだし、もっとゆとりをもって作業したい。 ***とさ犬 [#bff20334] プログラムが全く分からなくて最初はとても戸惑った。 一応完成までいけてほっとしている。 理解していないところが多くペアには本当に迷惑をかけてしまった。本当に申し訳ない。感謝しています。最後の方ではやり方が分かってきて結構楽しめたが、やはり大変だった。この作業と通して学んだことは計り知れないだろう。 *コメント [#ne0ff67a] コメントをどうぞ - クリスティーナのリアウィング(?)と説明はとても良いです。似顔絵の工夫に関する記述があるのも素晴らしい。プログラムに関して、Hauntさんのプログラムは、サブルーチンと関数を適切に使用していると思います。ぜひ土佐犬さんと知識の共有を!両名とも、もっとプログラムの説明が欲しいです。 -- [[こさか]] &new{2009-05-21 (木) 22:46:13}; #comment CENTER:本日の訪問者&counter(today); CENTER:昨日の訪問者&counter(yesterday); CENTER:今日までの訪問者&counter(all);