目次 #contents *課題 [#x6ec64d6] 今回の課題は書道ロボット。 これまで住んだことのある都道府県名、市町村名、地区名などの中から2文字以上、かつ合計10画以上のものを選び、それをA4の紙を書くロボットを製作する。ただし、以下の注意点に気を付ける。 ・ひとりにつき一つ以上のプログラムを作成すること。 ・ペン以外はキットに含まれる部品を使うこと。 ・キットに付属の高価な輪ゴムは切れやすいので切れないように細心の注意を払うこと。 ・ 改良や調整をしやすくするため、ロボット本体だけでなく、プログラムについても可能な部分についてはサブルーチンや関数、マクロなどを使って部品に分けること。 以上のことから、「松本」を選んだ。 *ロボットの説明 [#i583ab73] 今回は説明書にあったロボットを用いた。アームの方は、形が象の鼻のように見えたので、画像のような形にした。アームのところにペンを固定して文字を書くというロボットである。 *実際に作業してみて [#z96984e8] **文字について [#o2cc63d7] まずは、松を書くことにした。書き順としては、最初画像のようにして最短距離で書く予定だった。しかし、このロボットはペンが先についているので回転すると元の位置にペンが来ない。なので画像のような書き順にすることにした。こうすれば回転しても、前後に動かすだけで調整できる。 **ペンについて [#r5d1e12f] 文字の書き方を決めて実際にロボットで書いてみた。最初はマッキーペンにしようとしたが、このペンだと地面との摩擦が大きく途中で止まってしまうことがある。そのため筆ペンを使うことにした。そもそも書道ロボットなのだから筆ペンにするべきであった。こうして、プログラムを書き、実際に作業して調整をし、できたのが以下のプログラムである。 *プログラムの説明 [#mdde191a] **プログラムの導入 [#u8870afc] 今回はpythonを用いてプログラムを作る #!/usr/bin/env python3 from ev3dev.ev3 import * from time import sleep ml=LargeMotor('outA') #装置Aのモーターをmlとおく mr=LargeMotor('outB') #装置Bのモーターをmrとおく mm=MediumMotor('outC')} #アームのモーターをmmとおく **定義の導入 [#hee039ac] 前に移動・後ろに移動・ペンを下げる・ペンを上げる・回転する、の5つの定義を導入した。 def fd(t): ml.run_timed(time_sp=t,speed_sp=100,stop_action='coast') mr.run_timed(time_sp=t,speed_sp=100,stop_action='coast') sleep(3) def back(t): ml.run_timed(time_sp=t,speed_sp=-100,stop_action='coast') mr.run_timed(time_sp=t,speed_sp=-100,stop_action='coast') sleep(3) def pd(): mm.run_to_rel_pos(position_sp=-15,speed_sp=25,stop_action='coast') sleep(3) def pu(): mm.run_to_rel_pos(position_sp=15,speed_sp=25,stop_action='coast') sleep(3) def turn(x): mr.run_to_rel_pos(position_sp=x,duty_cycle_sp=50) ml.run_to_rel_pos(position_sp=-x,duty_cycle_sp=50) time.sleep(3) fdはforward、pd・puはpen down・pen upである。文字を省略することで、作業を早くすることができた。 **「松本」のプログラム[#b94d6b45] ml.reset() mr.reset() mm.reset() pd() fd(1000) pu() fd(1500) turn(-170) back(2500) pd() fd(2000) pu() fd(900) turn(-90) back(2200) pd() fd(800) pu() fd(1200) turn(180) back(2200) pd() fd(800) pu() fd(2300) turn(210) back(1800) pd() fd(800) pu() fd(2000) turn(-120) fd(600) turn(-120) back(2300) pd() fd(800) pu() fd(2000) turn(-200) fd(500) turn(90) back(2000) pd() fd(800) pu() fd(2000) turn(260) back(2000) pd() fd(900) pu() fd(2200) turn(-120) back(2500) pd() fd(800) pu() fd(5000) turn(-260) back(1000) pd() fd(2000) pu() fd(1000) turn(150) back(2500) pd() fd(2000) pu() fd(800) turn(-90) back(2100) pd() fd(1000) pu() fd(1000) turn(180) back(2300) pd() fd(1000) pu() fd(2200) turn(-260) back(1900) pd() fd(800) pu() *結果 [#feb3f2d1] *感想 [#j5f6c887] 今回初めてロボットを作ってみて、正直良くできた点よりも反省するべき点のほうが多くあったように思う まずロボットについては、ほかのグループは色々と工夫をしているにもかかわらず自分たちのグループは説明書にあったロボットを用いただけで何も工夫していない。そのせいで、回転の際にいちいち場所を元に戻す手間がかかり、時間がかかってしまった。もっと人間のように手だけを動かすようなロボットを作れれば回転する必要がなくスムーズに作業が行えたと思う。このように、ロボットを作る際は、物事を手際よく行うようにプログラミングされている自然の生き物(今回は「書く」という作業なので人間、ほかには、例えば「速く飛ぶ」鳥のようなロボットを作りたいのであれば隼)に注目することでヒントが得られることがあることが分かった。 ロボットの工夫 プログラミングが大変 ペン 電池の関係で動きにくい プログラムが消えること