2019a/Member/hiroe/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
#contents
*課題2 [#bc070098]
黒い線に沿って決められたコースを進みピンポン球を途中でつ...
**コース [#l73ed32a]
A地点から出発 → B → C(直進) → D(一時停止の後、直進) → E →...
のコースにした。
&ref(2019a/Member/hiroe/Mission2/2019a-mission2.png,50%,...
*ロボット [#ceec241e]
&ref(2019a/Member/hiroe/Mission2/robo1.jpg,20%,robo);
なるべくカラーセンサーが2つのタイヤの真ん中にくるように...
&ref(2019a/Member/hiroe/Mission2/robo4.jpg,20%,robo4);
球を拾うアームをカラーセンサーの前に設置した。このアーム...
&ref(2019a/Member/hiroe/Mission2/robo2.jpg,20%,robo2);
*ライントレース [#p0767076]
ライントレースの基本的な方針は以下の通りである。カラーセ...
&ref(2019a/Member/hiroe/Mission2/暗い1.jpg,50%,暗い);
セッティングする位置をコースにあまりかぶらないようにする...
&ref(2019a/Member/hiroe/Mission2/暗くなる.jpg,50%,暗くな...
それぞれの明るさの値は下図の通りである。実際に走らせる時...
&ref(2019a/Member/hiroe/Mission2/明るさの値.jpg,50%,明る...
この下写真でカラーセンサーは50を返す。
&ref(2019a/Member/hiroe/Mission2/robo5.jpg,20%,robo5);
*プログラム [#w9879415]
**始めに [#l39b5294]
-ev3dev用に書かれたpythonライブラリやsleep関数などを導入...
#!/usr/bin/env python3
from ev3dev.ev3 import *
from time import *
m = LargeMotor('outA')
n = LargeMotor('outB')
l = MidiumMoter('outC')
cs = ColorSensor('in2')
cs.mode = 'COL-REFLECT'
mは左側の車輪を動かすモーター、nは右側の車輪を動かすモー...
d_sp=150)
n.run_timed(time_sp=100, speed_sp=150)
def back():
m.run_timed(time_sp=100, speed_sp=-150)
n.run_timed(time_sp=100, speed_sp=-150)
前回の「機体を動かすスピードが速すぎる(speed_sp=500)と...
def Rturn(x):
m.run_to_rel_pos(position_sp=10+x, speed_sp=100, sto...
n.run_to_rel_pos(position_sp=0, speed_sp=100, stop_a...
def Lturn(x):
m.run_to_rel_pos(position_sp=0, speed_sp=100, stop_a...
n.run_to_rel_pos(position_sp=10+x, speed_sp=100, sto...
Lturnで右タイヤを軸に左回転、Rturnで左タイヤを軸に右回転...
def RRturn(x):
m.run_to_rel_pos(position_sp=10+x, speed_sp=100, sto...
n.run_to_rel_pos(position_sp=-10-x, speed_sp=100, st...
def LLturn(x):
m.run_to_rel_pos(position_sp=-10-x, speed_sp=100, st...
n.run_to_rel_pos(position_sp=10+x, speed_sp=100, sto...
RRturnで機体を中心に右回転、LLturnで機体を中心に左回転す...
def armup():
l.run_to_abs_pos(position_sp=100,speed_sp=100,stop_a...
sleep(0.1)
def armdown():
l.run_to_abs_pos(position_sp=-100,speed_sp=100,stop_...
sleep(0.1)
armup()でアームを上げ、armdown()で下げる。大きい角度上げ...
**コース分け [#hfa5b73e]
コースを下図のようにいくつかのブロックに分けてプログラム...
&ref(2019a/Member/hiroe/Mission2/コースブロック.jpg,50%,...
**第1ブロック(赤) [#aea53e1d]
第1ブロックではCとDに交差点があり、そこを直進する必要が...
def tyoku():
a=cs.value()
while(a<15):
run()
sleep(0.1)
a=cs.value()
1つめの交差点でtyoku関数を使い、2つめの交差点で1秒slee...
&ref(2019a/Member/hiroe/Mission2/ちょく.jpg,50%,ちょく);
これを防ぐために「1つめの交差点を認識してからしばらくは...
c=0 #交差点の数
d=40 #ループした数(1つめの交差点からループした回数を数...
while True:
d=d+1
start=cs.value()
if (start>=15 and start<=50) or (start<15 and d<=40)...
Rturn(0)
elif start>=65: #左回転
Lturn(0)
elif start<15 and d>40: #交差点 40回ループするま...
c=c+1
if c==1: #1つめの交差点
d=0 #0回目としループした回数を数える
if c==2: #2つめの交差点
sleep(1) #1秒間停止
tyoku()
else: #直進
run()
sleep(0.1)
これで第1ブロックを通過出来る。
**第2ブロック(橙) [#y0334ce2]
E,Fの90°回転で、右タイヤを軸とする右回転をすると上手くい...
&ref(2019a/Member/hiroe/Mission2/飛び越える.jpg,50%,飛び...
&ref(2019a/Member/hiroe/Mission2/飛び越えない.jpg,50%,飛...
よって、機体を中心とした回転にする必要がある。新しい関数R...
def Rmaga():
a=cs.value()
while(a<50):
sleep(0.1)
RRturn(0)
sleep(0.1)
run()
a=cs.value()
この関数がしている事はtyoku関数とほとんど同じである。Rmag...
E,F以外の道のりでしていることは第1ブロックと同じであるの...
while True:
d=d+1
start=cs.value()
if (start>=15 and start<=50) or (start<15 and d<=40)...
Rturn(0)
elif start>=65: #左回転
Lturn(0)
elif start<15 and d>40: #交差点 40回ループするま...
c=c+1
if c==1: #1つめの交差点
d=0 #0回目としループした回数を数える
tyoku()
if c==2: #2つめの交差点
sleep(1) #1秒間停止
tyoku()
if c==3 or c==4:
sleep(1)
Rmaga()
if c==4: #4つめの交差点でこのWhile文を抜ける
break
else: #直進
run()
sleep(0.1)
**第3ブロック(黄) [#fb2914a8]
交差点GはRmaga関数、H,Iはtyoku関数で通過できる。
交差点JからKに行くまでに機体を直線KLに対して垂直にしたい...
&ref(2019a/Member/hiroe/Mission2/60.jpg,25%,60);
for n_1 in range(15):
sleep(0.1)
RRturn(0)
sleep(0.1)
run()
第3ブロックの円は第1ブロックのカーブに比べ曲率が大きく...
第3ブロックのプログラムは以下の通りになる。
start=cs.value()
while True:
start=cs.value()
if start>=15 and start<=50:
Rturn(0)
elif start>=65:
Lturn(70)
elif start<15:
c=c+1
if c==1:
sleep(1) #Gで一時停止
Rmaga()
if c==2 or c==3:
tyoku()
if c==4:
for n_1 in range(15):
sleep(0.1)
RRturn(0)
sleep(0.1)
run()
break
else:
run()
sleep(0.1)
**第4ブロック(緑) [#i9183acc]
第4ブロックでは球を拾う動作が入る。
-機体を球の方に向くように90°回転。…?
-少しバックする。(アームが長くこのままアームを下ろすと球...
-アームを下げる。…?
-Lまで進む。(明るくなるまで進む)…?
-アームを上げる。…?
-機体を180°回転…?
この6つの動作で球を拾い第4ブロックは通過できる。ポイント...
第4ブロックのプログラムは以下の通りになる。
for n_1 in range(18): #?
sleep(0.1)
LLturn(0)
sleep(0.1)
run()
for n_2 in range(10): #?
back()
sleep(0.1)
armdown() #?
while True: #?
start=cs.value()
if start>80:
break
run()
sleep(0.1)
armup() #?
for n_3 in range(36): #?
sleep(0.1)
RRturn(0)
sleep(0.1)
**第5ブロック(青) [#m5feba9b]
第4ブロックのポイントとして述べたように第4ブロックの動...
&ref(2019a/Member/hiroe/Mission2/地点L.jpg,40%,60);
理論上機体は直線KLに対して平行になっているはずである。し...
第5ブロックの開始時ではラインのど真ん中にあり、機体が右...
&ref(2019a/Member/hiroe/Mission2/ラスト.jpg,40%,ラスト);
第5ブロックのプログラムは以下の通りになる。
while True:
start=cs.value()
if start>=15 and start<=50:
Rturn(0)
elif start>=65:
Lturn(0)
elif start<15:
c=c+1
if c==1 or c==2:
sleep(0.1)
tyoku()
if c==3:
sleep(1)
break
else:
run()
sleep(0.1)
armdown()
**実装プログラム [#m31d2a1c]
最後に課題2を達成するためにこれまで載せてきたプログラム...
#!/usr/bin/env python3
from ev3dev.ev3 import *
from time import *
m = LargeMotor('outA')
n = LargeMotor('outB')
l = MediumMotor('outC')
cs = ColorSensor('in2')
cs.mode = 'COL-REFLECT'
def run():
m.run_timed(time_sp=100, speed_sp=150)
n.run_timed(time_sp=100, speed_sp=150)
def back():
m.run_timed(time_sp=100, speed_sp=-150)
n.run_timed(time_sp=100, speed_sp=-150)
def Rturn(x):
m.run_to_rel_pos(position_sp=10+x, speed_sp=100, sto...
n.run_to_rel_pos(position_sp=0, speed_sp=100, stop_a...
def Lturn(x):
m.run_to_rel_pos(position_sp=0, speed_sp=100, stop_a...
n.run_to_rel_pos(position_sp=10+x, speed_sp=100, sto...
def RRturn(x):
m.run_to_rel_pos(position_sp=10+x, speed_sp=100, sto...
n.run_to_rel_pos(position_sp=-10-x, speed_sp=100, st...
def LLturn(x):
m.run_to_rel_pos(position_sp=-10-x, speed_sp=100, st...
n.run_to_rel_pos(position_sp=10+x, speed_sp=100, sto...
def armup():
l.run_to_abs_pos(position_sp=100,speed_sp=100,stop_a...
sleep(0.1)
def armdown():
l.run_to_abs_pos(position_sp=-100,speed_sp=100,stop_...
sleep(0.1)
def tyoku():
a=cs.value()
while(a<15):
run()
sleep(0.1)
a=cs.value()
def Rmaga():
a=cs.value()
while(a<50):
sleep(0.1)
RRturn(0)
sleep(0.1)
run()
a=cs.value()
c=0
d=0
while True:
d=d+1
start=cs.value()
if (start>=15 and start<=50) or (start<15 and d<=40):
Rturn(0)
elif start>=65:
Lturn(0)
elif start<15 and d>40:
c=c+1
if c==1:
d=0
tyoku()
if c==2:
sleep(1)
tyoku()
if c==3 or c==4:
sleep(1)
Rmaga()
if c==4:
break
else:
run()
sleep(0.1)
c=0
start=cs.value()
while True:
start=cs.value()
if start>=15 and start<=50:
Rturn(0)
elif start>=65:
Lturn(70)
elif start<15:
c=c+1
if c==1:
sleep(1)
Rmaga()
if c==2 or c==3:
tyoku()
if c==4:
for n_1 in range(15):
sleep(0.1)
RRturn(0)
sleep(0.1)
run()
break
else:
run()
sleep(0.1)
for n_1 in range(18):
sleep(0.1)
LLturn(0)
sleep(0.1)
run()
for n_2 in range(10):
back()
sleep(0.1)
armdown()
while True:
start=cs.value()
if start>80:
break
run()
sleep(0.1)
armup()
for n_3 in range(36):
sleep(0.1)
RRturn(0)
sleep(0.1)
c=0
while True:
start=cs.value()
if start>=15 and start<=50:
Rturn(0)
elif start>=65:
Lturn(0)
elif start<15:
c=c+1
if c==1 or c==2:
sleep(0.1)
tyoku()
if c==3:
sleep(1)
break
else:
run()
sleep(0.1)
armdown()
*反省 [#t1e44ef7]
-今回はコースをブロックで分けることによりブロックでの難所...
-ブロックに分けることで良い点もあったが悪い点もあった。ブ...
-第4ブロックなど、コースありきのプログラムになってしまい...
今日の訪問者数&counter(today);人
昨日の訪問者数&counter(yesterday);人
合計訪問者数&counter(all);人
終了行:
#contents
*課題2 [#bc070098]
黒い線に沿って決められたコースを進みピンポン球を途中でつ...
**コース [#l73ed32a]
A地点から出発 → B → C(直進) → D(一時停止の後、直進) → E →...
のコースにした。
&ref(2019a/Member/hiroe/Mission2/2019a-mission2.png,50%,...
*ロボット [#ceec241e]
&ref(2019a/Member/hiroe/Mission2/robo1.jpg,20%,robo);
なるべくカラーセンサーが2つのタイヤの真ん中にくるように...
&ref(2019a/Member/hiroe/Mission2/robo4.jpg,20%,robo4);
球を拾うアームをカラーセンサーの前に設置した。このアーム...
&ref(2019a/Member/hiroe/Mission2/robo2.jpg,20%,robo2);
*ライントレース [#p0767076]
ライントレースの基本的な方針は以下の通りである。カラーセ...
&ref(2019a/Member/hiroe/Mission2/暗い1.jpg,50%,暗い);
セッティングする位置をコースにあまりかぶらないようにする...
&ref(2019a/Member/hiroe/Mission2/暗くなる.jpg,50%,暗くな...
それぞれの明るさの値は下図の通りである。実際に走らせる時...
&ref(2019a/Member/hiroe/Mission2/明るさの値.jpg,50%,明る...
この下写真でカラーセンサーは50を返す。
&ref(2019a/Member/hiroe/Mission2/robo5.jpg,20%,robo5);
*プログラム [#w9879415]
**始めに [#l39b5294]
-ev3dev用に書かれたpythonライブラリやsleep関数などを導入...
#!/usr/bin/env python3
from ev3dev.ev3 import *
from time import *
m = LargeMotor('outA')
n = LargeMotor('outB')
l = MidiumMoter('outC')
cs = ColorSensor('in2')
cs.mode = 'COL-REFLECT'
mは左側の車輪を動かすモーター、nは右側の車輪を動かすモー...
d_sp=150)
n.run_timed(time_sp=100, speed_sp=150)
def back():
m.run_timed(time_sp=100, speed_sp=-150)
n.run_timed(time_sp=100, speed_sp=-150)
前回の「機体を動かすスピードが速すぎる(speed_sp=500)と...
def Rturn(x):
m.run_to_rel_pos(position_sp=10+x, speed_sp=100, sto...
n.run_to_rel_pos(position_sp=0, speed_sp=100, stop_a...
def Lturn(x):
m.run_to_rel_pos(position_sp=0, speed_sp=100, stop_a...
n.run_to_rel_pos(position_sp=10+x, speed_sp=100, sto...
Lturnで右タイヤを軸に左回転、Rturnで左タイヤを軸に右回転...
def RRturn(x):
m.run_to_rel_pos(position_sp=10+x, speed_sp=100, sto...
n.run_to_rel_pos(position_sp=-10-x, speed_sp=100, st...
def LLturn(x):
m.run_to_rel_pos(position_sp=-10-x, speed_sp=100, st...
n.run_to_rel_pos(position_sp=10+x, speed_sp=100, sto...
RRturnで機体を中心に右回転、LLturnで機体を中心に左回転す...
def armup():
l.run_to_abs_pos(position_sp=100,speed_sp=100,stop_a...
sleep(0.1)
def armdown():
l.run_to_abs_pos(position_sp=-100,speed_sp=100,stop_...
sleep(0.1)
armup()でアームを上げ、armdown()で下げる。大きい角度上げ...
**コース分け [#hfa5b73e]
コースを下図のようにいくつかのブロックに分けてプログラム...
&ref(2019a/Member/hiroe/Mission2/コースブロック.jpg,50%,...
**第1ブロック(赤) [#aea53e1d]
第1ブロックではCとDに交差点があり、そこを直進する必要が...
def tyoku():
a=cs.value()
while(a<15):
run()
sleep(0.1)
a=cs.value()
1つめの交差点でtyoku関数を使い、2つめの交差点で1秒slee...
&ref(2019a/Member/hiroe/Mission2/ちょく.jpg,50%,ちょく);
これを防ぐために「1つめの交差点を認識してからしばらくは...
c=0 #交差点の数
d=40 #ループした数(1つめの交差点からループした回数を数...
while True:
d=d+1
start=cs.value()
if (start>=15 and start<=50) or (start<15 and d<=40)...
Rturn(0)
elif start>=65: #左回転
Lturn(0)
elif start<15 and d>40: #交差点 40回ループするま...
c=c+1
if c==1: #1つめの交差点
d=0 #0回目としループした回数を数える
if c==2: #2つめの交差点
sleep(1) #1秒間停止
tyoku()
else: #直進
run()
sleep(0.1)
これで第1ブロックを通過出来る。
**第2ブロック(橙) [#y0334ce2]
E,Fの90°回転で、右タイヤを軸とする右回転をすると上手くい...
&ref(2019a/Member/hiroe/Mission2/飛び越える.jpg,50%,飛び...
&ref(2019a/Member/hiroe/Mission2/飛び越えない.jpg,50%,飛...
よって、機体を中心とした回転にする必要がある。新しい関数R...
def Rmaga():
a=cs.value()
while(a<50):
sleep(0.1)
RRturn(0)
sleep(0.1)
run()
a=cs.value()
この関数がしている事はtyoku関数とほとんど同じである。Rmag...
E,F以外の道のりでしていることは第1ブロックと同じであるの...
while True:
d=d+1
start=cs.value()
if (start>=15 and start<=50) or (start<15 and d<=40)...
Rturn(0)
elif start>=65: #左回転
Lturn(0)
elif start<15 and d>40: #交差点 40回ループするま...
c=c+1
if c==1: #1つめの交差点
d=0 #0回目としループした回数を数える
tyoku()
if c==2: #2つめの交差点
sleep(1) #1秒間停止
tyoku()
if c==3 or c==4:
sleep(1)
Rmaga()
if c==4: #4つめの交差点でこのWhile文を抜ける
break
else: #直進
run()
sleep(0.1)
**第3ブロック(黄) [#fb2914a8]
交差点GはRmaga関数、H,Iはtyoku関数で通過できる。
交差点JからKに行くまでに機体を直線KLに対して垂直にしたい...
&ref(2019a/Member/hiroe/Mission2/60.jpg,25%,60);
for n_1 in range(15):
sleep(0.1)
RRturn(0)
sleep(0.1)
run()
第3ブロックの円は第1ブロックのカーブに比べ曲率が大きく...
第3ブロックのプログラムは以下の通りになる。
start=cs.value()
while True:
start=cs.value()
if start>=15 and start<=50:
Rturn(0)
elif start>=65:
Lturn(70)
elif start<15:
c=c+1
if c==1:
sleep(1) #Gで一時停止
Rmaga()
if c==2 or c==3:
tyoku()
if c==4:
for n_1 in range(15):
sleep(0.1)
RRturn(0)
sleep(0.1)
run()
break
else:
run()
sleep(0.1)
**第4ブロック(緑) [#i9183acc]
第4ブロックでは球を拾う動作が入る。
-機体を球の方に向くように90°回転。…?
-少しバックする。(アームが長くこのままアームを下ろすと球...
-アームを下げる。…?
-Lまで進む。(明るくなるまで進む)…?
-アームを上げる。…?
-機体を180°回転…?
この6つの動作で球を拾い第4ブロックは通過できる。ポイント...
第4ブロックのプログラムは以下の通りになる。
for n_1 in range(18): #?
sleep(0.1)
LLturn(0)
sleep(0.1)
run()
for n_2 in range(10): #?
back()
sleep(0.1)
armdown() #?
while True: #?
start=cs.value()
if start>80:
break
run()
sleep(0.1)
armup() #?
for n_3 in range(36): #?
sleep(0.1)
RRturn(0)
sleep(0.1)
**第5ブロック(青) [#m5feba9b]
第4ブロックのポイントとして述べたように第4ブロックの動...
&ref(2019a/Member/hiroe/Mission2/地点L.jpg,40%,60);
理論上機体は直線KLに対して平行になっているはずである。し...
第5ブロックの開始時ではラインのど真ん中にあり、機体が右...
&ref(2019a/Member/hiroe/Mission2/ラスト.jpg,40%,ラスト);
第5ブロックのプログラムは以下の通りになる。
while True:
start=cs.value()
if start>=15 and start<=50:
Rturn(0)
elif start>=65:
Lturn(0)
elif start<15:
c=c+1
if c==1 or c==2:
sleep(0.1)
tyoku()
if c==3:
sleep(1)
break
else:
run()
sleep(0.1)
armdown()
**実装プログラム [#m31d2a1c]
最後に課題2を達成するためにこれまで載せてきたプログラム...
#!/usr/bin/env python3
from ev3dev.ev3 import *
from time import *
m = LargeMotor('outA')
n = LargeMotor('outB')
l = MediumMotor('outC')
cs = ColorSensor('in2')
cs.mode = 'COL-REFLECT'
def run():
m.run_timed(time_sp=100, speed_sp=150)
n.run_timed(time_sp=100, speed_sp=150)
def back():
m.run_timed(time_sp=100, speed_sp=-150)
n.run_timed(time_sp=100, speed_sp=-150)
def Rturn(x):
m.run_to_rel_pos(position_sp=10+x, speed_sp=100, sto...
n.run_to_rel_pos(position_sp=0, speed_sp=100, stop_a...
def Lturn(x):
m.run_to_rel_pos(position_sp=0, speed_sp=100, stop_a...
n.run_to_rel_pos(position_sp=10+x, speed_sp=100, sto...
def RRturn(x):
m.run_to_rel_pos(position_sp=10+x, speed_sp=100, sto...
n.run_to_rel_pos(position_sp=-10-x, speed_sp=100, st...
def LLturn(x):
m.run_to_rel_pos(position_sp=-10-x, speed_sp=100, st...
n.run_to_rel_pos(position_sp=10+x, speed_sp=100, sto...
def armup():
l.run_to_abs_pos(position_sp=100,speed_sp=100,stop_a...
sleep(0.1)
def armdown():
l.run_to_abs_pos(position_sp=-100,speed_sp=100,stop_...
sleep(0.1)
def tyoku():
a=cs.value()
while(a<15):
run()
sleep(0.1)
a=cs.value()
def Rmaga():
a=cs.value()
while(a<50):
sleep(0.1)
RRturn(0)
sleep(0.1)
run()
a=cs.value()
c=0
d=0
while True:
d=d+1
start=cs.value()
if (start>=15 and start<=50) or (start<15 and d<=40):
Rturn(0)
elif start>=65:
Lturn(0)
elif start<15 and d>40:
c=c+1
if c==1:
d=0
tyoku()
if c==2:
sleep(1)
tyoku()
if c==3 or c==4:
sleep(1)
Rmaga()
if c==4:
break
else:
run()
sleep(0.1)
c=0
start=cs.value()
while True:
start=cs.value()
if start>=15 and start<=50:
Rturn(0)
elif start>=65:
Lturn(70)
elif start<15:
c=c+1
if c==1:
sleep(1)
Rmaga()
if c==2 or c==3:
tyoku()
if c==4:
for n_1 in range(15):
sleep(0.1)
RRturn(0)
sleep(0.1)
run()
break
else:
run()
sleep(0.1)
for n_1 in range(18):
sleep(0.1)
LLturn(0)
sleep(0.1)
run()
for n_2 in range(10):
back()
sleep(0.1)
armdown()
while True:
start=cs.value()
if start>80:
break
run()
sleep(0.1)
armup()
for n_3 in range(36):
sleep(0.1)
RRturn(0)
sleep(0.1)
c=0
while True:
start=cs.value()
if start>=15 and start<=50:
Rturn(0)
elif start>=65:
Lturn(0)
elif start<15:
c=c+1
if c==1 or c==2:
sleep(0.1)
tyoku()
if c==3:
sleep(1)
break
else:
run()
sleep(0.1)
armdown()
*反省 [#t1e44ef7]
-今回はコースをブロックで分けることによりブロックでの難所...
-ブロックに分けることで良い点もあったが悪い点もあった。ブ...
-第4ブロックなど、コースありきのプログラムになってしまい...
今日の訪問者数&counter(today);人
昨日の訪問者数&counter(yesterday);人
合計訪問者数&counter(all);人
ページ名: