今回の課題1において二文字の文字を書く書道ロボットをつくりました
今回は前後を車輪、左右を歯車で動かすタイプのロボットを作成した。またペンの上げ下げにはキャタピラを使った。
↑ロボットの全容 キャタピラ部分が重いので、重心が左に寄ったがほかのモータや本体を右に持ってくることでバランスをとっている
↑歯車についた突起でペンのついた部分を押し出したり、引き戻したりして動かしている もう少し歯車を小さくすれば精密な動作ができたと思う
↑キャタピラでペンの上げ下げを行っている
#!/usr/bin/env python3 from ev3dev.ev3 import * from time import sleep ma=MediumMotor('outA') mc=LargeMotor('outC') md=LargeMotor('outD')
今回は文字を書く紙を地図のように方向を方角として関数を定義し、上下と左右で文字を書く方向を一定にすることで誤差を軽減した。
def pendown():#ぺんを下げる関数 ma.run_timed(time_sp=400, speed_sp=-100, stop_action='brake') sleep(1) def penup():#ぺんを上げる関数 ma.run_timed(time_sp=400, speed_sp=100, stop_action='brake') sleep(1) def S(x):#ぺんを南方向に進ませる関数 md.run_timed(time_sp=x, speed_sp=200, stop_action='brake') sleep(x/1000+1) def N(y):#ぺんを北方向に進ませる関数 md.run_timed(time_sp=y, speed_sp=-200, stop_action='brake') sleep(y/1000+1) def E(s):#ぺんを西方向に進ませる関数 mc.run_timed(time_sp=s, speed_sp=200, stop_action='brake') sleep(s/1000+1) def W(t):#ペンを東方向に進ませる関数 mc.run_timed(time_sp=t, speed_sp=-200, stop_action='brake') sleep(t/1000+1) def yokoset(n):#左右の位置を合わせる関数 penup() E(n) pendown() def tateset(m):#上下の位置を合わせる関数 penup() N(m) pendown()
yokoset(2400)#1画目 W(3200) S(400) yokoset(3200)#2画目 W(3200) tateset(500)#3画目 yokoset(3200) S(500) tateset(350)#4画目 W(3200) tateset(200)#5画目 yokoset(1600) S(500)
penup()#二文字目の開始位置まで移動 S(200) pendown() S(600)#1画目 tateset(600)#2画目 yokoset(800) W(2400) S(300)#3画目 yokoset(2400)#4画目 W(2400) yokoset(2400)#5画目 tateset(300) S(300)
実行結果は以下のようになった。一文字目で誤差が生じたが、何とか読み取れるものになったとは思う。
今回のロボットははじめキャタピラが使いたいという思いで作り始めたのだが、結果としてその部分が重くなってしまい、歯車で押し出したり、引き戻したりという気候でしか動かせず、精密動作のできないものができてしまった。またそのせいで誤差が生じてしまった。であるから次のロボットでは自分のやりたいこととを行いつつも、しっかりと動くロボットを作成したい。