A3の紙に相棒の似顔絵を書くロボットを作成せよ。
・ひとりにつき一つ以上のプログラムを作成すること。
・ペン以外はキットに含まれる部品を使うこと。
・キットに付属の高価な輪ゴムは切れやすいので切れないように十分注意すること。
・改良や調整をしやすくするため、ロボット本体だけでなく、プログラムについても可能な部分についてはサブルーチンや関数、マクロなどを使って部品に分けること。
・2輪駆動
・シンプルなつくり
・カッコよさの追求
以上の3本柱を軸に作者(Haunt)の好きなフォーミュラカーを参考に、壱号機を完成させた。作者はコンセプトの最後にある「カッコ良さ」を追求しすぎたために、後に苦しむこととなる。ちなみに、壱号機完成時に「クリスティーナ」と名付けられる。由来は作者もよくわからない。通りすがりの名無しさんが名付け親らしい…。
基本構造は同じであるが、プログラミングをするうえで、改造を施してきた。
・壱号機…前輪を固定していたため、うまく旋回が出来ず、すぐに改造された幻のマシーン。
・弐号機…前輪が自由に回転出来るようになり、滑らかに旋回が可能になる。しかし後輪が大きいために小回りが利かず、変更を余儀なくさせられる。作者にとって後輪の変更はカッコよさを追求する上で、マイナスポイントとなるため、最後まで変更を悩ませた。
・参号機…ついに決心して後輪のサイズを小さくする。小回りが利き、微妙な曲線も描けるようになる。最終的に納得のいく似顔絵を描くことにつながる。
それでは以下に各部位の構造と変遷を見ていこう。
壱号機 幻の如く写真すら残っていない…(汗)
弐号機
参号機
*4輪に見えるが実は3輪(厳密には4輪だが…)。
後輪を二つ前輪を一つの3輪にすることにより細かい動きを可能する。
前輪のダミーは作者の追求を貫いたが故。弐号機も同様。
「前輪」(旋回性能が飛躍的に伸びた)
「後輪」
Before
長所…スピードはかなり出る。
短所…タイヤが大きく、ギヤもかませずに取り付けたため細かい動きができない。
After
長所…微妙な動きが出来るようになり、スピードを落とすことができた。
短所…ギヤのかみ合わせが悪く、不安定になった。(取り付け位置の改善が出来なかった。)
*黒のブロックにストッパーを付けたことによりペンの下げ過ぎ、上げ過ぎを防ぐ。
上げ下げするだけの単純な機構にした。取り付け位置は真ん中にしたかったがうまくいかず、左はしになった。
・眼鏡と鼻を一発描きにすることにより無駄な動きをなくしたつもり。
〜基本操作〜 #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);}
*プログラム中の数字は 上図の描く過程の数字に対応
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(); //書き終わり }
いかにとさ犬に似せるかでこだわった結果、納得いくものとなった。
とくにあごの部分の曲線7番と曲線4番から7番、7番から10番への切り返しの部分は苦労した。
〜基本動作〜 #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();//完成 }
特徴はとらえてたつもりです。性別もわかる?はず。
輪郭をもっと角張った感じにしたかったが、良くできなかった。
眼鏡は結構気に入っている。
今回は、最初ということもあってやる気満々で臨むも、幾多の困難と挫折を味わった。しかし、当初の予定を大幅に遅れながらも仲間とともに夜を徹しながらの作業でなんとかなった。次回は今回の反省をしっかり洗いだし、もっとゆとりをもって作業したい。
反省点
・作業開始がおそかった。
・ひとつのコンセプトにこだわりすぎて作業が進まなかった。
・関数やサブルーチンを使い始めるのが遅かった。
・ペアのとさ犬とプログラミングの共有が出来ていなかった。(コメントで指摘されてから改善。)
・小回り出来るようにするために、タイヤの大きさばかり気にしていたが、ギヤ比を調整すればよかったということに気付かなかった。(次回への課題)
プログラムが全く分からなくて最初はとても戸惑った。 一応完成までいけてほっとしている。 理解していないところが多くペアには本当に迷惑をかけてしまった。本当に申し訳ない。感謝しています。最後の方ではやり方が分かってきて結構楽しめたが、やはり大変だった。この作業と通して学んだことは計り知れないだろう。
コメントをどうぞ