目次 #contents *課題の内容 [#ga326791] 今回の課題は、ロボットを作成し自分の住んだことのある地名を書くというものであった。(10文字以上で) *ロボット [#l703b418] **完成品 [#vd893230] 完成形はこちらである。↓ #ref(2018b/Member/prague/Mission1/robo3.jpg,10%,完成品表); #ref(2018b/Member/prague/Mission1/robo6.jpg,10%,完成品裏); **製作 [#k9f45df5] 最初に考えたのはこれでなくコンパスのようにまわりながら書くものであった。しかし動かしてみようとするとアダプタをつないだ時にその長さの違いなどからどうしてもアダプタから不要な力がはたらいてしまうため、断念せざるを得なかった。 こういったこともありev3をつなげても関係なく動けるような形にしようとし、続いてはプリンター型のものを考えた。 ev3を乗せて車のように動かすとなるとどうしてもその重心や乗せる場所を考慮せねばならず、なかなか自由に作ることは困難であると考えたからである。さらにアームとベルトとタイヤの動きをそれぞれz,x,y軸での座標の移動とすることができるので、文字を書く際もプログラミングの時点で動かす前から完成形がある程度想定できるということもありメリットが多いと考えた。 文字を書く上でベルトコンベアの高低差が大きな問題として立ちはだかった。 #ref(2018b/Member/prague/Mission1/robo2.jpg,10%,); ↑上の画像の青い丸で囲まれた部分に車輪が置かれていることでベルトコンベアがたるんでしまいペンの高さが変わってしまった。 そこでなるべくその差をなくせるように高さを可動式にした。こうすれば万が一動かすときに高さが合わなくてもすぐに修正が可能であると考えたからだ。 見事その作戦が功を奏し成功に至った。 #ref(2018b/Member/prague/Mission1/robo4.jpg,10%,); 図の赤い矢印で記された部分が動く。 このロボットは安定性があり大体いつでも同じような文字が書けることが長所である。 *プログラミングの説明 [#o3b416bd] **メインプログラム [#oead4d38] task_main() lift = MediumMotor('outA') belt = LargeMotor('outB') tire = LargeMotor('outC') それぞれの出力の定義 def motor_init(): for m in [lift,belt,tire]: m.reset() m.speed_sp=100 m.stop_action='hold' def liftup(): lift.run_to_rel_pos(position_sp=-110) sleep(2) def liftdown(): lift.run_to_rel_pos(position_sp=110) sleep(2) def beltmove(t): belt.run_to_rel_pos(position_sp=t) def tiremove(t): tire.run_to_rel_pos(position_sp=-t*0.9) ここでタイヤ、ベルト、アームの動かしかたが定義できる。スピードは少し遅いが110にすることで書く時の左右のタイヤの動きの誤差を気にせず動かせる。 task_main() def kawa(t): tiremove(t*2) sleep(2) liftdown() tiremove(t*5) sleep(2) tiremove(t*3) beltmove(t*-2) sleep(2) liftup() tiremove(t*-7) sleep(3) beltmove(t*5) sleep(3) liftdown() tiremove(t*4) sleep(2) liftup() tiremove(t*-5) sleep(3) beltmove(t*3) sleep(2) liftdown() tiremove(t*8) sleep(3) liftup() 「川」の部分を書くプログラミング def higashi_zenhan(t): beltmove(t*-7) sleep(3) tiremove(t*2) sleep(3) liftdown() beltmove(t*8) sleep(3) liftup() tiremove(t*2) sleep(3) beltmove(-t) sleep(3) liftdown() tiremove(t*4) sleep(3) beltmove(t*-6) sleep(3) tiremove(t*-4) sleep(3) beltmove(t*6) sleep(3) liftup() tiremove(t*2) sleep(3) liftdown() beltmove(t*-6) sleep(3) def higashi_kouhan(t): liftup() tiremove(t*-5) sleep(3) beltmove(t*3) sleep(3) liftdown() tiremove(t*11) sleep(4) liftup() tiremove(t*-4) sleep(3) liftdown() tiremove(t*4) beltmove(t*4) sleep(2) liftup() tiremove(t*-4) sleep(2) beltmove(t*-4) liftdown() tiremove(t*4) beltmove(t*-4) sleep(3) liftup() *書けた文字 [#v66428dc] #ref(2018b/Member/prague/Mission1/Kawahigashi.jpg,10%,川東); 線が若干弱弱しいか…? *考察 [#aad30710] 文字を横方向に書くのにベルトコンベアを縦方向に書くのにタイヤをそれぞれ利用したことでプログラミングでの指定が座標できかなり手間がかからずプログラミングができた。確かに縦と横の移動には強かったが、斜めに描くところで線がひょろっとしてしまい、まっすぐに描くことができなかったので、もっとペンをつかむアームの部分を安定させることができれば複雑な字も書けたかもしれない。今回は「川東」と比較的狭くて知名度のないところを書いてしまったので,もっとメジャーな「松本」や「長野」を書けば反応が良くなったかなと考えた。