* 目次 [#na0a3734]
#contents

* 課題1:書道ロボット [#bbea43be]
 今まで住んだことのある都道府県名,市町村名,地区名などの中から2文字以上のものを選んでそれをA4の紙に書くロボットの作成.
** 書いた文字 [#m4d13436]
 自分は「松本」という字を書くロボットを作成した.

* 完成したロボット [#k2764755]
** ロボット本体 [#g1dd57bb]
#ref(./DSC_0200.JPG,ロボット本体の画像)
 この画像は完成したロボットの画像である.2つのタイヤを回して移動したり回転したりしながら文字を書く.

** 工夫した点 [#fda5021b]
 工夫した点は2つあり,1つ目はどのようにペンを持つか,2つ目はペンの上げ下げである.
*** ペンを持つための工夫 [#o97c86e2]
#ref(./DSC_0201.JPG,ロボットがペンを持つ)
 付属のパーツのみでペンを持つには工夫が必要だった.画像を見てわかるようにペンを下ろして字を書く際に前後左右はもちろん,上下にもずれないようにしっかりとペンを固定した.
*** ペンを上下させるための工夫 [#s2619802]
#ref(./DSC_0203.JPG,上下運動へ変換)
 ペンを上下に動かそうと考えた時,まずモーターの回転運動を上下運動に変換する仕組みが必要だった.その問題は上の画像のパーツを使用することで解決された.
#ref(./DSC_0200.JPG,ロボット本体の画像)
#ref(./DSC_0199.JPG,ロボットがペンを下げる)
 1枚目がペンを上げた時,2枚目がペンを下げた時の画像である.

** 参考にしたロボット [#h6177023]
 EV3に付属していたロボットのパンフレットのサッカーロボットを参考にした.

* プログラミング [#af4a5114]
 今回のプログラミングは最初に使う動きをすべて関数として定義してからその関数のみで組み立てた.
  mb = LargeMoter('outB')#右タイヤ
  mc = LargeMoter('outC')#左タイヤ
  md = MediumMoter('outD')#ペンを上下させるモーター
  #それぞれのモターの名前を定義した

** 定義した関数 [#d6ebb87e]
  def fude_u():
       md.reset()
       md.run_to_rel_pos(position_so=45, speed_sp=200, stop_action='hold')
       sleep(1)
  #筆を上げる

  def fude_u():
       md.reset()
       md.run_to_rel_pos(position_so=-45, speed_sp=200, stop_action='hold')
       sleep(1)
  #筆を下げる

  def straight():
      mb.reset()
      mc.reset()
      mb.run_forever(speed_sp=100, stop_action='hold')
      mc.run_forever(speed_sp=100, stop_action='hold')
      sleep(1.2)
      mb.stop()
      mc.stop()
  #まっすぐ進む

  def straight_s():
      mb.reset()
      mc.reset()
      mb.run_forever(speed_sp=100, stop_action='hold')
      mc.run_forever(speed_sp=100, stop_action='hold')
      sleep(0.5)
      mb.stop()
      mc.stop()
  #まっすぐ短く進む

  def straight_b():
      mb.reset()
      mc.reset()
      mb.run_forever(speed_sp=-100, stop_action='hold')
      mc.run_forever(speed_sp=-100, stop_action='hold')
      sleep(1.2)
      mb.stop()
      mc.stop()
  #後ろに進む

  def straight_b_s():
      mb.reset()
      mc.reset()
      mb.run_forever(speed_sp=-100, stop_action='hold')
      mc.run_forever(speed_sp=-100, stop_action='hold')
      sleep(0.5)
      mb.stop()
      mc.stop()
  #後ろに短く進む

  def turn_l(): #右と左を間違えたためlとなっている
      mb.reset()
      mc.reset()
      mb.run_forever(speed_sp=-100, stop_action='hold')
      mc.run_forever(speed_sp=100, stop_action='hold')
      sleep(0.65)
      mb.stop()
      mc.stop()
  #右に回転

  def turn_l_s(): #右と左を間違えたためlとなっている
      mb.reset()
      mc.reset()
      mb.run_forever(speed_sp=-100, stop_action='hold')
      mc.run_forever(speed_sp=100, stop_action='hold')
      sleep(0.3)
      mb.stop()
      mc.stop()
  #右に少し回転

  def turn_r(): #右と左を間違えたためrとなっている
      mb.reset()
      mc.reset()
      mb.run_forever(speed_sp=100, stop_action='hold')
      mc.run_forever(speed_sp=-100, stop_action='hold')
      sleep(0.65)
      mb.stop()
      mc.stop()
  #左に回転

  def turn_r_s(): #右と左を間違えたためrとなっている
      mb.reset()
      mc.reset()
      mb.run_forever(speed_sp=100, stop_action='hold')
      mc.run_forever(speed_sp=-100, stop_action='hold')
      sleep(0.3)
      mb.stop()
      mc.stop()
  #左に少し回転

** プログラム [#h49fd32a]
 最初はペンを下ろした状態で一画目を書き始める位置に右向きにセットする.
 ロボットは最初,ペンを下ろした状態で一画目を書き始める位置に右向きにセットする.

*** 松 [#r1a0eaa5]
  straight()
  fude_u()
  #1画目
  
  straight()
  turn_l()
  turn_l()
  fude_d()
  straight_b()
  straight_b()
  fude_u()
  #2画目
  
  straight()
  straight()
  turn_l_s()
  fude_d()
  straight_b()
  straight_b_s()
  straight_b_s()
  fude_u()
  #3画目
  
  straight()
  straight_s()
  straight_s()
  turn_r_s()
  turn_r_s()
  fude_d()
  straight_b()
  straight_b_s()
  straight_b_s()
  fude_u()
  #4画目

ここまでで木へん

  straight_s()
  straight_s()
  turn_r()
  turn_r_s()
  turn_l_s()
  fude_d()
  turn_l_s()
  turn_l_s()
  fude_u()
  #5画目
  
  turn_l()
  turn_l()
  turn_l()
  straight_b()
  straight_b()
  straight_b()
  straight_b_s()
  turn_r_s()
  fude_d()
  turn_r_s()
  turn_r_s()
  fude_u()
  #6画目
  
  straight_s()
  straight_s()
  straight_s()
  turn_r()
  turn_l_s()
  turn_l_s()
  fude_d()
  straight_b_s()
  straight_b_s()
  fude_u()
  
  turn_r()
  straight()
  straight()
  turn_l()
  turn_l()
  turn_l_s()
  fude_d()
  straight_b()
  fude_u()
  #7画目
  
  turn_r_s()
  fude_d()
  turn_l()
  fude_u()
  #8画目
「松」完成

***本 [#oae0e9d8]
  straight_b()
  straight_b()
  turn_l()
  turn_l_s()
  straight()
  straight()
  straight()
  turn_r_s()
  turn_r()
  turn_r()
  fude_d()
  straight()
  fude_u()
  #1画目
  
  straight()
  turn_r()
  turn_r()
  fude_d()
  straight_b()
  straight_b()
  fude_u()
  #2画目
  
  straight()
  straight()
  turn_l_s()
  fude_d()
  straight_b()
  straight_b_s()
  straight_b_s()
  fude_u()
  #3画目
  
  straight()
  straight()
  turn_r_s()
  turn_r_s()
  fude_d()
  straight_b()
  straight_b_s()
  straight_b_s()
  fude_u()
  #4画目
  
  turn_l_s()
  straight()
  straight()
  straight()
  turn_r()
  turn_r()
  straight_b()
  fude_d()
  straight_b_s()
  straight_b_s()
  fude_u()
  #5画目

「本」完成

*** 最後に [#obb7aef7]
 モーターをリセットしてプログラム終了.
  mb.reset()
  mc.reset()
  md.reset()


*完成した文字 [#w1027f0c]
 以上に説明したロボットで書いた「松本」の文字である.
#ref(./_20180601_204538.JPG,ロボットの書いた文字)

*反省点など [#k09d7e84]
 車型のロボットにしたため,ロボットを組み立てるのにはあまり苦労しなかったが,プログラミングで苦労してしまった.特にペンの位置が本体の中心からずれていたので本体を回転させるとペンの位置が中心からのずれの分だけ動いてしまったので試行錯誤で直していくしかなかった.しかしペアの人がそのずれを逆に利用して斜めの線などを書いていたところを参考にして自分のプログラムにもそのようなところを組み込んだので効率のいいプログラムを書くことができたと思う.また,車型のロボットだと1回1回の誤差がプログラムの後半になるほど大きくなってしまうことに気づいた.小さな誤差の積み重ねで大きな誤差を生んでしまったと考えられる.他にも今回は読めなくはないという程度の字で妥協してしまったり,思ったよりもプログラムが長くなってしまったり,定義した関数で右と左を間違えてややこしくなってしまったりと反省点がいくつも見つかる.今回の反省点を生かして次回の課題に臨むことができたらよいと思った.

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