#author("2019-11-15T01:16:22+09:00","traffic","traffic") [[2019b/Member]] #contents ***課題1:お絵かきロボット [#z9cb326c] [[詳細>http://yakushi.shinshu-u.ac.jp/robotics/?2019b/Mission1]] **ロボットの説明 [#mb5fb24a] 今回、動作確認等に時間がかかったのと授業時間外でロボットを触る時間があまり取れなかったため、ロボットにはあまり工夫することができなかった。~ (画像)~ ペンを両側から固定した。ペンは筆圧のあまり関係ないボールペンを使用した。 **プログラムの説明 [#m1a588c3] 今回は、Pythonのタートルグラフィックスで書いた物をプログラムそのまま(最初の一文のfrom turtle import*を除く)でロボットに書かせることを目標とした。 *ペンの上げ下げ [#kb6102f2] penup()、pendown()という関数を製作した from ev3dev2.motor import MediumMotor OUTPUT_A motor_arm = MediumMotor(OUTPUT_A) def penup(): motor_arm.for_on_degrees(5,30) def pendown(): motor_arm.for_on_degrees(-5,30) *前進、後退 [#z0d9a34d] forward(距離)、backward(距離)の関数を製作~ forward(150)を速度=30でタイヤが一回転するとした def ev3dev2.motor import MoveTank OUTPUT_B,OUTPUT_C tank_drive = MoveTank(OUTPUT_B,OUTPUT_C) def forward(a): tank_drive.for_on degrees(30,30,int(a)/150*360) def backward(b): tank_drive.for_on_degrees(-30,-30,int(b)/150*360) *右左折 [#bd1c1798] left(角度)、right(角度)の関数を製作~ 左回転の場合、右タイヤ速度=30、左=-30、角度685度で一回転したので、それを基準にした。~ また、曲がったときペン先が曲がる前の位置とズレが生じるため、前進して曲がった後に後退する機構にした。~ (画像) def left(c): penup() forward(70) tank_drive.on_for_degrees(30,-30,int(c)/360*685) backward(60) pendown() def right(d): penup() forward(70) tank_drive.on_for_degrees(-30,30,int(d)/360*685) backward(60) pendown() *turtle graphicsでのデザイン [#z66c4c97] 都合上最初にgotoやsethを使用しているが、ロボットで動かす際は手動で行えば良いのでそちらでは省いている。 from turtle import* penup() goto(-100,100) pendown() seth(270) forward(150) left(55) forward(110) left(70) forward(110) left(55) forward(150) penup() backward(40) left(90) forward(20) pendown() forward(50) penup() forward(40) pendown() forward(50) penup() backward(70) left(90) forward(40) pendown() forward(30) left(45) forward(15) penup() right(135) forward(40) left(90) forward(40) left(90) pendown() for i in range(5): forward(20) left(10) mainloop() done() #ref(2019b/Member/traffic/Mission1/turtle.png,40%,turtle)