[[2019a/Member]]
*目次 [#n5474560]
#contents
*課題について [#be1acf0d]
**課題内容 [#t1388e7b]
〇下の図のようなコースを各チームで作成し、「ミッション」を遂行するためのロボットを作成する。
***コース [#sb8ba9b1]
#ref(2019a/Member/kou/Mission2/2019a-mission2.png,70%)
#ref(2019a/Member/kou/Mission2/Inked2019a-mission2_LI.jpg,70%)
***ミッション [#r26cbca0]
・A地点から出発 → B → C(直進) → D(一時停止の後、直進) → E → F → G(一時停止の後、右折) → H → I → J(右折) → K(左折) → L(ピンポン玉をつかむ) → K(直進) → M(一時停止) → シュート→ A地点に入る(ゴール)~
・交差点では1秒間停止し、丁字路では直角方向に進入する時のみ一時停止すること。
*ロボットについて [#sb4ba8d1]
#ref(2019a/Member/kou/Mission2/IMG_2079.JPG,10%)
#ref(2019a/Member/kou/Mission2/IMG_2082.JPG,10%)
*プログラムについて [#n25d76b3]
**モジュールのインポートとインスタンスの作成部分 [#d98c7357]
 #!/usr/bin/env python3 
 from ev3dev.ev3 import * 
 from time import sleep #sleep関数をインポート
 a = LargeMotor('outA')  #左の車輪のモーターをa
 d = LargeMotor('outD')  #右の車輪のモーターをd
 c = MediumMotor('outB') #アーム部分のミディアムモーターをc
 cs = ColorSensor('in3') 
 cs.mode = 'COL-REFLECT' #光の反射値を読み取るモードである
**関数の作成部分 [#p7aa890f]
モーターをリセットする関数である。
 def motor_init():
    a.reset()
    c.reset()
    d.reset()

ロボットを前進、後退させる関数である。モーターを回転させる時間を変数tを用いた。~
例えばt=1000のときモーターは約1秒間回転する。
 def move_advance(t):#前進
    a.run_timed(time_sp=t, speed_sp=-100,stop_action='brake')
    d.run_timed(time_sp=t, speed_sp=-100,stop_action='brake')
    sleep(t/1000)
 def move_back(t):#後退
    a.run_timed(time_sp=t, speed_sp=100,stop_action='brake')
    d.run_timed(time_sp=t, speed_sp=100,stop_action='brake')
    sleep(t/1000)
ロボットを左回転、右回転させる関数である.~
モーターの回転をそれぞれ逆回転にして左右回転できるようにした。変数tについては前進、後退と一緒である。
 def move_left(t):#左回転
    a.run_timed(time_sp=t, speed_sp=100,stop_action='brake')
    d.run_timed(time_sp=t, speed_sp=-100,stop_action='brake')
    sleep(t/1000)
 def move_right(t):#右回転
    a.run_timed(time_sp=t, speed_sp=-100,stop_action='brake')
    d.run_timed(time_sp=t, speed_sp=100,stop_action='brake')
    sleep(t/1000)

 def line_follow(t):
    motor_init()
    t0 = time.time()
    while time.time() - t0 < t:
          if cs.value() <= 11:
             a.run_forever(speed_sp=50)
             d.run_forever(speed_sp=-100)
          else:
             a.run_forever(speed_sp=-100)
             d.run_forever(speed_sp=50)
             t0 = time.time()
    if time.time() - t0 > t:
             a.stop()
             d.stop()
             sleep(1)

 def line_follow2(t):
    motor_init()
    t0 = time.time()
    while time.time() - t0 < t:
          if cs.value() <= 11:
             a.run_forever(speed_sp=-100)
             d.run_forever(speed_sp=50)
          else:
             a.run_forever(speed_sp=50)
             d.run_forever(speed_sp=-100)
              t0 = time.time()
    if time.time() - t0 > t:
             a.stop()
             d.stop()
             sleep(1)
アーム部分を上下させる関数である。回転させる角度をtとした。
 def age(t):
    c.run_to_rel_pos(position_sp=t, speed_sp=100, stop_action='hold')
    sleep(1)
 def sage(t):
    c.run_to_rel_pos(position_sp=-t, speed_sp=100, stop_action='hold')
    sleep(1)
**実際のプログラム [#xe1796de]
 line_follow(0.8)#交差点Dまでライントレースする
 move_right(700)
 move_advance(700)
 line_follow2(1.5)
 move_right(900)
 move_advance(600)
 line_follow2(0.9)
 move_left(500)
 move_advance(500)
 line_follow2(0.7)
 move_left(500)
 move_advance(500)
 line_follow2(0.7)
 move_right(300)
 move_advance(300)
 line_follow2(0.65)
 move_advance(1500)
 move_left(1200)
 move_back(3500)
 sage(140)
 move_advance(1000)
 age(60)
 move_right(2000)
 line_follow2(1.5)
*反省・感想だお☆ [#nf54a9b5]
プルコギ&#127925;プルコギ&#127925;プルコギ&#127925;


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS