[[2006a/C2/練習page]] [[ロボティクス入門ゼミ]] *課題 [#t8b8939d] **水を書くロボットを作る [#t5cc8db8] まずロボットの構造を佐藤君(相方)と一緒に考えました。話し合った結果、ロボがペンを持ちながら動くものではなく、ロボは動かないで、ペンを上下左右に動かすロボを作ることに決まりました。しかしモーター3個でペンの上げ下げと上下左右に動かすロボの構造を考えること、横移動は車輪でロボごと動かすことにしました。その結果なんとか水を書くロボが完成することができました。そのロボの名前は、ジェット・田中!!です。(注:今、決めたので相方の許可をとってません)ジェット・田中の利点は、小さい字を書けることと、早く書けることです。逆に弱点は、大きい字を書けないことと、耐性がないことです。 **水を書くロボットのプログラム [#gdc276ad] task main() { while(1){ pen_down(); wt(); Retreat(); wt(); hane(); wt(); pen_up(); wt(); move_left(); wt(); pen_down(); wt(); left(); wt(); diagonal_left(); wt(); pen_up(); wt(); move_light(); wtl(); pen_down(); wt(); light(); wt(); diagonal_light(); wt(); pen_up(); wt(); neta(); } } void wt(void){ //20msの待ち時間 Wait(20); } void wtl(void){ //50msの待ち時間 Wait(50); } void pen_up(void){ //ペンを持ち上げる(紙から離す) OnRev(OUT_C); Wait(50); Off(OUT_C); } void pen_down(void){ //ペンを下げる(紙につける) OnFwd(OUT_C); Wait(50); Off(OUT_C); } void Retreat(void){ //アームを引く OnFwd(OUT_B); Wait(70); Off(OUT_B); } void hane(void){ //刎ねる OnFwd(OUT_A); OnRev(OUT_B); Wait(10); Off(OUT_A+OUT_B); } void move_left(void){ //二画目の開始点へ移動 OnFwd(OUT_A); OnRev(OUT_B); Wait(13); Off(OUT_A); Wait(20); Off(OUT_B); } void left(void){ //二画目をかく OnRev(OUT_A); Wait(20); Off(OUT_A); } void diagonal_left(void){ //二画目の斜め OnFwd(OUT_A+OUT_B); Wait(30); Off(OUT_A+OUT_B); } void move_light(void){ //三画目の開始点へ移動 OnRev(OUT_A+OUT_B); Wait(30); Off(OUT_B); Wait(23); Off(OUT_A); } void light(void){ //三画目を書く OnFwd(OUT_A); Wait(20); Off(OUT_A); } void diagonal_light(void){ //三画目の斜め OnRev(OUT_A); OnFwd(OUT_B); Wait(30); Off(OUT_A+OUT_B); } void neta(void){ //次の開始点へ(オマケ) OnRev(OUT_A+OUT_B); Wait(60); Off(OUT_A+OUT_B); } 水を書くプログラムは相方がやってくれました。プログラムの簡単な解説は、水を書くのに必要な数値をそれぞれのサブルーチン(void)から呼び出し、それをwhileでくりかえしています。 このプログラムのおかげでジェット・田中が"水"を書くことができるようになりました。めでたし、めでたし。