目次 #contents *課題 [#x6ec64d6] 今回の課題は書道ロボット。 これまで住んだことのある都道府県名、市町村名、地区名などの中から2文字以上、かつ合計10画以上のものを選び、それをA4の紙を書くロボットを製作する。ただし、以下の注意点に気を付ける。 ・ひとりにつき一つ以上のプログラムを作成すること。 ・ペン以外はキットに含まれる部品を使うこと。 ・キットに付属の高価な輪ゴムは切れやすいので切れないように細心の注意を払うこと。 ・ 改良や調整をしやすくするため、ロボット本体だけでなく、プログラムについても可能な部分についてはサブルーチンや関数、マクロなどを使って部品に分けること。 以上のことから、「松本」を選んだ。 *ロボットの説明 [#i583ab73] 今回は説明書にあったロボットを用いた。 &ref(2018b/Member/Yoshi/Mission1/001.JPG,100%,完成); アームは少し変えた。形が象の鼻のように見えたので、画像のような形にした。アームのところにペンを固定して、上下に動かして文字を書くというロボットである。 &ref(2018b/Member/Yoshi/Mission1/002.JPG,100%,完成); *実際に作業してみて [#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() #1画目から2画目 fd(1000) pu() fd(1500) turn(-170) back(2500) pd() #2画目から3画目 fd(2000) pu() fd(900) turn(-90) back(2200) pd() #3画目から4画目 fd(800) pu() fd(1200) turn(180) back(2200) pd() #4画目から5画目 fd(800) pu() fd(2300) turn(210) back(1800) pd() #5画目から6画目 fd(800) pu() fd(2000) turn(-120) fd(600) turn(-120) back(2300) pd() #6画目から7画目 fd(800) pu() fd(2000) turn(-200) fd(500) turn(90) back(2000) pd() #7画目から8画目 fd(800) pu() fd(2000) turn(260) back(2000) pd() #8画目から9画目 fd(900) pu() fd(2200) turn(-120) back(2500) pd() #9画目から10画目 fd(800) pu() fd(5000) turn(-260) back(1000) pd() #10画目から11画目 fd(2000) pu() fd(1000) turn(150) back(2500) pd() #11画目から12画目 fd(2000) pu() fd(800) turn(-90) back(2100) pd() #12画目から13画目 fd(1000) pu() fd(1000) turn(180) back(2300) pd() #13画目から14画目 fd(1000) pu() fd(2200) turn(-260) back(1900) pd() #14画目から15画目 fd(800) pu() *結果 [#feb3f2d1] &ref(2018b/Member/Yoshi/Mission1/004.JPG,100%,完成); いまいち。。。 *感想 [#j5f6c887] 今回初めてロボットを作ってみて、正直良くできた点よりも反省するべき点のほうが多くあったように思う まずロボットについては、ほかのグループは色々と工夫をしているにもかかわらず自分たちのグループは説明書にあったロボットを用いただけで何も工夫していない。そのせいで、回転の際にいちいち場所を元に戻す手間がかかり、時間がかかってしまった。もっと人間のように手だけを動かすようなロボットを作れれば回転する必要がなくスムーズに作業が行えたと思う。このように、ロボットを作る際は、物事を手際よく行うようにプログラミングされている自然の生き物(今回は「書く」という作業なので人間、ほかには、例えば「速く飛ぶ」鳥のようなロボットを作りたいのであれば隼)に注目することでヒントが得られることがあることが分かった。 次にプログラミングについてである。先述のように、ロボットが回転するためペンが元の位置に戻らない。このため、場所を調整する手間がかかるので余計に時間がかかってしまった。だが、前に進むなどのプログラムの定義を簡略化したことで、少しは時間短縮になったのは良かったと思う。ほかに苦労したことは、プログラムが消えてしまったことである。同じような作業なので、間違えてデータを削除してしまった。これの対策としてはほかのファイルにプログラムを保存しておくなどする必要があった。 最後にそのほかの問題についいてである。まず、ペンはマッキーだと摩擦が大きくうまく進まない時があるので筆ペンにしたほうが良いということ、ほかには、電池の関係で進む距離や回転する大きさが異なってしまう ロボットの工夫 プログラミングが大変 ペン 電池の関係で動きにくい プログラムが消えること 床との摩擦