2015b/Member

課題

書道ロボットの作成

 書道ロボットを作成し、七画以上の文字を書く。

  注意点

  • マクロや関数、サブルーチンなどを使い、main関数がなるべく単純になるようにプログラムを作ること。
  • 定数名やマクロなどは分かりやすい名前を用いること。
  • 余裕をもってA4の紙の中に収まる大きさにすること。読める範囲ならばいくら小さくてもよい。
  • ペン以外はキットの部品を使うこと。
  • 輪ゴムは切れやすく高価なので慎重に扱い、張力がかかりすぎないようにすること。

 今回は 「佑」 という字を書くことを目標とする。

ペア:A.T.9「樹」

ロボット

これが私たちが作成したロボットである。

ロボット

仕組み

それぞれ3つのモーターを使い、x軸,y軸,z軸の三方向に独立して移動するように作られている。それぞれの移動について以下に示す。

x軸

タイヤを使い本体ごと移動させる。

x動作

y軸

モーターは本体に固定し、アームを使い前後にペンを移動させる。

y動作
y動作
y動作

z軸

常にペンと共に移動し、必要に応じて上げ下げする。

z軸動作
z軸動作
z軸

作品

ほぼ書き順通りである。三画目と四画目を文字のバランスをとるため逆にした。

辺とつくりのバランスがよくとれたと思う。

作品

プログラム

マクロ

メインタスクを簡単にするため、このように定義した。

xupx軸正の方向に移動xdownx軸負の方向に移動
yupy軸正の方向に移動ydowny軸負の方向に移動
zupz軸正の方向に移動zdownz軸負の方向に移動
nnm斜めの方向に移動
#define xup(t,p) OnFwd(OUT_A,p);Wait(t);Off(OUT_A);
#define xdown(t,p) OnFwd(OUT_A,-p);Wait(t);Off(OUT_A);

#define yup(t,p) OnFwd(OUT_B,p);Wait(t);Off(OUT_B);
#define ydown(t,p) OnFwd(OUT_B,-p);Wait(t);Off(OUT_B);

#define zup RotateMotor(OUT_C,10,-13);
#define zdown RotateMotor(OUT_C,10,13);

#define nnm(t) OnFwd(OUT_A,55);OnFwd(OUT_B,20);Wait(t);Off(OUT_AB);

モーターAがx軸、モーターBがy軸、モーターCがz軸を担当している。

軸に関しては以下の図で定義する。

座標軸

タスク

task main ()
{
    zdown;             //一画目
    nnm(600);
    zup;

    xdown(450,55);      //一二移動
    ydown(270,20);
    Wait(500);

    zdown;              //二画目
    yup(430,20);
    zup;

    ydown(400,30);       //二三移動
    xdown(300,55);
    Wait(500);

    zdown;                //三画目
    xdown(1000,55);
    zup;

    ydown(150,30);        //三四移動
    xup(380,60);
    Wait(500);

    zdown;                //四画目
    nnm(630);
    zup;

    xdown(400,50);          //四五移動
    ydown(95,30);
    Wait(500);

    zdown;                 //五画目
    yup(190,30);
    zup;

    ydown(190,30);         //五六移動
    Wait(500);

    zdown;                //六画目
    xdown(800,55);
    yup(190,30);
    zup;

    xup(800,55);           //六七移動
    Wait(500);

    zdown;                 //七画目
    xdown(800,55);
    zup;



}

コメント文の「○□移動」とは○画目を終え、□画目の書き始めまでの移動である。

最後に

工夫点

ロボット

  • 重心の調節

  ロボットを作る上で意識したものの一つが重心である。重心がどちらかに偏っていると当然移動がまっすぐ正確に行うことができなくなる。タイヤ(大)やブロックなどを使い調整した。

  • 歯車

  x軸をより正確に動かすため、モーターとタイヤをつなぐのに二種類の歯車を使用した。それによりモーターの回転数の1/3がタイヤに伝わり、3倍の力がかかるようにでき、細かな移動ができるようになった。やはり字を書く上で細かい動きは必要不可欠なものとなるのでこのような仕組みはとても大切なものとなる。

プログラム

  • z軸の細かな動き

  z軸の働きはペンを傾けて浮かすことである。しかしその傾けるという動きにより、y軸移動に支障をきたしてしまう。そこで少しでもその被害を抑えるため、z軸の移動は必要最低限の細かな動きが必須となった。授業で習ったOnFwdでは細かな動きを指示するのが難しい。そこで RotateMotor を使った。OnFwdは時間で制御するのに対してRotateMotorは 角度 で制御できる。これで細かな動きも簡単に指示することができた。

     RotateMotor(OUT_C,スピード,角度)

  • マクロ

  プログラムを簡単に、かつ理解しやすく、そして操作しやすくするために大きく7つの操作のみにした。x,y,zのそれぞれの上下(up,down)、そしてななめ(nnm)である。プログラムはこの7つのみで構成されているため作るのは容易であった。

  • z軸の移動

  初めz軸も本体から操作する予定だった。しかし移動するy軸を考慮に入れると、任意の位置でのz軸移動が困難であることが分かった。z軸のモーターも一緒にy軸と移動するのは重過ぎると考えたためそこで作業が滞った。しかしその課題もy軸のレール強化したことにより解決することができた。

  • ななめ

  x軸,y軸が独立して動くため、ななめの線を書くためには同時に二つの軸を動かさなくてはいけない。ななめの線を書くといっても45°の線を書くのか60°の線を書くのかでプログラムは変わってくる。思い通りの角度で書くために何回も微調整を繰り返してやっと書くことができた。

欠点・改善点

私たちのロボットには大きな欠点がある。一つは始める位置である。初めの位置を細かくセットしないと途中で止まったり、変な力がかかり文字のバランスが崩れたりしてしまう。その原因としてそれぞれの軸の可動域が狭いことがあげられる。特にy軸の可動域には悩まされた。改善策としてアームを長くすることが考えられる。しかし部品の問題がありそれは実現できなかった。

そしてもう一つ、コードの問題である。今回作成したロボットはコントローラは本体に乗っていない。そのため本体とコントローラの距離が随時変わることになる。当然コードは伸び縮みし、余計な力を可動部にかけてしまい字のバランスが崩れることがある。この改善策としてはやはり本体に乗せるのが一番よいと考えられるが、場所、重さの関係で実現できなかった。

そして主にこれらが原因として、一回一回の移動の力と速さを変えなければならなくなってしまった。

感想

初めてこのような課題に取り組んだが、考えてた以上にいろいろな選択肢があり大変だった。そしてロボットを作った後もプログラムで苦戦をした。理論上うまくいっても多くの壁があった。次からの課題もそのような課題を乗り越えて頑張りたい。


添付ファイル: filezpic2.jpg 99件 [詳細] filezpic.jpg 113件 [詳細] fileypic2.jpg 107件 [詳細] fileypic.jpg 101件 [詳細] filezahyouziku.jpg 96件 [詳細] filez.jpg 97件 [詳細] filey.jpg 107件 [詳細] filex.jpg 114件 [詳細] fileview.jpg 104件 [詳細] filemozi.jpg 100件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-02-14 (日) 23:42:16