- 追加された行はこの色です。
- 削除された行はこの色です。
目次
#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]
**基本動作 [#cdc40b59]
基本的に字を書く時に必要な動作は
+「ペン先を紙上に下ろす」
+「ペン先を紙から離す」
+「x軸方向に移動する」
+「y軸方向に移動する」
この4つである.これらの動作を組み合わせて,あるいは同時に進行されることで字を書く.漢字は基本的に左→右,上→下へと線を引くのでこの2種類の線の引き方とペンの上げ下げのプログラムを下記の通りそれぞれ一つの動作として定義した
#define up(r) OnRev(OUT_A,30);Wait(r);Off(OUT_A); //ペンを上げる動作
#define down OnFwd(OUT_A,30);Wait(30);Off(OUT_A); //ペンを下げる動作
#define line_x(s,r) down;OnFwd(OUT_B,20);Wait(s);Off(OUT_B);up(r); //x軸正方向に線を引く動作
#define line_y(t,r) down;OnFwd(OUT_C,20);Wait(t);Off(OUT_C);up(r); //y軸正方向に線を引く動作
なお,各線の長さについては駆動時間を変化させることで対応したためここではs,tが時間を表す.実際に線を引くときにはs,tに具体的な数値を入れる.(プログラムのupにも時間を変更できるようにrが使用されているが,これの理由ついては前段落【ロボットについて】で説明した不具合に関係するためまとめて後述する)
|動作名|プログラム名|内容|
|動作1|up|ペンを持ち上げる|
|動作2|down|ペンを下げる|
|動作3|line_x(s,r)|x軸正方向に1000×s秒線をかく|
|動作4|line_y(t,r)|y軸正方向に1000×t秒線をかく|
4つの動作をまとめると上表の通りになる
また全段落の【ロボットについて】に説明があったように動作1,2を複数回行うとさせると動作2に対して1の動作が大きくなることが判明した.このため駆動時間・モータの出力を一定のままで字を書くプログラムを組んでいくと途中からペン先が紙から離れなかったり, 部品3のペンを固定している部品が上部へ強制的に上がってしまうことで部品2,3が部品1のレール上から離れてしまうといった事態が発生する. これを解消するため動作2は数値を固定にし,動作1を繰り返すごとに動作を大きくしペン先をより高く持ち上げることにした.変数rは初期値を50とし数回ごと+5の55として調整する
**松の字 [#g0f950c3]
長さについて、まず1画目、2画目の十を基準に比を考えて長さを決定した。また部品1, 2では使用したタイヤが異なるためプログラム上で同じ時間回転するようにしても実際に書かれる線の長さは異なる.なおここでは(s,t)=(900,1000)とした.
task main ()
{
line_x(900,50);
line_y(1000,55);
}
*まとめ [#j068f8fa]
どうしても斜めの線を引くときに部品2が不安定な状態となってしまい部品1から落ちてしまうことが多かった.また数値を半分にしても引かれる線がきっちり半分にならないため細かな調整が必要だと感じた.