目次 #contents *はじめに [#e79d92f4] 今回の課題は、自分の似顔絵を描くロボットです。~ A4の紙に自分の顔の特徴をとらえた似顔絵を描きなさい、という課題です。~ 正直自分は特徴のない薄い顔なのでしんどいです。 *ロボットの紹介 [#jb5ca23c] #ref(FullSizeRender.jpg) #ref(FullSizeRender (1).jpg) EV3というロボットを使いました!~ 最新の機械なので、とても綺麗で性能がいいです。 *ロボットの動作・プログラムの説明 [#bdef6d88] ・円を描くのが難しいので、なるべく直線で描く。~ ・一筆書きは不可能なので、しっかりペンを上げ下げさせる。~ ・少しでも自分の顔の特徴をとらえた似顔絵にする。~ ・描いでいく内に出てくる誤差が目立たないように細かいパーツから先に描く。 という事を大事にしてロボットの動作・プログラムを考えました。 プログラムはこんな感じです↓ #!/usr/bin/python import ev3dev.ev3 as ev3 import time motor_left = ev3.LargeMotor('outA') //左車輪のモーター motor_right = ev3.LargeMotor('outB') //右車輪のモーター motor_front = ev3.MediumMotor('outC') //ペンを動かす前方のモーター def forward(t,dl,dr): motor_left.run_forever(duty_cycle_sp=dl) motor_right.run_forever(duty_cycle_sp=dr) time.sleep(t/1000) motor_left.stop() motor_right.stop() def pen(t,df): motor_front.run_forever(duty_cycle_sp=df) time.sleep(t/1000) motor_front.stop() //ここでforwardとpenを定義することで、下記のプログラムの通り、プログラムを単純に、簡潔にすることができる。 pen(1000,-38) //1000=1秒です。 time.sleep(2) forward(1000,-15,15) pen(1000,50) time.sleep(1) forward(1000,-12,-17) time.sleep(2) pen(1000,-38) time.sleep(2) forward(1000,-12,-12) time.sleep(1) forward(1000,-20,0) pen(1000,50) forward(2000,25,25) forward(1000,-26,26) forward(1000,-30,-30) pen(1000,-38) forward(1000,-15,-15) time.sleep(1) pen(1000,50) forward(1000,-15,-15) pen(1000,-38) forward(1000,-15,-15) time.sleep(1) pen(1000,50) forward(1000,35,35) pen(1000,-38) forward(1000,28,-36) time.sleep(1) forward(1000,-18,-25) pen(1000,50) forward(1000,-10,-60) forward(1000,-55,0) forward(1000,10,10) pen(1000,-38) forward(1000,35,0) pen(1000,50) forward(1000,-28,0) time.sleep(1) pen(1000,-38) time.sleep(2) forward(2000,15,25) pen(1000,50) exit() 数字の前に「−」をつけることで、車輪を逆回転させることができます。~ そのことを利用して、回転する際、一方の車輪をもう片方の車輪と逆回転させることでよりコンパクトにロボットを動かすことができるようになります。 **ロボットの動きの詳細 [#i4d0f5d0]