2018b/Member/Kisuke/Mission3
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2018b/Member]]
#contents
*課題3の内容 [#z8284252]
青と赤のボールを運搬して、それぞれ所定の350ml缶の上に乗せ...
#ref(2018b/Member/Kisuke/Mission3/map.png,80%)
*ロボットの紹介 [#m31fda23]
本体
#ref(2018b/Member/Kisuke/Mission3/machine.jpg,15%)
前回のロボットを改良して、カラーセンサーと超音波センサー...
超音波センサーを挟むように取り付けてある2本の灰色の棒は、...
#ref(2018b/Member/Kisuke/Mission3/front.jpg,15%)
ボールを掴むのではなくベルトコンベアを使って掬い上げるよ...
#ref(2018b/Member/Kisuke/Mission3/belt.jpg,25%)
#ref(2018b/Member/Kisuke/Mission3/balls.jpg,15%)
ベルトコンベアをさらに回すと、ボールは車体上部にあるスロ...
#ref(2018b/Member/Kisuke/Mission3/up.jpg,15%)
缶に着地するとき、何も手を加えないとボールの水平方向の運...
#ref(2018b/Member/Kisuke/Mission3/saka.jpg,20%)
今回はジャイロセンサーを利用していて、車体の回転した角度...
**このロボットに至った経緯 [#w113020a]
最初はUFOキャッチャーのようにボールを掴むロボットを考えて...
*コースの進み方 [#uc85683f]
#ref(2018b/Member/Kisuke/Mission3/map2.jpg,20%)
球を2つ保持できるため、赤玉を入手したらそのまま青玉へ進む...
地図上の扇形の図形は缶を見つけるときに使う超音波センサー...
赤玉を乗せるゾーンの缶は間隔が広いため、ダミーをありにし...
*プログラム [#ce923e86]
**ライントレース [#mff91215]
基本的に課題2と変化は無い。課題2: http://yakushi.shinshu-...
def linetrace_rin():
c1=cs.value()
while c1>13:
c1=cs.value()
x=(abs(c1-10)/70)*100
if x>100:
x=100
l=(x/100)*210-30
r=150-l
ml.run_forever(speed_sp=l,stop_action='br...
mr.run_forever(speed_sp=r,stop_action='br...
stop()
def linetrace_lin():
c1=cs.value()
while c1>13:
c1=cs.value()
x=abs((c1-10)/70)*100
if x>100:
x=100
r=(x/100)*210-30
l=150-r
ml.run_forever(speed_sp=l,stop_action='br...
mr.run_forever(speed_sp=r,stop_action='br...
stop()
def linetrace_rout():
c1=cs.value()
while c1<40:
c1=cs.value()
x=(abs(c1-10)/70)*100
if x>100:
x=100
l=(x/100)*120-40
r=40-l
ml.run_forever(speed_sp=l,stop_action='br...
mr.run_forever(speed_sp=r,stop_action='br...
stop()
def linetrace_lout():
c1=cs.value()
while c1<40:
c1=cs.value()
x=(abs(c1-10)/70)*100
if x>100:
x=100
r=(x/100)*120-40
l=40-r
ml.run_forever(speed_sp=l,stop_action='br...
mr.run_forever(speed_sp=r,stop_action='br...
stop()
赤ボールを缶5,6に乗せるときのために、設定した時間で終了す...
def linetrace_ltime(j):
c1=cs.value()
t1=time.time() #プログラムがスタートした時刻を定義
t2=time.time() #プログラムの経過時間を定義
while t2-t1<j: #j秒経った時に止まる。
c1=cs.value()
t2=time.time()
x=abs((c1-10)/70)*100
if x>100:
x=100
r=(x/100)*210-30
l=150-r
ml.run_forever(speed_sp=l,stop_action='br...
mr.run_forever(speed_sp=r,stop_action='br...
stop()
**ベルトコンベアのプログラム [#vf39220f]
def roll(s):
ma.run_to_rel_pos(position_sp=s,speed_sp=80,stop_...
time.sleep(3)
モーターを回すだけのシンプルなプログラムになっている。基...
**ボール射出のプログラム [#x7b1a3d4]
課題2ではタイヤの回転角度で車体の角度を測っていたが、それ...
def discover_l(s,t): #左回りの場合
u1=us.value() #超音波センサーの値を先に定義する
g1=gs.value() #プログラムスタート時の角度を定義
g2=gs.value() #プログラムの途中経過の角度をあらか...
while g1-g2<s: #g1-g2は回った角度を表していて、そ...
u2=us.value() #プログラムの進行中に逐次超...
ml.run_forever(speed_sp=-70,stop_action='...
mr.run_forever(speed_sp=70,stop_action='h...
g2=gs.value() #ジャイロセンサーの値を逐次...
if u2<u1: #超音波センサーを更新した時、そ...
u1=u2
g3=gs.value() #その時の角度もg3に...
g4=gs.value() #缶発見後に右回転する時のスタート地...
g5=gs.value() #右回転している時の角度を定義
if u1<=t: #指定した範囲内に缶が存在していた場合
while g5-g4<g3-g2-6: #缶の位置に到達する...
mr.run_forever(speed_sp=-70,stop_...
ml.run_forever(speed_sp=70,stop_a...
g5=gs.value()
stop()
u3=us.value() #超音波センサーの値をあらか...
t1=time.time() #この時の時間を保存
while u3<2550: #※1
ml.run_forever(speed_sp=100,stop_...
mr.run_forever(speed_sp=100,stop_...
u3=us.value() #超音波センサーの値...
t2=time.time() #進んだ経過時間を...
stop()
roll(220) #ベルトコンベアを回してボールを...
ml.run_timed(speed_sp=-100,time_sp=(t2-t1...
mr.run_timed(speed_sp=-100,time_sp=(t2-t1...
time.sleep(t2-t1) #後退している間プログラ...
g6=gs.value() #初期位置に戻るためのスター...
g7=gs.value() #初期位置に戻る時の経過時間...
while g7-g6<=g1-g3-6: #初期位置に戻るまで...
mr.run_forever(speed_sp=-70,stop_...
ml.run_forever(speed_sp=70,stop_a...
g7=gs.value()
stop()
else: #測定した範囲内で缶が見つからなかった場合
while g5-g4<g1-g2: #測り始めた位置まで戻る
mr.run_forever(speed_sp=-70,stop_...
ml.run_forever(speed_sp=70,stop_a...
g5=gs.value()
stop()
def discover_r(s,t): #右回転の場合 左回転の時とさほど変...
u1=us.value()
g1=gs.value()
g2=gs.value()
while g2-g1<s: #今回は右回転となるためg2>g1となる
u2=us.value()
ml.run_forever(speed_sp=70,stop_action='h...
mr.run_forever(speed_sp=-70,stop_action='...
g2=gs.value()
if u2<u1:
u1=u2
g3=gs.value()
g4=gs.value()
g5=gs.value()
if u1<=t:
while g4-g5<g2-g3-6:
mr.run_forever(speed_sp=70,stop_a...
ml.run_forever(speed_sp=-70,stop_...
g5=gs.value()
stop()
u3=us.value()
t1=time.time()
while u3<2550:
ml.run_forever(speed_sp=100,stop_...
mr.run_forever(speed_sp=100,stop_...
u3=us.value()
t2=time.time()
stop()
roll(220)
ml.run_timed(speed_sp=-100,time_sp=(t2-t1...
mr.run_timed(speed_sp=-100,time_sp=(t2-t1...
time.sleep(t2-t1)
g6=gs.value()
g7=gs.value()
while g6-g7<=g3-g1-6:
mr.run_forever(speed_sp=70,stop_a...
ml.run_forever(speed_sp=-70,stop_...
g7=gs.value()
stop()
else:
while g4-g5<90:
mr.run_forever(speed_sp=70,stop_a...
ml.run_forever(speed_sp=-70,stop_...
g5=gs.value()
stop()
※1 超音波センサーの値が2550を示した時にwhile関数を抜ける...
分かりづらいので画像を載せておく。
#ref(2018b/Member/Kisuke/Mission3/discover2.jpg,20%)
**プログラム全体 [#l6526719]
#!/usr/bin/env python3
from ev3dev.ev3 import *
import time
ml=LargeMotor('outA')
mr=LargeMotor('outD')
ma=LargeMotor('outB')
cs=ColorSensor('in3')
us=UltrasonicSensor('in4')
gs=GyroSensor('in1')
def stop(): 車輪を止める
ml.stop()
mr.stop()
def linetrace_rin(): #説明済みのため省略
c1=cs.value()
while c1>13:
c1=cs.value()
x=(abs(c1-10)/70)*100
if x>100:
x=100
l=(x/100)*210-30
r=150-l
ml.run_forever(speed_sp=l,stop_action='bra...
mr.run_forever(speed_sp=r,stop_action='bra...
stop()
def linetrace_lin():
c1=cs.value()
while c1>13:
c1=cs.value()
x=abs((c1-10)/70)*100
if x>100:
x=100
r=(x/100)*210-30
l=150-r
ml.run_forever(speed_sp=l,stop_action='bra...
mr.run_forever(speed_sp=r,stop_action='bra...
stop()
def linetrace_rout():
c1=cs.value()
while c1<40:
c1=cs.value()
x=(abs(c1-10)/70)*100
if x>100:
x=100
l=(x/100)*120-40
r=40-l
ml.run_forever(speed_sp=l,stop_action='bra...
mr.run_forever(speed_sp=r,stop_action='bra...
stop()
def linetrace_lout():
c1=cs.value()
while c1<40:
c1=cs.value()
x=(abs(c1-10)/70)*100
if x>100:
x=100
r=(x/100)*120-40
l=40-r
ml.run_forever(speed_sp=l,stop_action='bra...
mr.run_forever(speed_sp=r,stop_action='bra...
stop()
def linetrace_ltime(j): #説明済みのため省略
c1=cs.value()
t1=time.time()
t2=time.time()
while t2-t1<j:
c1=cs.value()
t2=time.time()
x=abs((c1-10)/70)*100
if x>100:
x=100
r=(x/100)*210-30
l=150-r
ml.run_forever(speed_sp=l,stop_action='br...
mr.run_forever(speed_sp=r,stop_action='br...
stop()
def runtime(l,r): #指定した時間分タイヤを動かす
ml.run_timed(time_sp=l*1000,speed_sp=70,stop_acti...
mr.run_timed(time_sp=r*1000,speed_sp=70,stop_acti...
time.sleep((l+r)/2)
def angle(l,r,t): #指定した角度分タイヤを動かす lは左タ...
ml.run_to_rel_pos(position_sp=l,speed_sp=115,stop...
mr.run_to_rel_pos(position_sp=r,speed_sp=115,stop...
time.sleep(t)
def kaiten_r(s,t): 右回りに回転
g1=gs.value() #ジャイロセンサーの値をあらかじめ定義
g2=gs.value() #ジャイロセンサーの値をあらかじめ別...
while g2-g1<s: #g2とg1を比較してg2-g1が指定した角...
ml.run_forever(speed_sp=t,stop_action='ho...
mr.run_forever(speed_sp=-t,stop_action='h...
g2=gs.value() #ループする度にg2の値を更新...
stop() #止まる
def kaiten_l(s,t): 左回りに回転
g1=gs.value()
g2=gs.value()
while g1-g2<s: #ジャイロセンサーは時計回りだと値...
ml.run_forever(speed_sp=-t,stop_action='h...
mr.run_forever(speed_sp=t,stop_action='ho...
g2=gs.value() #ループする度にg2の値を更新...
stop() #止まる
def roll(s): ベルトコンベアを動かすプログラム
ma.run_to_rel_pos(position_sp=s,speed_sp=80,stop_...
time.sleep(3)
def discover_l(s,t): #上で説明済みのため省略
u1=us.value()
g1=gs.value()
g2=gs.value()
while g1-g2<s:
u2=us.value()
ml.run_forever(speed_sp=-70,stop_action='...
mr.run_forever(speed_sp=70,stop_action='h...
g2=gs.value()
if u2<u1:
u1=u2
g3=gs.value()
g4=gs.value()
g5=gs.value()
if u1<=t:
while g5-g4<g3-g2-6:
mr.run_forever(speed_sp=-70,stop_...
ml.run_forever(speed_sp=70,stop_a...
g5=gs.value()
stop()
u3=us.value()
t1=time.time()
while u3<2550:
ml.run_forever(speed_sp=100,stop_...
mr.run_forever(speed_sp=100,stop_...
u3=us.value()
t2=time.time()
stop()
roll(220)
ml.run_timed(speed_sp=-100,time_sp=(t2-t1...
mr.run_timed(speed_sp=-100,time_sp=(t2-t1...
time.sleep(t2-t1)
g6=gs.value()
g7=gs.value()
while g7-g6<=g1-g3-6:
mr.run_forever(speed_sp=-70,stop_...
ml.run_forever(speed_sp=70,stop_a...
g7=gs.value()
stop()
else:
while g5-g4<90:
mr.run_forever(speed_sp=-70,stop_...
ml.run_forever(speed_sp=70,stop_a...
g5=gs.value()
stop()
def discover_r(s,t):
u1=us.value()
g1=gs.value()
g2=gs.value()
while g2-g1<s:
u2=us.value()
ml.run_forever(speed_sp=70,stop_action='h...
mr.run_forever(speed_sp=-70,stop_action='...
g2=gs.value()
if u2<u1:
u1=u2
g3=gs.value()
g4=gs.value()
g5=gs.value()
if u1<=t:
while g4-g5<g2-g3-6:
mr.run_forever(speed_sp=70,stop_a...
ml.run_forever(speed_sp=-70,stop_...
g5=gs.value()
stop()
u3=us.value()
t1=time.time()
while u3<2550:
ml.run_forever(speed_sp=100,stop_...
mr.run_forever(speed_sp=100,stop_...
u3=us.value()
t2=time.time()
stop()
roll(220)
ml.run_timed(speed_sp=-100,time_sp=(t2-t1...
mr.run_timed(speed_sp=-100,time_sp=(t2-t1...
time.sleep(t2-t1)
g6=gs.value()
g7=gs.value()
while g6-g7<=g3-g1-6:
mr.run_forever(speed_sp=70,stop_a...
ml.run_forever(speed_sp=-70,stop_...
g7=gs.value()
stop()
else:
while g4-g5<90:
mr.run_forever(speed_sp=70,stop_a...
ml.run_forever(speed_sp=-70,stop_...
g5=gs.value()
def Redball(): #スタートから赤ボールを取りに行くプログラム
angle(250,250,3) #赤ボールの位置まで進む
kaiten_r(180,110) #ボールを掬う部分は車体の後ろに...
roll(220) #ボールを掬う
kaiten_r(195,110) #車体の向きを戻す ライントレー...
linetrace_lin() #G地点まで線の右側をライントレー...
def Blueball(): 青ボールを取りに行くまでのプログラム
angle(-20,160,2) #Gの交差点をまたぐために位置を調...
linetrace_lin() #GからHまで線の右側をライントレー...
angle(-35,-35,1.5) #Hの交差点を認識したら車体を回...
kaiten_r(175,110) #車体を180度回転させる
roll(220) #ボールを掬う
def move(): 青ボールを拾った後、Eの交差点に行くまでのプ...
kaiten_r(190,110) #車体の向きを元に戻す
angle(-50,-50,1) #ライントレースが安定するように...
linetrace_lin() #Hまで線の右側をライントレースする
linetrace_lout() #Hを認識後、linetrace_lin()では...
linetrace_lin() #HからI間の線の境界線上まで来たら...
linetrace_lout() #Iを認識後、こちらに先ほどと同じ...
linetrace_lin() #Eを認識するまでライントレース
def BlueZone(): #赤ボールを缶に乗せて分岐から帰ってきた...
linetrace_rin() #EからI間の線の左側をライントレー...
linetrace_rout() #Iを認識後、linetrace_rin()では...
linetrace_rin() #IからH間の線の境界線上まで来たら...
angle(70,0,1) #交差点を跨ぐ
linetrace_rin() #HからKまでライントレースする
def discover2(): #青ボールを射出するプログラム
kaiten_l(60,100) #角度を調整しておく
discover_r(90,500) #缶に乗せるプログラム 上で説明...
def start():
r=int(input("insert numbera")) #赤は番号の場合分...
Redball()
Blueball()
move()
if r<=2: #缶1缶2に置く時 Eの位置で缶を探し始める
kaiten_l(90,110) #E地点で上の方向を向く
discover_l(90,250) #缶を乗せるプログラム...
kaiten_l(95,100) #E地点で左側を向く
if r==3: #缶3に置く時 Dまで進んで缶3がある範囲の...
angle(-40,180,2) #Eの左下から右上に車体を...
linetrace_lin() #EからD間の線の右側をライ...
discover_r(60,250) #D地点で缶を乗せるプロ...
angle(-150,-150,2) #後に車体を180度回転さ...
kaiten_l(195,110) #195度左回転をする
linetrace_rin() #DからEの間を線の左側をラ...
angle(230,-40,2) #Eの右上から左下に移動
if r==4: #缶4に置く時 Dまで進んで缶4がある範囲の...
angle(-40,180,2) #Eの左下から右上に車体を...
linetrace_lin() #EからD間の線の右側をライ...
discover_l(60,250) #D地点で缶に乗せるプロ...
kaiten_l(195,110) #195度左回転する
linetrace_rin() #DからEの間を線の左側をラ...
angle(230,-40,2) #Eの右上から左下に移動
if 5<=r: #缶5缶6に置く時 Uターンの手前まで進み、...
angle(-40,180,2) #Eの左下から右上に車体を...
linetrace_lin() #EからD間の線の右側をライ...
linetrace_lout() #Dの交差点を認識後、line...
linetrace_ltime(3) #Dから急カーブ前の間で...
discover_l(60,190) #缶に乗せるプログラム...
angle(-130,-130,3) #後に車体を180度回転す...
kaiten_l(180,110) #車体を左に180度回転する
linetrace_rin() #D地点までライントレース
linetrace_rout() #D地点を認識後、角を曲が...
linetrace_rin() #E地点までライントレース
angle(230,-40,2) #Eの右上から左下に移動
BlueZone()
discover2()
start() #起動
*ロボコンの結果と反省 [#da4ce272]
ロボコンでは無事に優勝することができた。しかし、青ボール...
*振り返り [#cc8408b6]
課題3では課題1や課題2の反省点を生かしたロボットができたの...
総計:&counter(total);
終了行:
[[2018b/Member]]
#contents
*課題3の内容 [#z8284252]
青と赤のボールを運搬して、それぞれ所定の350ml缶の上に乗せ...
#ref(2018b/Member/Kisuke/Mission3/map.png,80%)
*ロボットの紹介 [#m31fda23]
本体
#ref(2018b/Member/Kisuke/Mission3/machine.jpg,15%)
前回のロボットを改良して、カラーセンサーと超音波センサー...
超音波センサーを挟むように取り付けてある2本の灰色の棒は、...
#ref(2018b/Member/Kisuke/Mission3/front.jpg,15%)
ボールを掴むのではなくベルトコンベアを使って掬い上げるよ...
#ref(2018b/Member/Kisuke/Mission3/belt.jpg,25%)
#ref(2018b/Member/Kisuke/Mission3/balls.jpg,15%)
ベルトコンベアをさらに回すと、ボールは車体上部にあるスロ...
#ref(2018b/Member/Kisuke/Mission3/up.jpg,15%)
缶に着地するとき、何も手を加えないとボールの水平方向の運...
#ref(2018b/Member/Kisuke/Mission3/saka.jpg,20%)
今回はジャイロセンサーを利用していて、車体の回転した角度...
**このロボットに至った経緯 [#w113020a]
最初はUFOキャッチャーのようにボールを掴むロボットを考えて...
*コースの進み方 [#uc85683f]
#ref(2018b/Member/Kisuke/Mission3/map2.jpg,20%)
球を2つ保持できるため、赤玉を入手したらそのまま青玉へ進む...
地図上の扇形の図形は缶を見つけるときに使う超音波センサー...
赤玉を乗せるゾーンの缶は間隔が広いため、ダミーをありにし...
*プログラム [#ce923e86]
**ライントレース [#mff91215]
基本的に課題2と変化は無い。課題2: http://yakushi.shinshu-...
def linetrace_rin():
c1=cs.value()
while c1>13:
c1=cs.value()
x=(abs(c1-10)/70)*100
if x>100:
x=100
l=(x/100)*210-30
r=150-l
ml.run_forever(speed_sp=l,stop_action='br...
mr.run_forever(speed_sp=r,stop_action='br...
stop()
def linetrace_lin():
c1=cs.value()
while c1>13:
c1=cs.value()
x=abs((c1-10)/70)*100
if x>100:
x=100
r=(x/100)*210-30
l=150-r
ml.run_forever(speed_sp=l,stop_action='br...
mr.run_forever(speed_sp=r,stop_action='br...
stop()
def linetrace_rout():
c1=cs.value()
while c1<40:
c1=cs.value()
x=(abs(c1-10)/70)*100
if x>100:
x=100
l=(x/100)*120-40
r=40-l
ml.run_forever(speed_sp=l,stop_action='br...
mr.run_forever(speed_sp=r,stop_action='br...
stop()
def linetrace_lout():
c1=cs.value()
while c1<40:
c1=cs.value()
x=(abs(c1-10)/70)*100
if x>100:
x=100
r=(x/100)*120-40
l=40-r
ml.run_forever(speed_sp=l,stop_action='br...
mr.run_forever(speed_sp=r,stop_action='br...
stop()
赤ボールを缶5,6に乗せるときのために、設定した時間で終了す...
def linetrace_ltime(j):
c1=cs.value()
t1=time.time() #プログラムがスタートした時刻を定義
t2=time.time() #プログラムの経過時間を定義
while t2-t1<j: #j秒経った時に止まる。
c1=cs.value()
t2=time.time()
x=abs((c1-10)/70)*100
if x>100:
x=100
r=(x/100)*210-30
l=150-r
ml.run_forever(speed_sp=l,stop_action='br...
mr.run_forever(speed_sp=r,stop_action='br...
stop()
**ベルトコンベアのプログラム [#vf39220f]
def roll(s):
ma.run_to_rel_pos(position_sp=s,speed_sp=80,stop_...
time.sleep(3)
モーターを回すだけのシンプルなプログラムになっている。基...
**ボール射出のプログラム [#x7b1a3d4]
課題2ではタイヤの回転角度で車体の角度を測っていたが、それ...
def discover_l(s,t): #左回りの場合
u1=us.value() #超音波センサーの値を先に定義する
g1=gs.value() #プログラムスタート時の角度を定義
g2=gs.value() #プログラムの途中経過の角度をあらか...
while g1-g2<s: #g1-g2は回った角度を表していて、そ...
u2=us.value() #プログラムの進行中に逐次超...
ml.run_forever(speed_sp=-70,stop_action='...
mr.run_forever(speed_sp=70,stop_action='h...
g2=gs.value() #ジャイロセンサーの値を逐次...
if u2<u1: #超音波センサーを更新した時、そ...
u1=u2
g3=gs.value() #その時の角度もg3に...
g4=gs.value() #缶発見後に右回転する時のスタート地...
g5=gs.value() #右回転している時の角度を定義
if u1<=t: #指定した範囲内に缶が存在していた場合
while g5-g4<g3-g2-6: #缶の位置に到達する...
mr.run_forever(speed_sp=-70,stop_...
ml.run_forever(speed_sp=70,stop_a...
g5=gs.value()
stop()
u3=us.value() #超音波センサーの値をあらか...
t1=time.time() #この時の時間を保存
while u3<2550: #※1
ml.run_forever(speed_sp=100,stop_...
mr.run_forever(speed_sp=100,stop_...
u3=us.value() #超音波センサーの値...
t2=time.time() #進んだ経過時間を...
stop()
roll(220) #ベルトコンベアを回してボールを...
ml.run_timed(speed_sp=-100,time_sp=(t2-t1...
mr.run_timed(speed_sp=-100,time_sp=(t2-t1...
time.sleep(t2-t1) #後退している間プログラ...
g6=gs.value() #初期位置に戻るためのスター...
g7=gs.value() #初期位置に戻る時の経過時間...
while g7-g6<=g1-g3-6: #初期位置に戻るまで...
mr.run_forever(speed_sp=-70,stop_...
ml.run_forever(speed_sp=70,stop_a...
g7=gs.value()
stop()
else: #測定した範囲内で缶が見つからなかった場合
while g5-g4<g1-g2: #測り始めた位置まで戻る
mr.run_forever(speed_sp=-70,stop_...
ml.run_forever(speed_sp=70,stop_a...
g5=gs.value()
stop()
def discover_r(s,t): #右回転の場合 左回転の時とさほど変...
u1=us.value()
g1=gs.value()
g2=gs.value()
while g2-g1<s: #今回は右回転となるためg2>g1となる
u2=us.value()
ml.run_forever(speed_sp=70,stop_action='h...
mr.run_forever(speed_sp=-70,stop_action='...
g2=gs.value()
if u2<u1:
u1=u2
g3=gs.value()
g4=gs.value()
g5=gs.value()
if u1<=t:
while g4-g5<g2-g3-6:
mr.run_forever(speed_sp=70,stop_a...
ml.run_forever(speed_sp=-70,stop_...
g5=gs.value()
stop()
u3=us.value()
t1=time.time()
while u3<2550:
ml.run_forever(speed_sp=100,stop_...
mr.run_forever(speed_sp=100,stop_...
u3=us.value()
t2=time.time()
stop()
roll(220)
ml.run_timed(speed_sp=-100,time_sp=(t2-t1...
mr.run_timed(speed_sp=-100,time_sp=(t2-t1...
time.sleep(t2-t1)
g6=gs.value()
g7=gs.value()
while g6-g7<=g3-g1-6:
mr.run_forever(speed_sp=70,stop_a...
ml.run_forever(speed_sp=-70,stop_...
g7=gs.value()
stop()
else:
while g4-g5<90:
mr.run_forever(speed_sp=70,stop_a...
ml.run_forever(speed_sp=-70,stop_...
g5=gs.value()
stop()
※1 超音波センサーの値が2550を示した時にwhile関数を抜ける...
分かりづらいので画像を載せておく。
#ref(2018b/Member/Kisuke/Mission3/discover2.jpg,20%)
**プログラム全体 [#l6526719]
#!/usr/bin/env python3
from ev3dev.ev3 import *
import time
ml=LargeMotor('outA')
mr=LargeMotor('outD')
ma=LargeMotor('outB')
cs=ColorSensor('in3')
us=UltrasonicSensor('in4')
gs=GyroSensor('in1')
def stop(): 車輪を止める
ml.stop()
mr.stop()
def linetrace_rin(): #説明済みのため省略
c1=cs.value()
while c1>13:
c1=cs.value()
x=(abs(c1-10)/70)*100
if x>100:
x=100
l=(x/100)*210-30
r=150-l
ml.run_forever(speed_sp=l,stop_action='bra...
mr.run_forever(speed_sp=r,stop_action='bra...
stop()
def linetrace_lin():
c1=cs.value()
while c1>13:
c1=cs.value()
x=abs((c1-10)/70)*100
if x>100:
x=100
r=(x/100)*210-30
l=150-r
ml.run_forever(speed_sp=l,stop_action='bra...
mr.run_forever(speed_sp=r,stop_action='bra...
stop()
def linetrace_rout():
c1=cs.value()
while c1<40:
c1=cs.value()
x=(abs(c1-10)/70)*100
if x>100:
x=100
l=(x/100)*120-40
r=40-l
ml.run_forever(speed_sp=l,stop_action='bra...
mr.run_forever(speed_sp=r,stop_action='bra...
stop()
def linetrace_lout():
c1=cs.value()
while c1<40:
c1=cs.value()
x=(abs(c1-10)/70)*100
if x>100:
x=100
r=(x/100)*120-40
l=40-r
ml.run_forever(speed_sp=l,stop_action='bra...
mr.run_forever(speed_sp=r,stop_action='bra...
stop()
def linetrace_ltime(j): #説明済みのため省略
c1=cs.value()
t1=time.time()
t2=time.time()
while t2-t1<j:
c1=cs.value()
t2=time.time()
x=abs((c1-10)/70)*100
if x>100:
x=100
r=(x/100)*210-30
l=150-r
ml.run_forever(speed_sp=l,stop_action='br...
mr.run_forever(speed_sp=r,stop_action='br...
stop()
def runtime(l,r): #指定した時間分タイヤを動かす
ml.run_timed(time_sp=l*1000,speed_sp=70,stop_acti...
mr.run_timed(time_sp=r*1000,speed_sp=70,stop_acti...
time.sleep((l+r)/2)
def angle(l,r,t): #指定した角度分タイヤを動かす lは左タ...
ml.run_to_rel_pos(position_sp=l,speed_sp=115,stop...
mr.run_to_rel_pos(position_sp=r,speed_sp=115,stop...
time.sleep(t)
def kaiten_r(s,t): 右回りに回転
g1=gs.value() #ジャイロセンサーの値をあらかじめ定義
g2=gs.value() #ジャイロセンサーの値をあらかじめ別...
while g2-g1<s: #g2とg1を比較してg2-g1が指定した角...
ml.run_forever(speed_sp=t,stop_action='ho...
mr.run_forever(speed_sp=-t,stop_action='h...
g2=gs.value() #ループする度にg2の値を更新...
stop() #止まる
def kaiten_l(s,t): 左回りに回転
g1=gs.value()
g2=gs.value()
while g1-g2<s: #ジャイロセンサーは時計回りだと値...
ml.run_forever(speed_sp=-t,stop_action='h...
mr.run_forever(speed_sp=t,stop_action='ho...
g2=gs.value() #ループする度にg2の値を更新...
stop() #止まる
def roll(s): ベルトコンベアを動かすプログラム
ma.run_to_rel_pos(position_sp=s,speed_sp=80,stop_...
time.sleep(3)
def discover_l(s,t): #上で説明済みのため省略
u1=us.value()
g1=gs.value()
g2=gs.value()
while g1-g2<s:
u2=us.value()
ml.run_forever(speed_sp=-70,stop_action='...
mr.run_forever(speed_sp=70,stop_action='h...
g2=gs.value()
if u2<u1:
u1=u2
g3=gs.value()
g4=gs.value()
g5=gs.value()
if u1<=t:
while g5-g4<g3-g2-6:
mr.run_forever(speed_sp=-70,stop_...
ml.run_forever(speed_sp=70,stop_a...
g5=gs.value()
stop()
u3=us.value()
t1=time.time()
while u3<2550:
ml.run_forever(speed_sp=100,stop_...
mr.run_forever(speed_sp=100,stop_...
u3=us.value()
t2=time.time()
stop()
roll(220)
ml.run_timed(speed_sp=-100,time_sp=(t2-t1...
mr.run_timed(speed_sp=-100,time_sp=(t2-t1...
time.sleep(t2-t1)
g6=gs.value()
g7=gs.value()
while g7-g6<=g1-g3-6:
mr.run_forever(speed_sp=-70,stop_...
ml.run_forever(speed_sp=70,stop_a...
g7=gs.value()
stop()
else:
while g5-g4<90:
mr.run_forever(speed_sp=-70,stop_...
ml.run_forever(speed_sp=70,stop_a...
g5=gs.value()
stop()
def discover_r(s,t):
u1=us.value()
g1=gs.value()
g2=gs.value()
while g2-g1<s:
u2=us.value()
ml.run_forever(speed_sp=70,stop_action='h...
mr.run_forever(speed_sp=-70,stop_action='...
g2=gs.value()
if u2<u1:
u1=u2
g3=gs.value()
g4=gs.value()
g5=gs.value()
if u1<=t:
while g4-g5<g2-g3-6:
mr.run_forever(speed_sp=70,stop_a...
ml.run_forever(speed_sp=-70,stop_...
g5=gs.value()
stop()
u3=us.value()
t1=time.time()
while u3<2550:
ml.run_forever(speed_sp=100,stop_...
mr.run_forever(speed_sp=100,stop_...
u3=us.value()
t2=time.time()
stop()
roll(220)
ml.run_timed(speed_sp=-100,time_sp=(t2-t1...
mr.run_timed(speed_sp=-100,time_sp=(t2-t1...
time.sleep(t2-t1)
g6=gs.value()
g7=gs.value()
while g6-g7<=g3-g1-6:
mr.run_forever(speed_sp=70,stop_a...
ml.run_forever(speed_sp=-70,stop_...
g7=gs.value()
stop()
else:
while g4-g5<90:
mr.run_forever(speed_sp=70,stop_a...
ml.run_forever(speed_sp=-70,stop_...
g5=gs.value()
def Redball(): #スタートから赤ボールを取りに行くプログラム
angle(250,250,3) #赤ボールの位置まで進む
kaiten_r(180,110) #ボールを掬う部分は車体の後ろに...
roll(220) #ボールを掬う
kaiten_r(195,110) #車体の向きを戻す ライントレー...
linetrace_lin() #G地点まで線の右側をライントレー...
def Blueball(): 青ボールを取りに行くまでのプログラム
angle(-20,160,2) #Gの交差点をまたぐために位置を調...
linetrace_lin() #GからHまで線の右側をライントレー...
angle(-35,-35,1.5) #Hの交差点を認識したら車体を回...
kaiten_r(175,110) #車体を180度回転させる
roll(220) #ボールを掬う
def move(): 青ボールを拾った後、Eの交差点に行くまでのプ...
kaiten_r(190,110) #車体の向きを元に戻す
angle(-50,-50,1) #ライントレースが安定するように...
linetrace_lin() #Hまで線の右側をライントレースする
linetrace_lout() #Hを認識後、linetrace_lin()では...
linetrace_lin() #HからI間の線の境界線上まで来たら...
linetrace_lout() #Iを認識後、こちらに先ほどと同じ...
linetrace_lin() #Eを認識するまでライントレース
def BlueZone(): #赤ボールを缶に乗せて分岐から帰ってきた...
linetrace_rin() #EからI間の線の左側をライントレー...
linetrace_rout() #Iを認識後、linetrace_rin()では...
linetrace_rin() #IからH間の線の境界線上まで来たら...
angle(70,0,1) #交差点を跨ぐ
linetrace_rin() #HからKまでライントレースする
def discover2(): #青ボールを射出するプログラム
kaiten_l(60,100) #角度を調整しておく
discover_r(90,500) #缶に乗せるプログラム 上で説明...
def start():
r=int(input("insert numbera")) #赤は番号の場合分...
Redball()
Blueball()
move()
if r<=2: #缶1缶2に置く時 Eの位置で缶を探し始める
kaiten_l(90,110) #E地点で上の方向を向く
discover_l(90,250) #缶を乗せるプログラム...
kaiten_l(95,100) #E地点で左側を向く
if r==3: #缶3に置く時 Dまで進んで缶3がある範囲の...
angle(-40,180,2) #Eの左下から右上に車体を...
linetrace_lin() #EからD間の線の右側をライ...
discover_r(60,250) #D地点で缶を乗せるプロ...
angle(-150,-150,2) #後に車体を180度回転さ...
kaiten_l(195,110) #195度左回転をする
linetrace_rin() #DからEの間を線の左側をラ...
angle(230,-40,2) #Eの右上から左下に移動
if r==4: #缶4に置く時 Dまで進んで缶4がある範囲の...
angle(-40,180,2) #Eの左下から右上に車体を...
linetrace_lin() #EからD間の線の右側をライ...
discover_l(60,250) #D地点で缶に乗せるプロ...
kaiten_l(195,110) #195度左回転する
linetrace_rin() #DからEの間を線の左側をラ...
angle(230,-40,2) #Eの右上から左下に移動
if 5<=r: #缶5缶6に置く時 Uターンの手前まで進み、...
angle(-40,180,2) #Eの左下から右上に車体を...
linetrace_lin() #EからD間の線の右側をライ...
linetrace_lout() #Dの交差点を認識後、line...
linetrace_ltime(3) #Dから急カーブ前の間で...
discover_l(60,190) #缶に乗せるプログラム...
angle(-130,-130,3) #後に車体を180度回転す...
kaiten_l(180,110) #車体を左に180度回転する
linetrace_rin() #D地点までライントレース
linetrace_rout() #D地点を認識後、角を曲が...
linetrace_rin() #E地点までライントレース
angle(230,-40,2) #Eの右上から左下に移動
BlueZone()
discover2()
start() #起動
*ロボコンの結果と反省 [#da4ce272]
ロボコンでは無事に優勝することができた。しかし、青ボール...
*振り返り [#cc8408b6]
課題3では課題1や課題2の反省点を生かしたロボットができたの...
総計:&counter(total);
ページ名: