今まで住んだことのある都道府県名,市町村名,地区名などの中から2文字以上のものを選んでそれをA4の紙に書くロボットの作成.
自分は「松本」という字を書くロボットを作成した.
この画像は完成したロボットの画像である.2つのタイヤを回して移動したり回転したりしながら文字を書く.
工夫した点は2つあり,1つ目はどのようにペンを持つか,2つ目はペンの上げ下げである.
付属のパーツのみでペンを持つには工夫が必要だった.画像を見てわかるようにペンを下ろして字を書く際に前後左右はもちろん,上下にもずれないようにしっかりとペンを固定した.
ペンを上下に動かそうと考えた時,まずモーターの回転運動を上下運動に変換する仕組みが必要だった.その問題は上の画像のパーツを使用することで解決された.
1枚目がペンを上げた時,2枚目がペンを下げた時の画像である.
EV3に付属していたロボットのパンフレットのサッカーロボットを参考にした.
今回のプログラミングは最初に使う動きをすべて関数として定義してからその関数のみで組み立てた.
mb = LargeMoter('outB')#右タイヤ mc = LargeMoter('outC')#左タイヤ md = MediumMoter('outD')#ペンを上下させるモーター #それぞれのモターの名前を定義した
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() #左に少し回転
ロボットは最初,ペンを下ろした状態で一画目を書き始める位置に右向きにセットする.
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画目
「松」完成
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画目
「本」完成
モーターをリセットしてプログラム終了.
mb.reset() mc.reset() md.reset()
以上に説明したロボットで書いた「松本」の文字である.
車型のロボットにしたため,ロボットを組み立てるのにはあまり苦労しなかったが,プログラミングで苦労してしまった.特にペンの位置が本体の中心からずれていたので本体を回転させるとペンの位置が中心からのずれの分だけ動いてしまったので試行錯誤で直していくしかなかった.しかしペアの人がそのずれを逆に利用して斜めの線などを書いていたところを参考にして自分のプログラムにもそのようなところを組み込んだので効率のいいプログラムを書くことができたと思う.また,車型のロボットだと1回1回の誤差がプログラムの後半になるほど大きくなってしまうことに気づいた.小さな誤差の積み重ねで大きな誤差を生んでしまったと考えられる.他にも今回は読めなくはないという程度の字で妥協してしまったり,思ったよりもプログラムが長くなってしまったり,定義した関数で右と左を間違えてややこしくなってしまったりと反省点がいくつも見つかる.今回の反省点を生かして次回の課題に臨むことができたらよいと思った.