[[2019a/Member]] 目次 #contents *課題について [#y2bb50b9] 詳しくはリンクを参照[[2019a/Mission1]] *ロボットについて [#ua5eff2d] -僕たちは、今回の課題の書道ロボットを印刷機のような動きをするロボットに仕上げた。このロボットを組み立てる際に最も工夫した点は、筆を動かすロボットとそのロボットを載せて動く台車ロボットに分離した所だ。分離させることによってタイヤの向きを横と縦の動きを同時に行うことができるために斜めの移動がとても楽になった。「信州」という文字は人偏に斜めの線があるために考案した。また、歯車に噛み合うようなレールがなかったので細長いパーツを使い、その上をロボットが走るようにした。その際、その道からロボットが落ちないようにレゴパーツを使って方向を固定した。それによってまっすぐに動かすことができた。 #ref(./ロボットの写真1.jpg) ↑ レールの上にロボットを置き、後方をレゴパーツで固定してある -また、筆ペンを上下する際に、モーター1つで上下運動ができるようにパーツを考えて組み立てた。そのおかげで、紙にペンを近づける際により精密に高さを調節することができた。更に、タイヤの動力をモーター1つで全体に伝えるために、棒をたくさん繋いで回るようにした。よって、モーターの動力が偏ることがなく、台車ロボが傾いていかなかった。 #ref(./ロボットの写真2.jpg) -完成した「信州」がこちら ↓ #ref(./信州.jpg) -少し危なかったが、読めるようにはなったので良かった思う。 *プログラムについて [#u74f8a18] -以下のプログラムでは、#defineやvoidなどを使って動きを定義した。penUP、penDWNはそれぞれペンを上下させる動作に、dlLD、dlRDはペンの斜め移動に、goright、goleft、goup、godownは台車ロボットが前後左右に移動する動作に対応している。またサブルーチンのvoidにlongを取り入れることによってintよりもより大きな数を扱えるようにした。longの関数をtにしてWaitの中に入れることによってその関数の時間だけ動作するようにしたため、同じ定義の中で様々な動きができるようになり、微調整が楽になった。 #define penUP OnRev(OUT_A,40);Wait(1000); #define penDWN OnFwd(OUT_A,40);Wait(1000); void dlLD(long t) { OnFwd(OUT_B,16); OnFwd(OUT_C,20); Wait(t); Off(OUT_BC); } void dlRD(long t) { OnRev(OUT_B,20); OnFwd(OUT_C,20); Wait(t); Off(OUT_BC); } void godown(long t) { OnFwd(OUT_C,20); Wait(t); Off(OUT_C); } void goup(long t) { OnRev(OUT_C,20); Wait(t); Off(OUT_C); } void goright(long t) { OnRev(OUT_B,20); Wait(t); Off(OUT_B); } void goleft(long t) { OnFwd(OUT_B,20); Wait(t); Off(OUT_B); } task main() { goleft(1379); penDWN; dlLD(638);//1to2 penUP; godown(2340);//2to3 penDWN; godown(319);//3to4 penUP; godown(638);//4to5 goright(310);//4to5 penDWN; goup(1596);//5to6 penUP; goup(638);//6to7 penDWN; goup(1489);//7to8 penUP; goright(310);//8to9 godown(2965);//8to9 penDWN; godown(319);//9to10 penUP; godown(638);//10to11 goright(310);//10to11 penDWN; goup(1596);//11to12 penUP; goright(510);//12to13 godown(638);//12to13 penDWN; godown(319);//13to14 penUP; godown(738);//14to15 goright(310);//14to15 penDWN; goup(1596);//15to16 penUP; goup(638);//16to17 penDWN; goup(800);//17to18 goleft(941);//18to19 godown(800);//19to20 goright(941);//20to21 penUP; goup(864);//21to22 penDWN; goleft(941);//22to23 penUP; goup(419);//23to24 penDWN; goright(941);//24to25 penUP; goup(419);//25to26 penDWN; goleft(941);//26to27 penUP; goup(419);//27to28 goright(419);//27to28 penDWN; dlRD(212);//28to29 penUP; Off(OUT_ABC); } -このプログラムを考えるときに僕たちは、どれだけ簡単に書けるかを気にしながらやった。最初に、#defineを用いてペンの上げ下げを定義した。ロボットの説明で示したように、モーターを1つしか使っていない分内容が書きやすかった。コマンドの名前をわかりやすくしておくことで間違えづらくもした。またvoidを各所に用いることでプログラムをより簡略化した。以上のことから、プログラミングの時間がそこまでかからなかったと思うし、訂正するのも簡単だった。 -動きを考える際、無駄な動きがあるとプログラムにも無駄が生じると思い、書き順を考えてなるべく同じ方向に動くようにした。更に、動く長さを等しくできるところは同じにした方がいいと思い、揃えらえれるところは揃えた。また、縦の動きは縦の動き、横の動きは横の動きで揃えられるところを揃えた。番号を各所に振ることによって後に訂正しやすくもした。よって、プログラムをより見やすくすることができた。 -動きを考える際、無駄な動きがあるとプログラムにも無駄が生じると思い、書き順を考えてなるべく同じ方向に動くようにした。またプログラムに番号を振っておくことで訂正しやすくした。更に、動く長さを等しくできるところは同じにした方がいいと思い、Waitの時間によって揃えらえれるところは揃えた。そして、縦の動きは縦の動き、横の動きは横の動きで揃えられるところを揃えた。よって、プログラムをより見やすくすることができた。 #ref(./書き順.jpg) ↑ 書き順などを示したもの