[[2018a/Member]] #contents *課題 [#df9fd54e] 今回の課題は、出身地に関わる十画以上の漢字、熟語を書くロボットの制作である。私は今回、地元の山である日岡山より「日岡」の二字に挑戦した。 *ロボットの作成 [#e2afc554] 今回はプログラミングが容易になるという「XY軸型ロボット」を選択した。しかし機構を独特なものにしたため、様々な問題が生じた。生じた問題点は後述する。 &ref(2018a/Member/Tomo/Mission1/full_picture.jpg,70%,全体像); XY軸型の多くの人は架橋するタイプに取り組んだかと思うが、私はモーターは一箇所に集めてペンのみを移動させる型にした。 &ref(2018a/Member/Tomo/Mission1/y_line_function.jpg,70%,縦方向の機構); 縦方向はタイヤを取り付けたモーターで動かした。一つのモーターで動かすため一定方向にしか動かない。 &ref(2018a/Member/Tomo/Mission1/x_line_function.jpg,70%,横方向の機構); 横方向はギアによってマジックハンドのような機構を動かす仕組みになっている。 &ref(2018a/Member/Tomo/Mission1/updown_function.jpg,70%,上げ下げの機構); ペンの上げ下げは横方向を動かす機構を根本から持ち上げるようにした。 &ref(2018a/Member/Tomo/Mission1/updown_detiel_function.jpg,70%,上げ下げの機構); マジックハンドの機構を動かすモーターとつながるギアを支点として、別のモーターで横に動かす機構の角度を変えることでペンの上げ下げをする。 *プログラムの作成 [#x6c53923] XY軸型のロボットなので基本は縦横を行き来する動きとペンを上げ下げする動きで、これらを組み合わせて文字を書かせる。基本の動きはプログラム中に何度も出てくるため、マクロとして記述しメインのプログラムを簡単にした。 #define x_front(t) OnFwd(OUT_B,speed);Wait(common_time/t);Off(OUT_B);Wait(200);//右へ移動 #define x_back(t) OnRev(OUT_B,speed);Wait(common_time/t);Off(OUT_B);Wait(200);//左へ移動 #define y_front(t) OnFwd(OUT_A,speed);Wait(common_time/t/3*2);Off(OUT_A);Wait(200);//下へ移動 #define y_back(t) OnRev(OUT_A,speed);Wait(common_time/t/3*2);Off(OUT_A);Wait(200);//上へ移動 #define pen_up OnRev(OUT_C,pen_speed);Wait(pen_time);Off(OUT_C);Wait(200);//ペンの上昇 #define pen_down OnFwd(OUT_C,pen_speed);Wait(pen_time);Off(OUT_C);Wait(200);//ペンの降下 上から横の行き来、縦の行き来、ペンの上げ下げを定義している。縦横の移動速度、ペンの上げ下げの速度、時間は別個に定数として定め、縦横の移動時間は文字の形は一定なのでメインのプログラム中で比のような扱いができるようにした。 #define pen_time 600//ペンの上げ下げの時間 #define pen_speed 20//ペンの挙動速度 #define speed 50//移動速度 #define common_time 750//基準速度 上からペンを持ち上げにかける時間、速度、縦横の移動速度、動作時間の比の基準となる時間を定義している。 なるべくペンの上げ下げを少なくするよう書き順は無視した。 以下がメインのプログラム **「日」を書くプログラム [#u61509a1] task main() { x_front(1-50); //→ y_front(1); //↓ x_back(1+50); //← y_back(1); //↑ 口 pen_up; y_front(2); pen_down; x_front(1-50); //→ 日 pen_up; x_back(1); ()の中は基準となる時間の何分の一かを表す。また、そこに±をして微調整する。 外側の口の部分を先に一筆で書いてから真ん中の横棒を書くようにした。 **「岡」を書くプログラム [#n42648dd] y_front(1*2); pen_down; y_back(1); //↑ x_front(1); //→ y_front(1); //↓ x_back(4); //← 冂の形に pen_up; y_back(2); x_back(2); pen_down; y_front(3); //↓ x_front(2); //→ y_back(3); //↑ 岡の冂の中の凵の部分を書く pen_up; y_front(3); x_back(4); pen_down; y_back(12*7); //↑ 岡の冂の中の中心の縦線を書く pen_up; x_back(8*3); pen_down; x_front(4*3); //→ 岡の冂の中の一番上の横線を書く pen_up; x_back(4); pen_down; y_back(8+50); //↑ pen_up; x_back(4); pen_down; y_front(8+50); //↓ 岡の冂の中の八の字の部分を書く pen_up; } 「岡」は外側の冂の部分を先に一筆で書き、残りは大体書き順を戻っていくように書かせた。 *実践 1[#h6f498af] &ref(2018a/Member/Tomo/Mission1/honbann.jpg,70%,本番_1); かろうじて、「岡」は読めるかもしれないが、到底「日岡」とは読めないような字となった。 *問題点 [#jd356b75] ペンを横に動かす仕組みごと持ち上げる構造上モーターへの負荷が大きくなってしまった。また、ペン先を固定する力が重力とゴムの摩擦のみのため書く力が安定せずうまく書けない線が出てきてしまった。その他にも構造上可動域にかなりの制限がかかった。また、横方向の動きにマジックハンドのような仕組みを採用したところ、当初支えている点がモーターとの接続の部分のみであったためペンを保持する部分が支えきれなくなってしまった。これについてはきれいに伸び縮みさせるためのガイドを支えとすることで解決した。この他にも改善できそうな点に手を加えていこうと思う。 *プログラムの改良 [#kc5e253d] ただペンの上げ下げを少なくすることを優先していたが、何度か試しているとどうも縦に上げる動き( マクロ y_back )と左に動かす動き(マクロ x_back )のときに上手く文字が書けないようだった。そこで、これまで「日」の外の口の部分を一筆で書かせていたが右→下、戻って下→右と書くように変更した。 task main() { x_front(1); y_front(1); { _ x_front(1); //→ _ y_front(1); //↓ | pen_up; x_back(1-10); y_back(1-200); pen_down; y_front(1); x_front(1); y_front(1); //↓ 冂 x_front(1); //→ 口 pen_up; x_back(1); y_back(2); pen_down; x_front(1); x_front(1); //→ 日 pen_up; x_back(1); y_front(1*2); pen_down; y_back(1); x_front(1); y_front(1); x_back(4); y_back(1); //↑ | _ x_front(1); //→ | _ y_front(1); //↓ || x_back(4); //← 冂 pen_up; y_back(2); x_back(2); pen_down; y_front(3); y_front(3); // 以下変更なし x_front(2); y_back(3); pen_up; y_front(3); x_back(4+30); pen_down; y_back(12*7); pen_up; x_back(8*3); pen_down; x_front(4*3); pen_up; x_back(4); pen_down; y_back(8+50); pen_up; x_back(4); pen_down; y_front(8+50); pen_up; } 新たに時間や速度も調節した。 #define pen_time 300 #define pen_speed 15 #define speed 30 #define common_time 700 *実践 2 [#dae1fe29] &ref(2018a/Member/Tomo/Mission1/honbann_2.jpg,70%,本番_2); 前回よりも日はきれいになったが、岡は崩れてしまった。 *感想 [#q445015a] 問題点として大きいのはペンの筆圧が重力とゴムの摩擦だよりなところだと感じた。この点の解決策が思いつかなかったのが残念だ。次回以降はもっと上手く作っていきたい。