目次
#contents



*課題について [#t84a4a10]

詳細はこちら[[2019a/Mission1]]

なお、書く文字は「松本」とした

*ロボットについて [#te2e297b]

ロボットの動きについて、まずx軸・y軸・z軸の3種類の軸を定義しそれぞれの方向に直進するようにモーターの向きを決定した。字を書く平面(紙上)をxy平面としたため、x軸方向の移動で横線を、y軸方向の移動で縦線を書き、z軸で紙上からペン先が離れるようになる。ロボットの構造としてはそれぞれの軸方向に動くための3つのモータを搭載し、部品もモータを中心とした3つの部分から成っていると考えることができる。


(写真)


**部品1について [#o83e8d44]

この部分は5輪であり(部品の多い前方に2輪、中部に1輪、NXT本体を支える後方に2輪)地面を走りy軸方向の移動を行う。

**.部品2について [#p6ec88db]

部品1上に設置されたレールを走りx方向への移動を行う

**部品3について [#rf38b0df]

部品2に固定され部品2と共に移動する部品であり,先端にペンを設置しこの部品が駆動することでペン先が紙上に移動するようになっている.

なお、z軸に対してペンを複数回移動させるとペン先が持ち上がらない不具合が発生することが判明した。これは重力とモータ部品が原因であると考えた.モータ部品に対しては元々の仕様なためプログラムをこの不具合に合わせて調整することで対応する(詳細は後述する).

*プログラムについて [#o83be828]

基本動作は

+「ペン先を紙上に下ろす」

+「ペン先を紙から離す」

+「x軸方向に移動する」

+「y軸方向に移動する」

この4つの動作である(以後これらの動作を順番に動作1から動作4と記述する).これらの動作を組み合わせて,あるいは同時に進行されることで字を書く.漢字は基本的に左→右,上→下へと線を引くのでこの2種類の線の引き方に線を引いた後、始点にロボットが戻る動作を含めたものとペンの上げ下げのプログラムを下記の通りそれぞれ一つの動作として定義した.

  #define up OnRev(OUT_A,30);Wait(50);Off(OUT_A); //ペンを上げる動作
  #define down OnFwd(OUT_A,30);Wait(30);Off(OUT_A); //ペンを下げる動作
  #define line_x(s) down;OnFwd(OUT_B,20);Wait(s);Off(OUT_B);up;OnRev(OUT_B,18);Wait(s);Off(OUT_B); //x軸正方向に線を引く動作
  #define line_y(t) down;OnFwd(OUT_C,20);Wait(t);Off(OUT_C);up;OnRev(OUT_C,18);Wait(t);Off(OUT_C); //y軸正方向に線を引く動作

なお,各線の長さについては駆動時間を変化させることで対応したためここではs,tを時間の変数として扱っている.

|動作名|プログラム名|内容|
|動作1|up|ペンを持ち上げる|
|動作2|down|ペンを下げる|
|動作3|line_x(s)|x軸正方向に1000×s秒線をかく|
|動作4|line_y(t)|y軸正方向に1000×t秒線をかく|

以降ここでは4つの動作を上表の通りに表記する.

また前述の通り動作1,2を複数回行うとさせると動作2に対して1の動作が大きくなることが判明した.このため駆動時間・モータの出力を一定のままで字を書くプログラムを組んでいくと途中からペン先が紙から離れなかったり, 部品3のペンを固定している部品が上部へ曲がり部品2,3が部品1のレール上から離れてしまうといった事態が発生する. 



*完成した文字 [#l1148ceb]
*まとめ [#j068f8fa]

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS