*目次 [#h6b6b7f2]
#contents

*課題 [#jf138425]
ライントレースロボットの作成

できるだけ速く、正確にライントレースすること。プログラムを簡潔に書くことを目標とした。

*コース概要 [#df407ddb]
#2016a-mission2.png

#ref(./2016a-mission2.png,100%)
A地点 → P直進 → Q直進 → Q直進 → R左折 → B地点

*ロボットの形状 [#sb6c81d6]
#1467898893148.jpg
#1467898883732.jpg

ColorSensorを本体の左寄りにすることでラインの真上をなぞるように動くようにした。
#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():
 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)   #ラインの左側に沿って進み交差点を認知して止まる。
                        n.run_forever(duty_cycle_sp=-30)  

 def straight():
 def straight():  #交差点を通過する。traceでは確実に交差点にまっすぐ進入できないことも多かったので少し斜めに走らせた。
        m.run_forever(duty_cycle_sp=40)
        n.run_forever(duty_cycle_sp=30)
        time.sleep(0.5)  #交差点を通過する。traceでは確実に交差点にまっすぐ進入できないことも多かったので少し斜めに走らせた。
        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() #交差点進入時に音を鳴らす。
 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を改良してもっと早くゴールまでたどり着けるようにしたかった。


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