2018b/Member/KR/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
目次
#contents
*課題2について [#aa120ba5]
#ref(2018b-mission2.png)
幅20mmの黒いラインに沿って動き、途中で缶にボールを当てる...
今回のコースは以下の通りである。
1.ロボットを長方形X内におき、Aをスタート~
2.Bを右折~
3.Kで一時停止して左折~
4.Jを直進~
5.Iを直進~
6.Hを左折~
7.Gで一時停止して左折~
8.Eで一時停止して右折~
9.Lを経て正方形Y内に入って停止~
*ロボットの説明 [#bde2737d]
**全体図 [#l3cd746b]
#ref(s_IMAG0746.jpg)
上が今回使用したロボットの全体図である。~
今回はロボットはシンプルな機構のものを採用して、プログラ...
**機構の部分 [#y24795ab]
#ref(ps_IMAG0745.jpg)
緑枠の部分はカラーセンサである。カラーセンサはセンサで検...
赤枠で囲った部分が超音波センサである。発射の際のボールの...
緑枠の部分はカラーセンサである。カラーセンサはセンサで検...
青枠の部分は球の発射機構である。矢印の方向にフックのよう...
*プログラム [#za12f245]
**はじめに [#udbe0b13]
それぞれのセンサやモータを以下のように定義する。
#!/usr/bin/env python3
from ev3dev.ev3 import *
import time
from time import sleep
mR=LargeMotor('outC')
mL=LargeMotor('outB')
mM=MediumMotor('outD')
cs=ColorSensor('in3')
us=UltrasonicSensor('in1')
超音波センサのついてる方を正面として右にあるLargeMotorをm...
また発射機構の部分についているのがMediumMotorで、mMとして...
**ライントレースのプログラム [#o29a881c]
def traceR():
t0=time.time()
while time.time()-t0<0.35:
if cs.value()<35: #カラーセンサの...
turnR2()
if 35<=cs.value()<40: #カラーセンサの...
turnR1()
t0=time.time()
if 40<=cs.value()<=50: #カラーセンサの...
run()
t0=time.time()
if 50<cs.value()<=60: #カラーセンサの...
turnL1()
t0=time.time()
if cs.value()>60: #カラーセンサの...
turnL2()
t0=time.time()
mR.stop() #黒を一定の時間...
mL.stop()
今回の一番基本となるライントレースのプログラムはこれであ...
それぞれのif構文の中で使われたturnR1()などの関数は以下の...
def turnR1(): #前に進みながら右にカーブする命令を送り続...
mL.run_forever(speed_sp=100,stop_action='brake')
mR.stop()
def turnL1(): #前に進みながら左にカーブする命令を送り続...
mR.run_forever(speed_sp=100,stop_action='brake')
mL.stop()
def run(): #真っすぐ走る命令を送り続ける
mR.run_forever(speed_sp=100,stop_action='brake')
mL.run_forever(speed_sp=100,stop_action='brake')
def turnR2(): #その場で右に回る命令を送り続ける
mL.run_forever(speed_sp=100,stop_action='brake')
mR.run_forever(speed_sp=-70,stop_action='brake')
def turnL2(): #その場で左に回る命令を送り続ける
mR.run_forever(speed_sp=100,stop_action='brake')
mL.run_forever(speed_sp=-70,stop_action='brake')
検証した結果カラーセンサの値は35,40,50,60をそれぞれの命令...
また交差点で止まるために一定の時間以上黒(今回はカラーセ...
このライントレースのプログラムはラインの右側をトレースす...
def traceL():
t0=time.time()
while time.time()-t0<0.23:
if cs.value()<35: #カラーセンサの...
turnL2()
if 35<=cs.value()<40: #カラーセンサの...
turnL1()
t0=time.time()
if 40<=cs.value()<=50: #カラーセンサの...
run()
t0=time.time()
if 50<cs.value()<=60: #カラーセンサの...
turnR1()
t0=time.time()
if cs.value()>60: #カラーセンサの...
turnR2()
t0=time.time()
mR.stop() #黒を一定の時間...
mL.stop()
この左側トレースは基本的に右側トレースのものの命令をそれ...
def traceRa(t):
t1=time.time()
while time.time()-t1<t:
if cs.value()<35:
turnR2()
if 35<=cs.value()<40:
turnR1()
if 40<=cs.value()<=50:
run()
if 50<cs.value()<=60:
turnL1()
if cs.value()>60:
turnL2()
mR.stop()
mL.stop()
これは引数tの時間分止まらずにライントレースをし続けるプロ...
カラーセンサの値に伴うロボットの動作は普通のtraceR()関数...
**交差点で曲がるプログラム [#w10d1364]
def turnR3(t): #ラインを横断せずに右折する
mL.run_timed(time_sp=t,speed_sp=100,stop_action=...
mR.run_timed(time_sp=t,speed_sp=-100,stop_action...
sleep(t/1000)
mR.stop()
mL.stop()
def turnL3(t): #ラインを横断せずに左折する
mR.run_timed(time_sp=t,speed_sp=100,stop_action=...
mL.run_timed(time_sp=t,speed_sp=-100,stop_action...
sleep(t/1000)
mR.stop()
mL.stop()
def turnR4(t): #ラインを横断して右折する
mL.run_timed(time_sp=t,speed_sp=100,stop_action=...
sleep(t/1000)
mR.stop()
mL.stop()
def turnL4(t): #ラインを横断して左折する
mR.run_timed(time_sp=t,speed_sp=100,stop_action=...
sleep(t/1000)
mR.stop()
mL.stop()
ラインを横断するというのは下のオレンジ色の線のような動作...
また横断しないというのは下の水色の線のような動作をさせた...
#ref(s_oudan.png)
これらの右左折のプログラムでは引数tの値を変えることで各交...
どこで何秒指定したかは最後のまとめで記述する。
**缶の探査と発射のプログラム [#ec758d72]
まずは探査のプログラムについて
def search():
d_min=5000 #最初に仮の最小値を定める
t1=time.time()
while time.time()-t1 < 15: #15秒間回り続ける
turnR()
if us.value()<d_min: #超音波セ...
d_min=us.value() #もしも仮の...
t2=time.time() #その最小値を...
mM.reset()
mR.stop()
mL.stop()
t3=time.time()
sleep(1)
mR.run_timed(time_sp=1000*(t3-t2), speed_sp=50, ...
mL.run_timed(time_sp=1000*(t3-t2), speed_sp=-50,...
sleep(5)
次にボールを発射するプログラム
def fire(): #モータを回転させてボールにフック状のパ...
mM.run_to_abs_pos(position_sp=150,speed_sp=500,s...
ロボットを何秒回転させれば360度回転して缶を探査できるかと...
**最後の正方形に収めるためのプログラム [#rc9bf868]
def straight():
mR.run_timed(time_sp=1000, speed_sp=100, stop_ac...
mL.run_timed(time_sp=1000, speed_sp=100, stop_ac...
sleep(1)
while 70<=cs.value(): #カラーセンサがライン...
run()
mR.stop()
mL.stop()
**まとめ [#c8d123f9]
def AtoB():
traceR()
turnR3(1200)
def BtoK():
traceRa(2)
traceR()
sleep(1)
turnL4(4500)
def KtoJ():
traceL()
turnR4(1500)
def JtoI():
traceL()
search() #I地点で缶の探査を開始する
fire()
sleep(1)
turnR4(2000)
def ItoH():
traceL()
turnL4(1600)
def HtoG():
traceRa(2)
traceR()
sleep(1)
turnL4(1200)
def GtoE():
traceRa(2)
traceR()
traceRa(2)
traceR()
sleep(1)
turnR3(1200)
def EtoLtoY():
traceRa(2)
traceR()
straight()
それぞれの関数名はどの地点からどの地点へ移動するときに使...
AtoB()
BtoK()
KtoJ()
JtoI()
ItoH()
HtoG()
GtoE()
EtoLtoY()
よって最終的にロボットを動かすためのプログラムは以上のも...
*感想 [#r76497cc]
最終的な成功率としては約70%ほどだった。~
失敗する要因は曲がってほしい交差点で曲がってくれなかった...
缶の探査と発射はほぼ確実に成功したのでライントレースのプ...
終了行:
目次
#contents
*課題2について [#aa120ba5]
#ref(2018b-mission2.png)
幅20mmの黒いラインに沿って動き、途中で缶にボールを当てる...
今回のコースは以下の通りである。
1.ロボットを長方形X内におき、Aをスタート~
2.Bを右折~
3.Kで一時停止して左折~
4.Jを直進~
5.Iを直進~
6.Hを左折~
7.Gで一時停止して左折~
8.Eで一時停止して右折~
9.Lを経て正方形Y内に入って停止~
*ロボットの説明 [#bde2737d]
**全体図 [#l3cd746b]
#ref(s_IMAG0746.jpg)
上が今回使用したロボットの全体図である。~
今回はロボットはシンプルな機構のものを採用して、プログラ...
**機構の部分 [#y24795ab]
#ref(ps_IMAG0745.jpg)
緑枠の部分はカラーセンサである。カラーセンサはセンサで検...
赤枠で囲った部分が超音波センサである。発射の際のボールの...
緑枠の部分はカラーセンサである。カラーセンサはセンサで検...
青枠の部分は球の発射機構である。矢印の方向にフックのよう...
*プログラム [#za12f245]
**はじめに [#udbe0b13]
それぞれのセンサやモータを以下のように定義する。
#!/usr/bin/env python3
from ev3dev.ev3 import *
import time
from time import sleep
mR=LargeMotor('outC')
mL=LargeMotor('outB')
mM=MediumMotor('outD')
cs=ColorSensor('in3')
us=UltrasonicSensor('in1')
超音波センサのついてる方を正面として右にあるLargeMotorをm...
また発射機構の部分についているのがMediumMotorで、mMとして...
**ライントレースのプログラム [#o29a881c]
def traceR():
t0=time.time()
while time.time()-t0<0.35:
if cs.value()<35: #カラーセンサの...
turnR2()
if 35<=cs.value()<40: #カラーセンサの...
turnR1()
t0=time.time()
if 40<=cs.value()<=50: #カラーセンサの...
run()
t0=time.time()
if 50<cs.value()<=60: #カラーセンサの...
turnL1()
t0=time.time()
if cs.value()>60: #カラーセンサの...
turnL2()
t0=time.time()
mR.stop() #黒を一定の時間...
mL.stop()
今回の一番基本となるライントレースのプログラムはこれであ...
それぞれのif構文の中で使われたturnR1()などの関数は以下の...
def turnR1(): #前に進みながら右にカーブする命令を送り続...
mL.run_forever(speed_sp=100,stop_action='brake')
mR.stop()
def turnL1(): #前に進みながら左にカーブする命令を送り続...
mR.run_forever(speed_sp=100,stop_action='brake')
mL.stop()
def run(): #真っすぐ走る命令を送り続ける
mR.run_forever(speed_sp=100,stop_action='brake')
mL.run_forever(speed_sp=100,stop_action='brake')
def turnR2(): #その場で右に回る命令を送り続ける
mL.run_forever(speed_sp=100,stop_action='brake')
mR.run_forever(speed_sp=-70,stop_action='brake')
def turnL2(): #その場で左に回る命令を送り続ける
mR.run_forever(speed_sp=100,stop_action='brake')
mL.run_forever(speed_sp=-70,stop_action='brake')
検証した結果カラーセンサの値は35,40,50,60をそれぞれの命令...
また交差点で止まるために一定の時間以上黒(今回はカラーセ...
このライントレースのプログラムはラインの右側をトレースす...
def traceL():
t0=time.time()
while time.time()-t0<0.23:
if cs.value()<35: #カラーセンサの...
turnL2()
if 35<=cs.value()<40: #カラーセンサの...
turnL1()
t0=time.time()
if 40<=cs.value()<=50: #カラーセンサの...
run()
t0=time.time()
if 50<cs.value()<=60: #カラーセンサの...
turnR1()
t0=time.time()
if cs.value()>60: #カラーセンサの...
turnR2()
t0=time.time()
mR.stop() #黒を一定の時間...
mL.stop()
この左側トレースは基本的に右側トレースのものの命令をそれ...
def traceRa(t):
t1=time.time()
while time.time()-t1<t:
if cs.value()<35:
turnR2()
if 35<=cs.value()<40:
turnR1()
if 40<=cs.value()<=50:
run()
if 50<cs.value()<=60:
turnL1()
if cs.value()>60:
turnL2()
mR.stop()
mL.stop()
これは引数tの時間分止まらずにライントレースをし続けるプロ...
カラーセンサの値に伴うロボットの動作は普通のtraceR()関数...
**交差点で曲がるプログラム [#w10d1364]
def turnR3(t): #ラインを横断せずに右折する
mL.run_timed(time_sp=t,speed_sp=100,stop_action=...
mR.run_timed(time_sp=t,speed_sp=-100,stop_action...
sleep(t/1000)
mR.stop()
mL.stop()
def turnL3(t): #ラインを横断せずに左折する
mR.run_timed(time_sp=t,speed_sp=100,stop_action=...
mL.run_timed(time_sp=t,speed_sp=-100,stop_action...
sleep(t/1000)
mR.stop()
mL.stop()
def turnR4(t): #ラインを横断して右折する
mL.run_timed(time_sp=t,speed_sp=100,stop_action=...
sleep(t/1000)
mR.stop()
mL.stop()
def turnL4(t): #ラインを横断して左折する
mR.run_timed(time_sp=t,speed_sp=100,stop_action=...
sleep(t/1000)
mR.stop()
mL.stop()
ラインを横断するというのは下のオレンジ色の線のような動作...
また横断しないというのは下の水色の線のような動作をさせた...
#ref(s_oudan.png)
これらの右左折のプログラムでは引数tの値を変えることで各交...
どこで何秒指定したかは最後のまとめで記述する。
**缶の探査と発射のプログラム [#ec758d72]
まずは探査のプログラムについて
def search():
d_min=5000 #最初に仮の最小値を定める
t1=time.time()
while time.time()-t1 < 15: #15秒間回り続ける
turnR()
if us.value()<d_min: #超音波セ...
d_min=us.value() #もしも仮の...
t2=time.time() #その最小値を...
mM.reset()
mR.stop()
mL.stop()
t3=time.time()
sleep(1)
mR.run_timed(time_sp=1000*(t3-t2), speed_sp=50, ...
mL.run_timed(time_sp=1000*(t3-t2), speed_sp=-50,...
sleep(5)
次にボールを発射するプログラム
def fire(): #モータを回転させてボールにフック状のパ...
mM.run_to_abs_pos(position_sp=150,speed_sp=500,s...
ロボットを何秒回転させれば360度回転して缶を探査できるかと...
**最後の正方形に収めるためのプログラム [#rc9bf868]
def straight():
mR.run_timed(time_sp=1000, speed_sp=100, stop_ac...
mL.run_timed(time_sp=1000, speed_sp=100, stop_ac...
sleep(1)
while 70<=cs.value(): #カラーセンサがライン...
run()
mR.stop()
mL.stop()
**まとめ [#c8d123f9]
def AtoB():
traceR()
turnR3(1200)
def BtoK():
traceRa(2)
traceR()
sleep(1)
turnL4(4500)
def KtoJ():
traceL()
turnR4(1500)
def JtoI():
traceL()
search() #I地点で缶の探査を開始する
fire()
sleep(1)
turnR4(2000)
def ItoH():
traceL()
turnL4(1600)
def HtoG():
traceRa(2)
traceR()
sleep(1)
turnL4(1200)
def GtoE():
traceRa(2)
traceR()
traceRa(2)
traceR()
sleep(1)
turnR3(1200)
def EtoLtoY():
traceRa(2)
traceR()
straight()
それぞれの関数名はどの地点からどの地点へ移動するときに使...
AtoB()
BtoK()
KtoJ()
JtoI()
ItoH()
HtoG()
GtoE()
EtoLtoY()
よって最終的にロボットを動かすためのプログラムは以上のも...
*感想 [#r76497cc]
最終的な成功率としては約70%ほどだった。~
失敗する要因は曲がってほしい交差点で曲がってくれなかった...
缶の探査と発射はほぼ確実に成功したのでライントレースのプ...
ページ名: