2016a/Member/taken/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*目次 [#h6b6b7f2]
#contents
*課題 [#jf138425]
ライントレースロボットの作成
できるだけ速く、正確にライントレースすること。プログラムを簡潔に書くことを目標とした。
*コース概要 [#df407ddb]
#ref(./2016a-mission2.png,100%)
A地点 → P直進 → Q直進 → Q直進 → R左折 → B地点
*ロボットの形状 [#sb6c81d6]
#ref(./1467898893148.jpg,25%)
#ref(./1467898883732.jpg,25%)
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(): #ライン上、ライン境界、ライン外の三段階で明るさを感知しライン境界では直進し他の場合は境界方向に曲がりジグザグ走行する。0.22秒以上ライン上にあるときにそれを交差点と判断して停止する。
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(): #交差点を通過する。traceでは確実に交差点にまっすぐ進入できないことも多かったので少し斜めに走らせた。
m.run_forever(duty_cycle_sp=40)
n.run_forever(duty_cycle_sp=30)
time.sleep(0.5)
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を改良してもっと早くゴールまでたどり着けるようにしたかった。
終了行:
*目次 [#h6b6b7f2]
#contents
*課題 [#jf138425]
ライントレースロボットの作成
できるだけ速く、正確にライントレースすること。プログラムを簡潔に書くことを目標とした。
*コース概要 [#df407ddb]
#ref(./2016a-mission2.png,100%)
A地点 → P直進 → Q直進 → Q直進 → R左折 → B地点
*ロボットの形状 [#sb6c81d6]
#ref(./1467898893148.jpg,25%)
#ref(./1467898883732.jpg,25%)
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(): #ライン上、ライン境界、ライン外の三段階で明るさを感知しライン境界では直進し他の場合は境界方向に曲がりジグザグ走行する。0.22秒以上ライン上にあるときにそれを交差点と判断して停止する。
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(): #交差点を通過する。traceでは確実に交差点にまっすぐ進入できないことも多かったので少し斜めに走らせた。
m.run_forever(duty_cycle_sp=40)
n.run_forever(duty_cycle_sp=30)
time.sleep(0.5)
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を改良してもっと早くゴールまでたどり着けるようにしたかった。
ページ名: