*目次 [#h6b6b7f2] #contents *課題 [#jf138425] ライントレースロボットの作成 できるだけ速く、正確にライントレースすること。プログラムを簡潔に書くことを目標とした。 *コース概要 [#df407ddb] #2016a-mission2.png A地点 → P直進 → Q直進 → Q直進 → R左折 → B地点 *ロボットの形状 [#sb6c81d6] #1467898893148.jpg #1467898883732.jpg ColorSensorを本体の左寄りにすることでラインの真上をなぞるように動くようにした。 *プログラム [#wa3c55a2] !/usr/bin/python import ev3dev.ev3 as ev3 import time m = ev3.LargeMotor('outA') n = ev3.LargeMotor('outB') cs = ev3.ColorSensor('in1') s = ev3.Sound() def trace(): t0 = time.time() while time.time() - t0 < 0.22: if cs.value () > 30: m.run_forever(duty_cycle_sp=-30) n.run_forever(duty_cycle_sp=20) t0 = time.time() elif cs.value () >= 10: m.run_forever(duty_cycle_sp=35) n.run_forever(duty_cycle_sp=35) t0 = time.time() else: m.run_forever(duty_cycle_sp=20) n.run_forever(duty_cycle_sp=-30) #ラインの左側に沿って進み交差点を認知して止まる。 def straight(): m.run_forever(duty_cycle_sp=40) n.run_forever(duty_cycle_sp=30) time.sleep(0.5) #交差点を通過する。traceでは確実に交差点にまっすぐ進入できないことも多かったので少し斜めに走らせた。 def left(): m.run_forever(duty_cycle_sp=30) n.run_forever(duty_cycle_sp=-30) time.sleep(0.8) #左に90°旋回する def ring(): s.beep() #交差点進入時に音を鳴らす。 trace() ring() straight() trace() ring() straight() trace() ring() straight() trace() ring() straight() trace() ring() left() m.run_forever(duty_cycle_sp=50) n.run_forever(duty_cycle_sp=50) time.sleep(1.5) #最後の交差点で旋回したのちゴールまで駆け抜ける m.stop n.stop *結果 [#h926f50f] 46秒でゴールした。 *反省・感想 [#pbcda460] -交差点認識プログラムについて考えるのに時間をかけすぎてしまった。 -traceを改良してもっと早くゴールまでたどり着けるようにしたかった。