[[2019a/Member]] 

*目次 [#p8d7fd6d]
#contents

*課題1 [#td8c3b1b]
**課題内容  [#f758919b]
文字を書くロボットの製作、住んだことのある地名を2文字以上、10画以上でA4紙に書かせる。私は西宮を書かせることにした。地元愛が強めなので失敗は許されない。 
**方針  [#tb5feb88]
西宮という文字は四角に動く動作を多めに多様し、出来るだけ移動を少なくした動作をすれば簡易だと予測。前年度の方の記述を見る限り先にプログラミングを書き殴っている印象を受けたが、私は一画ずつ微調整して完成させようという方針を立てた。

*制作したロボット  [#u9789d22]
**機体全体像 [#g4788bee]
&ref(s_S__68747276_new.jpg); 

機構1は本体を前後するため、機構2はペンを上下すなわち書き始め終わりを作る為にラージモーターを使用。機構3はペンを左右に動かすためにミディアムモーターを使用。

モーターの駆動にrun_to_rel_posという決められた角度だけ回すというメソッドを使用、このおかげで変数が1つなので一画ずつ書いていくやり方がマッチしていた。

**機構1 [#faff9c5e]
ラージモーターで本体を動かすシンプルな機構である。ここの動きがもっともペンの線をまっすぐ引ける。

**機構2 [#x3bad488]
&ref(s_S__68747277_new.jpg); 

ペンを上下すなわち書き始め終わりを作る為にラージモーターを使用、機体3と連動させるために結合部分には気を遣った。支えられるぎりぎりの重さなので重いペンは使用できないだろう。

**機構3 [#beb48508]
&ref(s_S__68747272_new.jpg); 

ミディアムモーターでペンを左右に揺らす。この際設置したペンを巻き込まないよう注意する必要あり。単純にかっこよいからとキャタピラ及び無限軌道を採用したがここが今回の一番の鬼門だった。理由は後述する。

**文字の書き方  [#f4c1ee59]
&ref(S__68747281.jpg); 

回転角度と長さの関係が縦180→13僉_360→13僉180や360はrun_to_rel_posのposition_spに入れる値)であることを相方が調べてくれていたが一画一画書いていく方針なのでそこはあまりきにしなかった。根気の作業である。正直ここで書けるほどの記憶はない。徹夜での作業だったのである。とりあえず意識していたのは無駄のない動き、つまりは書き順とプログラムが書きやすいようにピンクの色の線は高さをそろえた。後はひたすら微調整である。

*プログラム  [#taac9426]
EV3を扱っておりプログラミングにTera TermというソフトからPythonという言語を用いた。

 yoko = MediumMotor('outB') 
 tate = LargeMotor('outA')
 mae = LargeMotor('outD' ) 
モーターに名前をつけていく。

 def orosu():
       tate.run_to_rel_pos(position_sp=-90, speed_sp=300, stop_action='brake')
 def ageru():
       tate.run_to_rel_pos(position_sp=90, speed_sp=300, stop_action='brake')
 def migi(a):
       yoko.run_to_rel_pos(position_sp=-a, speed_sp=300, stop_action='brake')
 def hidari(b):
       yoko.run_to_rel_pos(position_sp=b, speed_sp=300, stop_action='brake')
 def susumu(c):
       mae.run_to_rel_pos(position_sp=-c, speed_sp=200, stop_action='brake')
 def sagaru(d):
       mae.run_to_rel_pos(position_sp=d, speed_sp=200, stop_action='brake') 

defを使って定義して調節しやすく、見やすくする。 基本的なプログラムを定義しておくことでかなりその後楽になる。position_spの値に関数を導入。ここにあとからabcdを代入していく方式である。 

実際に動作させたプログラムは以下である。 
 
 #!/usr/bin/env python3
 from ev3dev.ev3 import *
 from time import sleep

 yoko = MediumMotor('outB')
 tate = LargeMotor('outA')
 mae = LargeMotor('outD')
 def orosu():
        tate.run_to_rel_pos(position_sp=-90, speed_sp=300, stop_action='brake')
 def ageru():
        tate.run_to_rel_pos(position_sp=90, speed_sp=300, stop_action='brake')
 def migi(a):
        yoko.run_to_rel_pos(position_sp=-a, speed_sp=300, stop_action='brake')
 def hidari(b):
        yoko.run_to_rel_pos(position_sp=b, speed_sp=300, stop_action='brake')
 def susumu(c):
        mae.run_to_rel_pos(position_sp=c, speed_sp=200, stop_action='brake')
 def sagaru(d):
        mae.run_to_rel_pos(position_sp=-d, speed_sp=200, stop_action='brake') 

導入と定義である。

&ref(S__68747281.jpg);

書いている動作を図で説明する。
 orosu()
 sleep(3)
 susumu(165)
4を書く
 sleep(3)
 migi(180)
 sleep(3)
 sagaru(165)
 sleep(3)
 hidari(180)
 sleep(3)
1までそのまま書く
 ageru()
 migi(240)
 sleep(3)
 orosu()
 sleep(3)
 susumu(165)
筆をあげて2の最初まで移動、2を書く。
 sleep(3)
 ageru()
 sleep(3)
 sagaru(85)
 sleep(3)
 orosu()
 sleep(3)
 sagaru(80)
 hidari(225)
 sleep(3)
3を書く、斜めをかくのは非常に難儀だった。
 ageru()
 migi(225)
 susumu(95)
 sleep(3)
 orosu()
 sleep(3)
 hidari(155)
 sleep(3)
 susumu(70)
 sleep(3)
 ageru()
 migi(90)
 sleep(3) 

4を書き、ここで西を書き終える。


 susumu(30)
 sleep(3)
 orosu()
 sleep(3)
 migi(50)
 sleep(3)
 susumu(175)
 sleep(3)
 hidari(50)
 sagaru(10)
 sleep(3)
 ageru() 
5を書く
 sagaru(47.5)
 sleep(3)
 orosu()
 sleep(3)
 hidari(50)
 sleep(3)
 sagaru(50)
 sleep(3)
 migi(50)
 sleep(3)
 susumu(40)
 sleep(3)
 ageru()
6を一周して書き上げる
 sagaru(20)
 sleep(3)
 sleep(3)
 orosu()
 sleep(3)
 migi(40)
 sleep(3)
 ageru()
7を書く
 sleep(3)
 hidari(140)
 sleep(3)
 orosu()
 sleep(3)
 sagaru(30)
 hidari(20)
 sleep(3) 
 sagaru(20)
 sleep(3)
 hidari(110)
 sleep(3)
 susumu(100)
 sleep(3)
 migi(110)
 sleep(3)
 sagaru(100)
 sleep(3)
 ageru()
  
完成である。 
8を書いて完成である。 

&ref(S__68747280.jpg); 

撮影していたので動画を限定公開する。
https://youtu.be/-clGInIQXc8 

*反省  [#p81a0571]
ペンを持ち上げる力が弱いのか、相方は大丈夫だったがペン先がたるむペンだとうまくペンがあがらなかったりした。キャタピラを用いた部分が非常に不規則すなはちガタガタに動いて鬼門だった。これは少し考えれば予測出来たので反省点としての点は高い。キャタピラの不規則さを制御して綺麗な文字をかくのは非常にきつかった。あときちんとプログラム通りに動かない問題が発生したとき、問題点を発見出来なかったのは反省点である。run_to_rel_pos"、メソッドはロボットが思う今の位置から指定した角度まで回すというものであろうか。"run_to_rel_pos"の前にモーターをリセットする、"run_to_abs_pos"を使う、手動で戻した後にロボットとつなぎなおすなどが解決策である。

*感想  [#zd311641]
初めてのロボットの設計とプログラミングで、困難は多々あり。それと時間に比例して大きな達成感もあった。この課題を通し機体製作、プログラミングの知識やそれの負担苦悩、それを解決する気持ちよさを少しでも味わえたと感じる。これが将来プログラマーになる糧になっただろう。楽しかった

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS