[[2006a/C2/練習page]] [[ロボティクス入門ゼミ]] #contents *『水』を書くロボット [#t8b8939d] **製作概要[#t5cc8db8] -まず、ロボットの構造を二人で一緒に考えました。話し合った結果、ロボがペンを持ちながら動くものではなく、ロボは動かないで、ペンを上下左右に動かすロボを作ることに決まりました。しかしモーター3個でペンの上げ下げと上下左右に動かすロボの構造を考えると、横移動が難しくなったので横移動は車輪でロボごと動かすことにしました。その結果なんとか水を書くロボが完成することができました。 -ロボの名前は、&size(25){ジェット・田中!!};です。&br; &ref(2006a/C2/課題1左/proGRA/shuji_03.jpg,75%,ジェット田中!!(写真でないなぁ…)); -ジェット・田中の利点は、小さい字を書けることと、早く書けることです。逆に弱点は、大きい字を書けないことと、耐性がないことです。 **水プログラム概要 [#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でくりかえしています。 -wt()というサブルーチンがあるのは、このマシン自体が脆い構造をしていて、連続で動くと自壊してしまう恐れがあるため、待ち時間をもうけて連続で動かない用にしてみました。 -また、wtl()というのが一カ所だけ使われていますが、それはバグ修正時のなごりです。 -このプログラムのおかげでジェット・田中が"水"を書くことができるようになりました。めでたし、めでたし。 編集:ITO 加筆・訂正:SATO