[[2016a/Member]]

#contents
*内容 [#n9a47e72]
今回の課題はライントレースをすることである。~
今回自分がたどるルートは地点B→地点R→右折→地点Q→直進→地点Q→直進→地点P→右折→地点S→右折→地点Cです。
#ref(line01.jpg)
*ロボットについて [#eef3a4a8]
#ref(robot2-1-1.jpg)
ロボットの中心がラインの中心に重なるように光センサーの設置位置は中心から左に寄せて設置しました。
#ref(robot2-2-1.jpg)
光センターはラインを判別しやすいように、できる限り地面に近づくように設置しました。~
*プログラム [#o746260a]

 #!/usr/bin/python
 # -*- coding: utf-8 -*-

 import ev3dev.ev3 as ev3
**ロボットを動かすための設定をする。 [#t7a09902]
 MR = ev3.LargeMotor('outA') #右側のモーターを出力ポートAで制御
 ML = ev3.LargeMotor('outB')  #左側のモーターを出力ポートBで制御
 cs = ev3.ColorSensor('in1')  #光センサーのデータを入力ポート1で受信
 S = ev3.Sound()

**定義する [#pc425198]
ロボットを停止させるプログラムを st() のみで表せるように設定する。
 def st():
      MR.stop()      #右側のモーターを停止
      ML.stop()   #左側のモーターを停止

ライントレースのプログラムは複雑なため、複数回書くと間違える確率が高くなるため、~
line(a)  で表すための設定をする。
 def line(a):
       t0 = time.time()
       while time.time() - t0 < a:
                if cs.value() > 30:  #センサーが感知した光の明るさが30以上の時
                         MR.run_forever(duty_cycle_sp=-30)
                         ML.run_forever(duty_cycle_sp=20)  #車体を右に回転させる
                         t0 = time.time()
                elif cs.value() >= 10:  #光センサーが感知した光の明るさが10以上30以下の時
                         MR.run_forever(duty_cycle_sp=35)
                         ML.run_forever(duty_cycle_sp=35)  #車体を直進させる
                         t0 = time.time()
                else:
                         MR.run_forever(duty_cycle_sp=20)
                         ML.run_forever(duty_cycle_sp=-30)
ロボットが前後左右に動くプログラムを run(r,l,t) で表すための設定する。 
 def run(r,l,t):
          MR.run_forever(duty_cycle_sp=r)  #右側モーターの出力をrに設定
          ML.run_forever(duty_cycle_sp=l)  #左側モーターの出力をlに設定
          time.sleep(t)  #t秒間動き続ける
          MR.stop()  #右側モーターを停止
          ML.stop()  #左側モーターを停止
ロボットが交差点を右折するためのプログラムを R(b) で表すための設定をする。
 def R(b):
         MR.run_forever(duty_cycle_sp=-30)
         ML.run_forever(duty_cycle_sp=20)
         time.sleep(1)
         MR.stop()
         ML.stop()
         MR.run_forever(duty_cycle_sp=30)
         ML.run_forever(duty_cycle_sp=30)
         time.sleep(b)
         MR.stop()
         ML.stop() 
**実際に走行するためのプログラム [#fda4688e]

 line(0.22)
 S.beep()
 R(0.75)
 line(0.245)
 S.beep()
 run(-30,20,0.22)
 run(50,50,0.5)
 line(0.22)
 S.beep()
 run(-30,20,0.22)
 run(50,50,0.3)
 line(0.22)
 S.beep()
 R(0.75)
 line(0.22)
 S.beep()
 R(0.75)
 line(0.22)
 S.beep()
 run(-30,20,0.22)
 run(50,50,0.3)
 run(100,100,1)
 st()

*結果・考察 [#vd19bc09]

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