[[2019a/Member]] *制作目標 [#td3853be] 10画以上の地名を書くロボットを制作。 関数を生かせるように同じ形の部位が出てくる地名が良いと考え、品川を書くことにした。 *ロボットの概要 [#n71effc0] 今回の課題を行う上で文字を書くのに必要な要素は水平方向に縦と横への動きとペンを上げ下げする垂直方向の三次元的な動作が必要であったため三つのモーターを使ってこれらの動きを実現することを考えた。 &ref(006.jpg); *動作域解説 [#d43a9dda] -縦軸 &ref(005.jpg); LargeMotorを使用。タイヤを利用して本体ごと移動することで縦軸の移動を可能にした。本体を支える土台となる部分なのでモーターに取り付けたタイヤ2つに加え小タイヤ2つを付け、4輪車にして強度を高めた。 -横軸 &ref(004.jpg); LargeMotor使用。写真のようなスライド式にした。モーターを回すことで下の部品が押し出される仕組みになっている。安定性を重視してパーツを多く使った。設計上、スライド時に引っかかることが多かったため、長めのパーツを使って対策した。 -垂直 &ref(002.jpg); #上げた場合 &ref(001.jpg); #下げた場合 MIdiumMotorを使用。ペンの固定には小タイヤのゴム部分を使用し、輪ゴムはいっさい使っていない。ペンは斜めに固定し、45°程度回転させて上げ下げを行った。本体の重心から離れた位置であることや、可動部設置しているため、非常にぶれやすい部分であったが、できる限り固定をしたので比較的きれいな直線を書くことができた。 -その他の工夫 全体の重心を意識してEV3本体は可動部の反対につけた。 可動域に配線が絡まないよう、接続位置に注意した。 *プログラム解説 [#rede844e] -動作までの準備 モーターと出力位置の設定。 #!/usr/bin/env python3 from ev3dev.ev3 import * from time import sleep l = LargeMotor('outC') m = LargeMotor('outB') n = MediumMotor('outA') リセットは関数にしてまとめて行うこととした def motor_hakusi(): l.reset() m.reset() n.reset() 縦軸の動きの関数。微調整のため、変数を置いた。 def move_tate(a,b): l.run_forever(speed_sp=a, stop_action='hold') sleep(b) l.stop() def yoko_right(c,d): m.run_forever(speed_sp=c, stop_action='hold') sleep(d) m.stop() 共に横軸の関数。縦軸同様変数を設定した。 def yoko_left(g): m.run_forever(speed_sp=-100, stop_action='hold') sleep(g) m.stop() ペンを上げる動作 def fude_age(): n.run_to_rel_pos(position_sp=-45, speed_sp=200, stop_action='brake') sleep(1) ペンを下げる動作 def fude_sage(): n.run_to_rel_pos(position_sp=45, speed_sp=200, stop_action='brake') sleep(1) 口の字を書く関数。先に定義した関数を使ってまとめた。左上から開始し、時計回りに一周する動きにした。 def kuchi(e,f): fude_sage() yoko_right(100,e) move_tate(-80,1) yoko_left(f) move_tate(80,1) fude_age() 川の左の動きを設定した。縦軸を動かしながら横軸を左右にずらして手書き感を出そうと試行錯誤した。 def hidari_shita(x): l.run_forever(speed_sp=-130,stop_action='brake') m.run_forever(speed_sp=60,stop_action='brake') sleep(x) m.stop() sleep(2*x) m.run_forever(speed_sp=-75,stop_action='brake') sleep(3*x) m.stop() l.stop() -動作部分 はじめにresetしておき中央の口を書くよう設定。座標を固定するため、一度左端に移動させてから右へ動かし調整している。 motor_hakusi() yoko_left(1) yoko_right(105,1/3) kuchi(1/3,1/2) 左下の口を書く。 motor_hakusi() yoko_left(2) move_tate(-120,1) kuchi(1/2,2) 右下の口を書く。 motor_hakusi() yoko_right(100,1) yoko_left(1/3) kuchi(2/5,2/5) 品の下へ移動。続いて川の一画目を書く。 motor_hakusi() move_tate(-150,1) yoko_left(2) yoko_right(50,1/4) fude_sage() hidari_shita(1/6) fude_age() 川の二画目を書く。少し短く設定した。 motor_hakusi() move_tate(115,1) yoko_left(1) yoko_right(130,1/2) fude_sage() move_tate(-105,1) fude_age() 川の三画目を書く。最も長くした。 motor_hakusi() move_tate(165,1) yoko_right(100,1) fude_sage() move_tate(-200,1) fude_age() move_tate(-150,2) *結果・改善点 &ref(1888.JPG); &ref(1889.JPG); 最終的には何と書いてあるかわかる程度にはなったが、もう少しバランスよく書けるようにしたかった。 横軸移動において設計の関係から場所によって進む距離が変わってしまう事態が生じた。その為プログラムにおいて値を微調整する必要があったが、移動できる領域が小さいため微調整が利かなかった。プログラミングでは改善できなかった問題であったため、組み立て時、具体的には横軸部分の可動域をもう少し広げて、調節しやすくするなどの方法があったように思える。またロボットを組み立てるたびに書く字の形が変わってしまった。せっかく前日に納得がいくまで調整したのに本番で形がかわってしまったのは非常にショックであった。持ち運ばなければならないのである程度分解しなければならないので、少しのずれに動じないような強固なロボットを作らなければならないだろう。 横軸移動において設計の関係から場所によって進む距離が変わってしまう事態が生じた。その為プログラムにおいて値を微調整する必要があったが、移動できる領域が小さいため微調整が利かなかった。プログラミングでは改善できなかった問題であったため、組み立て時、具体的には横軸部分の可動域をもう少し増設して、調節しやすくするなどの方法があったように思える。またロボットを組み立てるたびに書く字の形が変わってしまった。せっかく前日に納得がいくまで調整したのに本番で形がかわってしまったのは非常にショックであった。持ち運ばなければならないのである程度分解しなければならないので、少しのずれに動じないような強固なロボットを作らなければならないだろう。 ロボットが軟弱だったためにプログラミングで修正しようとして結果的にプログラムも散らかってしまった。問題を修正するための時間がもう少し欲しかった。