2018b/Member/Yoshi/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
目次
#contents
*課題 [#p8ffa7cc]
今回の課題はライントレース
下の図のようなコースを各チームで作成し、「ミッション」を...
**コース [#z0c37601]
黒線の幅は20mmでなるべく均等な濃さにすること。なお図の中...
&ref(2018b/Member/Yoshi/Mission2/robot01.png,100%,完成);
**ミッション [#g0e53a91]
次のいずれかのコースで黒い線に沿って動き、途中でボールを...
***第1コース [#b648384f]
&ref(2018b/Member/Yoshi/Mission2/ロボティクス.jpg,100%,完...
1.ロボットを長方形X内におき、Aをスタート~
2.Bを右折~
3.Kで一時停止して左折~
4.Jを直進~
5.Iを直進~
6.Hを左折~
7.Gで一時停止して左折~
8.Eで一時停止して右折~
9.Lを経て正方形Y内に入って停止
(一時停止の指定がある場所は、1秒間停止すること)
ボールはロボットが弧KJIH上にある時にQ地点の空き缶に当てる
***第2コース [#u59f67a4]
&ref(2018b/Member/Yoshi/Mission2/ロボティクス2.jpg,100%,...
1.ロボットを正方形X内におき、Lをスタート~
2.Eを一時停止して直進~
3.Iを一時停止して左折~
4.Hを直進~
5.Kを直進~
6.Jを左折~
7.Cを一時停止して右折~
8.Eを一時停止して直進~
9.Gを一時停止して直進~
10.長方形X内に入って停止~
(一時停止の指定がある場所は、1秒間停止すること)
ボールはロボットが弧IHKJ上にある時にQ地点の空き缶に当てる
***注意 [#vab219ae]
・一時停止の指示がある交差点と丁字路、およびボールを投げ...
・一つの交差点(or T字路 or 直角カーブ)から次の交差点(or T...
・前の交差点からの時間や距離を微調整して交差点を判断する...
*ロボットの説明 [#k484be43]
ロボットは以下の写真のようなものにした。~
超音波センサとカラーセンサは下の方につけ、ボールを運ぶア...
今回、長めのコードが壊れていたため、通常のロボットと前後...
その時、関数を定義する際に左と右が逆転することに注意した。~
&ref(2018b/Member/Yoshi/Mission2/001.JPG,100%,完成);
**カラーセンサについて [#v9dfb4a4]
&ref(2018b/Member/Yoshi/Mission2/003.JPG,100%,完成);
カラーセンサは地面とかなり近い位置で置くようにした。~
遠い位置に置くと白と黒の見分けがつかなくなってしまうから...
また、滑らかにライントレースを行うために真ん中に置いた。
**超音波センサについて [#a3b6ab17]
&ref(2018b/Member/Yoshi/Mission2/ロボティクス3.jpg,100%,...
超音波センサーはかなり前のほうに置いた。~
カラーセンサによって場所がなかったのと、前のほうにするこ...
また、超音波センサーの値によって、空き缶の向く方向が決ま...
**アームについて [#q32f2751]
&ref(2018b/Member/Yoshi/Mission2/004.JPG,100%,完成);
アームは上のほうに置いて、位置エネルギーを利用して、ボー...
アームを上下に動かしてボールを転がす。~
ボールが移動中に落ちないように、ストッパーを付けた。
*ライントレースについて [#pb91d749]
&ref(2018b/Member/Yoshi/Mission2/ロボット.jpg,100%,完成);
上の絵は右側トレースの様子を説明したものである。~
左側トレースも同様に考えられるので、今回は右側トレースの...
図のように、白に来た時は黒の方に曲がり、黒に来たときは白...
こうすることで、くねくねしながら、ライントレースすること...
*プログラムの説明 [#bc99ed95]
**プログラムの導入 [#g55cbe87]
#!/usr/bin/env python3
from ev3dev.ev3 import *
import time
ml=LargeMotor('outA') #装置Aのモーターをml...
mr=LargeMotor('outB') #装置Bのモーターをmr...
mm=MediumMotor('outC') #装置Cのモーターをmm...
cs=ColorSensor('in1') #in1のカラーセンサー...
us=UltrasonicSensor('in2') #in2のカラーセンサー...
w=100 #速めのタイヤのスピー...
v=60 #遅めのタイヤのスピー...
u=-50 #逆回転のタイヤスピー...
**定義の導入 [#a6d7d641]
def run(): #直進するプログラム
global w #定義外にあるwを定義内に持ってく...
ml.run_forever(speed_sp=w, stop_action='brake')
mr.run_forever(speed_sp=w, stop_action='brake')
def turn_right(): #右に回転するプログラム
global w
ml.run_forever(speed_sp=w, stop_action='brake')
mr.run_forever(speed_sp=0, stop_action='brake')
def turn_left(): #左に回転するプログラム
global w
ml.run_forever(speed_sp=0, stop_action='brake')
mr.run_forever(speed_sp=w, stop_action='brake')
def curve_right(): #右にカーブするプログラム turnと...
global w
global v
ml.run_forever(speed_sp=w, stop_action='brake')
mr.run_forever(speed_sp=v, stop_action='brake')
def curve_left(): #左にカーブするプログラム turnと...
global w
global w
global v
ml.run_forever(speed_sp=v, stop_action='brake')
mr.run_forever(speed_sp=w, stop_action='brake')
def round_right(): #右に曲がるプログラム turnやcurve...
global w
global u
ml.run_forever(speed_sp=w, stop_action='brake')
mr.run_forever(speed_sp=u, stop_action='brake')
def round_left(): #左に曲がるプログラム turnやcurve...
global w
global u
ml.run_forever(speed_sp=u, stop_action='brake')
mr.run_forever(speed_sp=w, stop_action='brake')
def stand_right(): #交差点に来た際に一度右に曲がった...
ml.run_to_rel_pos(position_sp=-90, speed_sp=100, stop...
mr.run_to_rel_pos(position_sp=30, speed_sp=100, stop_...
time.sleep(1)
def stand_left(): #交差点に来た際に一度左に曲がった...
ml.run_to_rel_pos(position_sp=30, speed_sp=100, stop_...
mr.run_to_rel_pos(position_sp=-90, speed_sp=100, stop...
time.sleep(1)
def straight_right(): #右側トレースをしていて交差点に来...
stand_right()
ml.run_to_rel_pos(position_sp=60, speed_sp=100, stop_...
mr.run_to_rel_pos(position_sp=60, speed_sp=100, stop_...
time.sleep(1)
def straight_left(): #左側トレースをしていて交差点に来...
stand_left()
ml.run_to_rel_pos(position_sp=60, speed_sp=100, stop_...
mr.run_to_rel_pos(position_sp=60, speed_sp=100, stop_...
time.sleep(1)
def throw(): #球を投げるプログラム
mm.run_to_rel_pos(position_sp=60, speed_sp=100, stop_...
time.sleep(1)
mm.reset()
def round(): #その場で一回転するプログラム
ml.run_to_rel_pos(position_sp=680, speed_sp=50, stop_...
mr.run_to_rel_pos(position_sp=-680, speed_sp=50, stop...
def search(): #空き缶を探すプログラム
global x
global y
distance=2550 #空き缶との最短...
time0=time1=time.time() #time0と1に時間...
while time.time()-time0<13: #time0から13秒間...
if us.value()<distance: #もしus.value()がdistanc...
distance=us.value() #disatnceにus.va...
time1=time.time() #代入した時間をt...
print(us.value()) #いつus.value()...
x=680/13*(time1-time0) #1周を約13秒で約...
y=time1-time0 #yに時間差を代入
def hit(): #空き缶に球を充てるプログラム
ml.run_to_rel_pos(position_sp=x, speed_sp=50, stop_ac...
mr.run_to_rel_pos(position_sp=-x, speed_sp=50, stop_a...
time.sleep(y)
ml.run_to_rel_pos(position_sp=-60, speed_sp=50, stop_...
time.sleep(1)
throw() ...
ml.run_to_rel_pos(position_sp=60, speed_sp=50, stop_a...
time.sleep(1)
ml.run_to_rel_pos(position_sp=680-x, speed_sp=50, sto...
mr.run_to_rel_pos(position_sp=x-680, speed_sp=50, sto...
time.sleep(13-y)
a=8 #カラーセンサが真っ黒を検知する値 ...
b=13 #カラーセンサが黒を検知する値
c=18 #カラーセンサがグレーを検知する値
d=30 #カラーセンサが白を検知する値
s=1 #1秒を代入 これで1秒以上でカウントするようにする
h=3 #3秒を代入 これで3秒以下ではカウントしないようにする
def line_trace_right(num=1): #右側ライントレースを定義
time0=time.time()
time1=time.time()-h #3秒間はカウントしないよ...
cnt=0
while cnt<num:
if cs.value()<=a:
round_right()
elif a<=cs.value()<=b:
curve_right()
elif b<=cs.value()<=c:
run()
time0=time.time()
elif c<cs.value()<=d:
curve_left()
time0=time.time()
else:
round_left()
time0=time.time()
if time.time()-time0>=s and time.time()-time1>h:
cnt=cnt+1
time1=time.time()
time0=time.time()
print(cnt) #数えた回数を確認する...
mL.reset()
mR.reset()
ここで今回の課題で最も作るのに苦労した、この関数について...
この関数は、ライントレースする際に何回交差点を検知するか...
しかし、実際やってみると、このやり方では毎回交差点を検知...
なので、上のプログラムのように一度交差点を検知したら3秒間...
そうすることで交差点では1回、半円では2回カウントするよう...
def line_trace_left(num=1): #左側ライントレー...
time0=time.time()
time1=time.time()-h
cnt=0
while cnt<num:
if cs.value()<=a:
round_left()
elif a<=cs.value()<=b:
curve_left()
elif b<=cs.value()<=c:
run()
time0=time.time()
elif c<=cs.value()<=d:
curve_right()
time0=time.time()
else:
round_right()
time0=time.time()
if time.time()-time0>=s and time.time()-time1>h:
cnt=cnt+1
time1=time.time()
time0=time.time()
print(cnt)
ml.reset()
mr.reset()
**第2コースのプログラム [#e3be338b]
今回、自分は第2コースの担当だったので、そのプログラムを示...
line_trace_left(1)
straight_left()
time.sleep(2)
line_trace_left(1)
time.sleep(2)
line_trace_left(1)
straight_left()
round()
search()
hit()
line_trace_left(1)
straight_left()
line_trace_left(2)
stand_left()
time.sleep(2)
line_trace_right(4)
straight_right()
time.sleep(2)
line_trace_right(1)
stand_right()
ml.run_to_rel_pos(position_sp=360, speed_sp=100, stop_ac...
mr.run_to_rel_pos(position_sp=360, speed_sp=100, stop_ac...
*感想 [#m836d589]
今回の課題では、どのようにすれば交差点を検知できたり、空...
また、前回の課題に比べてもやることが多く時間もかかり大変...
次回の課題は、ロボコンなので、いままでの授業の経験を生か...
終了行:
目次
#contents
*課題 [#p8ffa7cc]
今回の課題はライントレース
下の図のようなコースを各チームで作成し、「ミッション」を...
**コース [#z0c37601]
黒線の幅は20mmでなるべく均等な濃さにすること。なお図の中...
&ref(2018b/Member/Yoshi/Mission2/robot01.png,100%,完成);
**ミッション [#g0e53a91]
次のいずれかのコースで黒い線に沿って動き、途中でボールを...
***第1コース [#b648384f]
&ref(2018b/Member/Yoshi/Mission2/ロボティクス.jpg,100%,完...
1.ロボットを長方形X内におき、Aをスタート~
2.Bを右折~
3.Kで一時停止して左折~
4.Jを直進~
5.Iを直進~
6.Hを左折~
7.Gで一時停止して左折~
8.Eで一時停止して右折~
9.Lを経て正方形Y内に入って停止
(一時停止の指定がある場所は、1秒間停止すること)
ボールはロボットが弧KJIH上にある時にQ地点の空き缶に当てる
***第2コース [#u59f67a4]
&ref(2018b/Member/Yoshi/Mission2/ロボティクス2.jpg,100%,...
1.ロボットを正方形X内におき、Lをスタート~
2.Eを一時停止して直進~
3.Iを一時停止して左折~
4.Hを直進~
5.Kを直進~
6.Jを左折~
7.Cを一時停止して右折~
8.Eを一時停止して直進~
9.Gを一時停止して直進~
10.長方形X内に入って停止~
(一時停止の指定がある場所は、1秒間停止すること)
ボールはロボットが弧IHKJ上にある時にQ地点の空き缶に当てる
***注意 [#vab219ae]
・一時停止の指示がある交差点と丁字路、およびボールを投げ...
・一つの交差点(or T字路 or 直角カーブ)から次の交差点(or T...
・前の交差点からの時間や距離を微調整して交差点を判断する...
*ロボットの説明 [#k484be43]
ロボットは以下の写真のようなものにした。~
超音波センサとカラーセンサは下の方につけ、ボールを運ぶア...
今回、長めのコードが壊れていたため、通常のロボットと前後...
その時、関数を定義する際に左と右が逆転することに注意した。~
&ref(2018b/Member/Yoshi/Mission2/001.JPG,100%,完成);
**カラーセンサについて [#v9dfb4a4]
&ref(2018b/Member/Yoshi/Mission2/003.JPG,100%,完成);
カラーセンサは地面とかなり近い位置で置くようにした。~
遠い位置に置くと白と黒の見分けがつかなくなってしまうから...
また、滑らかにライントレースを行うために真ん中に置いた。
**超音波センサについて [#a3b6ab17]
&ref(2018b/Member/Yoshi/Mission2/ロボティクス3.jpg,100%,...
超音波センサーはかなり前のほうに置いた。~
カラーセンサによって場所がなかったのと、前のほうにするこ...
また、超音波センサーの値によって、空き缶の向く方向が決ま...
**アームについて [#q32f2751]
&ref(2018b/Member/Yoshi/Mission2/004.JPG,100%,完成);
アームは上のほうに置いて、位置エネルギーを利用して、ボー...
アームを上下に動かしてボールを転がす。~
ボールが移動中に落ちないように、ストッパーを付けた。
*ライントレースについて [#pb91d749]
&ref(2018b/Member/Yoshi/Mission2/ロボット.jpg,100%,完成);
上の絵は右側トレースの様子を説明したものである。~
左側トレースも同様に考えられるので、今回は右側トレースの...
図のように、白に来た時は黒の方に曲がり、黒に来たときは白...
こうすることで、くねくねしながら、ライントレースすること...
*プログラムの説明 [#bc99ed95]
**プログラムの導入 [#g55cbe87]
#!/usr/bin/env python3
from ev3dev.ev3 import *
import time
ml=LargeMotor('outA') #装置Aのモーターをml...
mr=LargeMotor('outB') #装置Bのモーターをmr...
mm=MediumMotor('outC') #装置Cのモーターをmm...
cs=ColorSensor('in1') #in1のカラーセンサー...
us=UltrasonicSensor('in2') #in2のカラーセンサー...
w=100 #速めのタイヤのスピー...
v=60 #遅めのタイヤのスピー...
u=-50 #逆回転のタイヤスピー...
**定義の導入 [#a6d7d641]
def run(): #直進するプログラム
global w #定義外にあるwを定義内に持ってく...
ml.run_forever(speed_sp=w, stop_action='brake')
mr.run_forever(speed_sp=w, stop_action='brake')
def turn_right(): #右に回転するプログラム
global w
ml.run_forever(speed_sp=w, stop_action='brake')
mr.run_forever(speed_sp=0, stop_action='brake')
def turn_left(): #左に回転するプログラム
global w
ml.run_forever(speed_sp=0, stop_action='brake')
mr.run_forever(speed_sp=w, stop_action='brake')
def curve_right(): #右にカーブするプログラム turnと...
global w
global v
ml.run_forever(speed_sp=w, stop_action='brake')
mr.run_forever(speed_sp=v, stop_action='brake')
def curve_left(): #左にカーブするプログラム turnと...
global w
global w
global v
ml.run_forever(speed_sp=v, stop_action='brake')
mr.run_forever(speed_sp=w, stop_action='brake')
def round_right(): #右に曲がるプログラム turnやcurve...
global w
global u
ml.run_forever(speed_sp=w, stop_action='brake')
mr.run_forever(speed_sp=u, stop_action='brake')
def round_left(): #左に曲がるプログラム turnやcurve...
global w
global u
ml.run_forever(speed_sp=u, stop_action='brake')
mr.run_forever(speed_sp=w, stop_action='brake')
def stand_right(): #交差点に来た際に一度右に曲がった...
ml.run_to_rel_pos(position_sp=-90, speed_sp=100, stop...
mr.run_to_rel_pos(position_sp=30, speed_sp=100, stop_...
time.sleep(1)
def stand_left(): #交差点に来た際に一度左に曲がった...
ml.run_to_rel_pos(position_sp=30, speed_sp=100, stop_...
mr.run_to_rel_pos(position_sp=-90, speed_sp=100, stop...
time.sleep(1)
def straight_right(): #右側トレースをしていて交差点に来...
stand_right()
ml.run_to_rel_pos(position_sp=60, speed_sp=100, stop_...
mr.run_to_rel_pos(position_sp=60, speed_sp=100, stop_...
time.sleep(1)
def straight_left(): #左側トレースをしていて交差点に来...
stand_left()
ml.run_to_rel_pos(position_sp=60, speed_sp=100, stop_...
mr.run_to_rel_pos(position_sp=60, speed_sp=100, stop_...
time.sleep(1)
def throw(): #球を投げるプログラム
mm.run_to_rel_pos(position_sp=60, speed_sp=100, stop_...
time.sleep(1)
mm.reset()
def round(): #その場で一回転するプログラム
ml.run_to_rel_pos(position_sp=680, speed_sp=50, stop_...
mr.run_to_rel_pos(position_sp=-680, speed_sp=50, stop...
def search(): #空き缶を探すプログラム
global x
global y
distance=2550 #空き缶との最短...
time0=time1=time.time() #time0と1に時間...
while time.time()-time0<13: #time0から13秒間...
if us.value()<distance: #もしus.value()がdistanc...
distance=us.value() #disatnceにus.va...
time1=time.time() #代入した時間をt...
print(us.value()) #いつus.value()...
x=680/13*(time1-time0) #1周を約13秒で約...
y=time1-time0 #yに時間差を代入
def hit(): #空き缶に球を充てるプログラム
ml.run_to_rel_pos(position_sp=x, speed_sp=50, stop_ac...
mr.run_to_rel_pos(position_sp=-x, speed_sp=50, stop_a...
time.sleep(y)
ml.run_to_rel_pos(position_sp=-60, speed_sp=50, stop_...
time.sleep(1)
throw() ...
ml.run_to_rel_pos(position_sp=60, speed_sp=50, stop_a...
time.sleep(1)
ml.run_to_rel_pos(position_sp=680-x, speed_sp=50, sto...
mr.run_to_rel_pos(position_sp=x-680, speed_sp=50, sto...
time.sleep(13-y)
a=8 #カラーセンサが真っ黒を検知する値 ...
b=13 #カラーセンサが黒を検知する値
c=18 #カラーセンサがグレーを検知する値
d=30 #カラーセンサが白を検知する値
s=1 #1秒を代入 これで1秒以上でカウントするようにする
h=3 #3秒を代入 これで3秒以下ではカウントしないようにする
def line_trace_right(num=1): #右側ライントレースを定義
time0=time.time()
time1=time.time()-h #3秒間はカウントしないよ...
cnt=0
while cnt<num:
if cs.value()<=a:
round_right()
elif a<=cs.value()<=b:
curve_right()
elif b<=cs.value()<=c:
run()
time0=time.time()
elif c<cs.value()<=d:
curve_left()
time0=time.time()
else:
round_left()
time0=time.time()
if time.time()-time0>=s and time.time()-time1>h:
cnt=cnt+1
time1=time.time()
time0=time.time()
print(cnt) #数えた回数を確認する...
mL.reset()
mR.reset()
ここで今回の課題で最も作るのに苦労した、この関数について...
この関数は、ライントレースする際に何回交差点を検知するか...
しかし、実際やってみると、このやり方では毎回交差点を検知...
なので、上のプログラムのように一度交差点を検知したら3秒間...
そうすることで交差点では1回、半円では2回カウントするよう...
def line_trace_left(num=1): #左側ライントレー...
time0=time.time()
time1=time.time()-h
cnt=0
while cnt<num:
if cs.value()<=a:
round_left()
elif a<=cs.value()<=b:
curve_left()
elif b<=cs.value()<=c:
run()
time0=time.time()
elif c<=cs.value()<=d:
curve_right()
time0=time.time()
else:
round_right()
time0=time.time()
if time.time()-time0>=s and time.time()-time1>h:
cnt=cnt+1
time1=time.time()
time0=time.time()
print(cnt)
ml.reset()
mr.reset()
**第2コースのプログラム [#e3be338b]
今回、自分は第2コースの担当だったので、そのプログラムを示...
line_trace_left(1)
straight_left()
time.sleep(2)
line_trace_left(1)
time.sleep(2)
line_trace_left(1)
straight_left()
round()
search()
hit()
line_trace_left(1)
straight_left()
line_trace_left(2)
stand_left()
time.sleep(2)
line_trace_right(4)
straight_right()
time.sleep(2)
line_trace_right(1)
stand_right()
ml.run_to_rel_pos(position_sp=360, speed_sp=100, stop_ac...
mr.run_to_rel_pos(position_sp=360, speed_sp=100, stop_ac...
*感想 [#m836d589]
今回の課題では、どのようにすれば交差点を検知できたり、空...
また、前回の課題に比べてもやることが多く時間もかかり大変...
次回の課題は、ロボコンなので、いままでの授業の経験を生か...
ページ名: