2019a/Member

目次

課題について

詳しくはリンクを参照2019a/Mission1

ロボットについて

  • 僕たちは、今回の課題の書道ロボットを印刷機のような動きをするロボットに仕上げた。このロボットを組み立てる際に最も工夫した点は、筆を動かすロボットとそのロボットを載せて動く台車ロボットに分離した所だ。分離させることによってタイヤの向きを横と縦の動きを同時に行うことができるために斜めの移動がとても楽になった。「信州」という文字は人偏に斜めの線があるために考案した。また、歯車に噛み合うようなレールがなかったので細長いパーツを使い、その上をロボットが走るようにした。その際、その道からロボットが落ちないようにレゴパーツを使って方向を固定した。それによってまっすぐに動かすことができた。
ロボットの写真1.jpg

       ↑ レールの上にロボットを置き、後方をレゴパーツで固定してある

  • また、筆ペンを上下する際に、モーター1つで上下運動ができるようにパーツを考えて組み立てた。そのおかげで、紙にペンを近づける際により精密に高さを調節することができた。更に、タイヤの動力をモーター1つで全体に伝えるために、棒をたくさん繋いで回るようにした。よって、モーターの動力が偏ることがなく、台車ロボが傾いていかなかった。
ロボットの写真2.jpg
  • 完成した「信州」がこちら ↓
信州.jpg
  • 少し危なかったが、読めるようにはなったので良かった思う。

プログラムについて

  • 以下のプログラムでは、#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の時間によって揃えらえれるところは揃えた。そして、縦の動きは縦の動き、横の動きは横の動きで揃えられるところを揃えた。よって、プログラムをより見やすくすることができた。
書き順.jpg

             ↑ 書き順などを示したもの


添付ファイル: file書き順.jpg 4件 [詳細] file信州.jpg 4件 [詳細] fileロボットの写真2.jpg 6件 [詳細] fileロボットの写真1.jpg 5件 [詳細] fileunnamed.jpg 2件 [詳細] fileunnamed (2).jpg 2件 [詳細] fileunnamed (1).jpg 2件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-07-10 (水) 19:17:21 (44d)