目次
#contents
*課題の内容 [#ga326791]
今回の課題は、ロボットを作成し自分の住んだことのある地名を書くというものであった。(10文字以上で)
*ロボット [#l703b418]
**完成品 [#vd893230]
完成形はこちらである。↓
#ref(2018b/Member/prague/Mission1/robo3.jpg,10%,完成品表);     #ref(2018b/Member/prague/Mission1/robo6.jpg,10%,完成品裏);
**製作の過程 [#k9f45df5]
最初に考えたのはこれでなくコンパスのようにまわりながら書くものであった。
最初に考えたのは、コンパスのようにまわりながら書くものであった。
#ref(2018b/Member/prague/Mission1/robo7.jpg,30%,プロトタイプ);
(緑の縁で囲まれた部分が動く。)
しかし動かしてみようとするとアダプタをつないだ時にその長さの違いなどからどうしてもアダプタから不要な力がはたらいてしまうため、断念せざるを得なかった。
こういったこともありev3をつなげても関係なく動けるような形にしようと考えた。そこで思いついたものはプリンター型のロボットである。

なぜかというとev3を乗せて車のように動かすとなるとどうしても乗せる場所は重心の移動を考慮せねばならず自由に作ることは難しいと思ったからである。つまり本体ではなく紙の方を動かせばその心配をせずに済むと考えた。さらにアームとベルトとタイヤの動きをそれぞれz,x,y軸での座標の移動とすることができるので、文字を書く際もプログラミングの時点で動かす前から完成形がある程度想定できるということもありメリットが多いと考えた。
なぜかというとev3を乗せて車のように動かすとなるとどうしても乗せる場所や重心の移動を考慮せねばならず自由に作ることは難しいと思ったからである。つまり本体ではなく紙の方を動かせばその心配をせずに済むと考えた。さらにアームとベルトとタイヤの動きをそれぞれz,x,y軸での座標の移動とすることができるので、文字を書く際もプログラミングの時点で動かす前から完成形がある程度想定できるということもありメリットが多い。

プリンターのようにするためにまずタイヤの部分を紙を動かすローラーにしようと考えた。そのためにはタイヤ間の距離がA4用紙の幅とほぼ同じくらいでなければならず実際に計測して製作を進めていった。最初は距離だけでいいと思っていたが、作るうちにタイヤにある程度の重心が乗らないと、紙を動かしてくれないということに気が付いた。特にこの2つの問題に注目して進めていった。
プリンターのようにするためにまずタイヤを紙を動かすローラーの役割にしようと考えた。そのためにはタイヤ間の距離がA4用紙の幅とほぼ同じくらいでなければならず、車間距離を実際に計測して製作を進めていった。最初は距離だけでいいと思っていたが、作るうちにタイヤにある程度の重心が乗らないと、紙を動かしてくれないということに気が付いた。そのあとは特にこの2つの問題に注目して製作を進めていった。

何とか製作が終了したと思った矢先に、文字を書く上でベルトコンベアの高低差が大きな問題として立ちはだかった。
#ref(2018b/Member/prague/Mission1/robo2.jpg,10%,);
↑上の画像の青い丸で囲まれた部分に車輪が置かれていることでベルトコンベアがたるんでしまいペンの高さが変わってしまった。

↑上の画像の青い丸で囲まれた部分に車輪が置かれていることでこの問題が発生した。ベルトコンベアがたるんでしまうと横に動かしたときにペンの高さが変わってしまい、低くなる部分に合わせたときは高くなる部分で紙から離れてしまう。逆に高くなる部分に合わせるとペンが低くなるところで筆圧が強くなり紙に引っかかってしまうという問題点がある。
#ref(2018b/Member/prague/Mission1/convair.png,50%);
#ref(2018b/Member/prague/Mission1/convair2.png,50%);
上図のようにペンの高さと筆圧が変わってしまう。
そこでなるべくその差をなくせるように高さを可動式にした。こうすれば万が一動かすときに高さが合わなくてもすぐに修正が可能であると考えたからだ。

見事その作戦が功を奏しついに完成した。
完璧に高さを一定にするというのはかなわなかったが、この作業により書ける時の完成度はかなりあがった。
#ref(2018b/Member/prague/Mission1/robo4.jpg,10%,可動域);
図の赤い矢印で記された部分が動く。
このロボットは安定性があり大体いつでも同じような文字が書けることが長所である。

ほぼ毎回同じクオリティーのものが書けるようになったため微調整などもかなりやりやすい。
*プログラミングの説明 [#k9939850]
このロボットのプログラミングは座標の移動を行うように作るので最初に方眼紙を使い完成形を想定し作るというやり方で行った。
このロボットは座標を行使って動くので最初に方眼紙を使い完成形を想定してからプログラミングを始めた。
 task_main()
 lift = MediumMotor('outA')
 belt = LargeMotor('outB')
 tire = LargeMotor('outC')
それぞれの出力の定義
 lift = MediumMotor('outA') リフト
 belt = LargeMotor('outB') ベルト
 tire = LargeMotor('outC') モーター
リフト、ベルトタイヤを動かすためのモーターの出力の定義

 def motor_init():
 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にすることで書く時の左右のタイヤの動きの誤差を気にせず動かせる。tiremoveのところで0.9をかけているのはベルトに比べタイヤの動く距離が長かったことから、同じ命令で同じだけ進ませようと調整した結果である。
ここでタイヤ、ベルト、アームの動かしかたが定義できる。スピードは少し遅いが100にすることで書く時の左右のタイヤの動きの誤差を気にせず動かせる。tiremoveのところで0.9をかけているのはベルトに比べタイヤの動く距離が長かったことから、同じ命令で同じだけ進ませようと調整した結果である。

「川」を描くプログラミング
 task_main()
    def kawa(t):
 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()

このtは座標を1だけ動かすことをしめす。t*2,3...で進む座標が2、3...のようになっていく。-が付く場合は+と逆方向に動く。
「東」の 5画目までを描くプログラミング
    def higashi_zenhan(t):
 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):
 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()
動きをまとめる。ここで文字の大きさなどの変更ができる。
def move()
 def move()
        motor_init()
        kawa(20)
        higashi_zenhan(20)
        higashi_kouhan(20)

*書けた文字 [#v66428dc]
#ref(2018b/Member/prague/Mission1/Kawahigashi.jpg,10%,川東);
線が若干弱弱しいか…?
線が弱弱しいか…?

*考察 [#aad30710]
**よかったところ [#j328fca8]
文字を横方向に書くのにベルトコンベアを縦方向に書くのにタイヤをそれぞれ利用したことでプログラミングでの指定が座標できかなり手間がかからずプログラミングができた。縦横の移動で結構まっすぐな線が引けていたと思う。

**反省すべきところ [#kffd0532]
確かに縦と横の移動には強かったが、斜めに描くところで線がひょろっとしてしまい、まっすぐに描くことができなかったので、もっとペンをつかむアームの部分を安定させることができれば斜めもきれいに書けたかもしれない。
今回は「川東」と比較的狭くて知名度のないところを書いてしまったので,もっとメジャーな「松本」や「長野」などを書けば印象に残りやすかったかなと考えた。


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS