2019a/Member/ofuse/Mission3
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2019a/Member]]
#contents
*今回のミッション [#a461b500]
&ref(001.png);
箱の中にある2つのボールと床に置かれた2つのボールをすべて...
[[ミッションの詳細はこちら←←←:http://yakushi.shinshu-u.ac...
*大まかな戦略 [#la665ddc]
移動に関してはミッション2で使用したステージを使用してい...
**概要 [#h5fc5dc6]
ミッション3ではEV3のセットを2セット使うことができる。そこ...
**ルート [#w82519bf]
&ref(0002.png);
上図のとおりである。基本的には最短距離で、また、ボールに...
*ロボットの組み立て [#zc64be58]
今回はEV3を二つのロボットに分けて使用しているので、ボール...
**1号機 [#h8478151]
こっちのロボットは箱ごと持ちあげて、中身だけをもう一つの...
&ref(./0003.jpg,30%);
&ref(./0004.jpg,50%);
このような作りになった。アームの間に箱をはさみ、途中まで...
**2号機 [#m0ce03af]
こちらはボールが床に置かれているため、ミッション2と同じよ...
&ref(./0005.jpg,30%);
&ref(./0006.jpg,30%);
このような作りになっている。仲間が作ったものなので詳しく...
*プログラム [#a5f1f160]
プログラムは分担して作ったため、それぞれのプログラムの詳...
[[プログラム1:http://yakushi.shinshu-u.ac.jp/robotics/?20...
[[プログラム2の前半:http://yakushi.shinshu-u.ac.jp/roboti...
[[プログラム2の後半:http://yakushi.shinshu-u.ac.jp/roboti...
**基本的な構造について [#t006deb6]
***ライントレース [#v0edc831]
ミッション2と同じなので説明を省きたいところだが、前回は関...
def line_trace_right(t,c):
x = time.time()
while time.time() - x < t:
if cs.value() > c:
mL.run_forever(speed_sp=100)
mR.run_forever(speed_sp=50)
x = time.time()
else:
mL.run_forever(speed_sp=50)
mR.run_forever(speed_sp=100)
sleep(0.01)
mL.stop()
mR.stop()
***アーム [#y16f16a0]
アームの役割はアームを下す、持ち上げる、ボールを射出する...
***用紙間の移動 [#m72ee070]
用紙間はラインで結ばれていない。移動するにはもう一方の紙...
例
mL.run_forever(speed_sp=-50)
mR.run_forever(speed_sp=50) #反対側へ向きを合わせる
sleep(2)
while cs.value() > 15: #灰色または白を認識している間は直...
mL.run_forever(speed_sp=70)
mR.run_forever(speed_sp=70)
mL.stop() #ラインに入ったので停止
mR.stop()
**プログラム(1号機) [#baf8f64c]
***導入部分 [#pe470311]
#!/usr/bin/env python3
from ev3dev.ev3 import *
from time import sleep
mL = LargeMotor('outB')
mR = LargeMotor('outD')
mZ = MediumMotor('outA')
cs = ColorSensor('in1')
cs.mode = 'COL-REFLECT'
***定義部分 [#q952fbbb]
def motor_init(): #全モーターをリセット
mL.reset()
mR.reset()
mZ.reset()
def down(): #アームを下げる
mZ.run_timed(time_sp=600,speed_sp=150,stop_action='brak...
def up(): 箱ごとアームを途中まで上げる 箱は重いので値も...
mZ.run_timed(time_sp=685,speed_sp=-160,stop_action='...
sleep(1)
def up2(): #箱を更に持ち上げ、ボールをゴールに流し込む
mZ.run_timed(time_sp=285,speed_sp=-569,stop_action='...
sleep(1)
def nage(): #素早くアームを上げて箱を放り投げる
mZ.run_timed(time_sp=400,speed_sp=-1000,stop_action=...
sleep(1)
def go(): #デフォルトの前進
mL.run_timed(time_sp=80,speed_sp=150,stop_action='br...
mR.run_timed(time_sp=80,speed_sp=150,stop_action='br...
def over(t): #前進2 tの値で時間を調整
mL.run_timed(time_sp=t,speed_sp=200,stop_action='bra...
mR.run_timed(time_sp=t,speed_sp=200,stop_action='bra...
sleep(1)
def back(t): #後進 tの値で時間を調整
mL.run_timed(time_sp=t,speed_sp=-200,stop_action='br...
mR.run_timed(time_sp=t,speed_sp=-200,stop_action='br...
def turnl2(): #ライントレースにおける右折用
mL.run_timed(time_sp=200,speed_sp=45,stop_action='br...
mR.run_timed(time_sp=200,speed_sp=-50,stop_action='b...
sleep(1)
def turnr2(): #ライントレースにおける左折用
mR.run_timed(time_sp=200,speed_sp=75,stop_action='br...
mL.run_timed(time_sp=200,speed_sp=-45,stop_action='b...
def turnr2X(x): #左側ライントレースにおける交差点認識後...
mR.run_timed(time_sp=x,speed_sp=-75,stop_action='bra...
mL.run_timed(time_sp=x,speed_sp=45,stop_action='brak...
def turnr2Y(y): #右側ライントレースにおける交差点認識後...
mR.run_timed(time_sp=y,speed_sp=45,stop_action='brak...
mL.run_timed(time_sp=y,speed_sp=-75,stop_action='bra...
def turnC(a): #aの値でどれだけ左折するか調整
mR.run_timed(time_sp=a,speed_sp=-150,stop_action='br...
mL.run_timed(time_sp=a,speed_sp=150,stop_action='bra...
sleep(1)
def turnD(a): #aの値でどれだけ右折するか調整
mR.run_timed(time_sp=a,speed_sp=150,stop_action='bra...
mL.run_timed(time_sp=a,speed_sp=-150,stop_action='br...
sleep(1)
def linel(): #ラインの左側のトレース
S = 1
while S > 0: #Sが1の間繰り返さ...
go()
if cs.value() > 15: #白側にそれた場...
while cs.value() > 15:
turnl2()
if cs.value() < 9: #黒側にそれた場合
tS = time.time() #時間計測開始
while cs.value() < 9:
turnr2() #左に修正
if time.time()-tS > 0.48: #左へ修正が連続...
turnr2X((time.time()-tS)*1400) #曲がりすぎ...
S = 0 #繰り返しを終了する
sleep(1)
def liner(): #ラインの右側のトレース
S = 1
while S > 0: #繰り返し開始
go()
if cs.value() > 15: #白側にそれた場...
while cs.value() > 15:
turnr2()
if cs.value() < 9: #黒側にそれた場合
tS = time.time() #時間計測開始
while cs.value() < 9:
turnl2() #右に修正
if time.time()-tS > 0.48: #右へ修正が連続...
turnr2Y((time.time()-tS)*1400) #曲がりすぎた...
S = 0 #繰り返しを終了する
sleep(1)
def running(): #用紙間を渡る
while cs.value() > 15: #ラインにたどり着くまで実行
go()
sleep(1)
***実行されたプログラム [#y8bd211f]
motor_init()
sleep(110) #もう一つのロボットとぶつからないように待機
liner() #Aからスタートし、右側を辿り交差点Cを認識
over(833) #ここからトレーまでの位置を調整する
sleep(1)
turnC(1760)
back(2000)
sleep(3)
down() #アームを下げる
over(2000) #トレーの下にアームを通す
sleep(3)
up() #アームを上げる
sleep(1)
turnC(800) #辺BCに方向転換
over(400)
linel() #CからBへ左側を辿り、Bで交差点認識をする
turnC(900) #線B'D'に向かって方向転換
over(500) #線をまたぐ
running() #線B'D'に着くまで前進
sleep(3)
turnC(1910) #180度方向転換
sleep(4)
back(300) #トレーに近づく
sleep(1)
up2() #トレーへボールを流し込む
sleep(2)
down() #ここでアームを上げ下げをして、流しそびれ...
sleep(1)
up()
over(150) #同じく前進と後進を行い、ボールを確実に処...
sleep(0.5)
back(150)
sleep(1)
turnD(500) #線BDに向かって方向転換
running() #線BDに着くまで前進
linel() #線BDの左側を辿り、Dで交差点認識をする
over(150)
sleep(1)
turnC(1100) #円GHIJに向かって方向転換
down() #ここの二つで箱をぶっ飛ばす
nage()
**プログラム(2号機) [#jdd3dc5c]
***導入部分 [#w8ad0b00]
#!/usr/bin/env python3
from ev3dev.ev3 import *
from time import sleep
mL = LargeMotor('outD')
mR = LargeMotor('outC')
mM = MediumMotor('outB')
cs = ColorSensor('in3')
cs.mode = 'COL-REFLECT'
***定義部分 [#u60bf582]
def motor_init(): #ラージモーターをリセットする。
mL.reset()
mR.reset()
def arm_move(t,y): #アームを下げる t,yの値によってアー...
x = time.time() #xに現在の時刻をいれる
while time.time() - x < t: #t秒間下の動作を繰り返す
mM.run_forever(speed_sp=y) #yの速さでアームを下げる
mM.stop()
sleep(1)
def catch_up(x,t): #アームを上げる なぜ下げるときと違う...
mM.run_timed(speed_sp=x,time_sp=t,stop_action='hold')
sleep(1)
def hold_out(): #上の動作をするとモーターが固定されてし...
mM.run_timed(speed_sp=100,time_sp=100,stop_action='brak...
sleep(1)
def move_forward(t): #t秒の間前進
x = time.time() #xに現在の時間を入れる
while time.time() - x < t: #t秒経つまで下の動作を繰り...
mL.run_forever(speed_sp=-100) #マイナスの値が入って...
mR.run_forever(speed_sp=-100) #同じ
mL.stop()
mR.stop()
def move_back(t): #上と同じ仕組みでバックする スピード...
x = time.time()
while time.time() - x < t:
mL.run_forever(speed_sp=100)
mR.run_forever(speed_sp=100)
mL.stop()
mR.stop()
def turn_left(t): #t秒左に転回 左右のモーターを逆に動...
x = time.time()
while time.time() - x < t:
mL.run_forever(speed_sp=100)
mR.run_forever(speed_sp=-100)
mL.stop()
mR.stop()
def turn_right(t): #上の逆
x = time.time()
while time.time() - x < t:
mL.run_forever(speed_sp=-100)
mR.run_forever(speed_sp=100)
mL.reset()
mR.reset()
def line_trace_right(t,c): #交差点に入るまでラインの右側...
x = time.time()
while time.time() - x < t: #t秒経つまで動作を繰り返す
if cs.value() > c: #ラインの外側にそれたら左に転回
mL.run_forever(speed_sp=40)
mR.run_forever(speed_sp=-80)
x = time.time() #xの値を更新
else: #ラインの内側へそれたら右に転回 これがt秒連続...
mL.run_forever(speed_sp=-80)
mR.run_forever(speed_sp=40)
if time.time() - x >t: #whileと重複しているのでいらない...
mL.stop() #上のifを使わない場合whileのなかから出せ...
mR.stop()
def line_trace_left(t,c):交差点に入るまでラインの左側を...
x = time.time()
while time.time() - x < t: #t秒経つまで動作を繰り返す
if cs.value() > c: #ラインの外側にそれたら右に転回
mL.run_forever(speed_sp=-80)
mR.run_forever(speed_sp=40)
x = time.time() #xの値を更新
else: #ラインの内側へそれたら左に転回 これがt秒連...
mL.run_forever(speed_sp=40)
mR.run_forever(speed_sp=-80)
if time.time() - x >t:
mL.stop()
mR.stop()
def change_paper(): #2用紙間を移動するためのもの
x = 0 #0からスタート
while x < 2: #2回連続でストップしたら終了?
if cs.value() > 50:
mL.run_forever(speed_sp=100)
mR.run_forever(speed_sp=100)
if cs.value() < 50:
mL.stop()
mR.stop()
x = x + 1
***実行されたプログラム [#ca8b835a]
if __name__ == '__main__': #おまじない
motor_init() #リセット
sleep(1)
hold_out()
print(cs.value()) #確認用
sleep(1) #ここまでは準備
line_trace_left(1,40) #A'k'間を移動
sleep(1)
turn_right(0.55) #ボールに対する向きの調整
sleep(1)
move_back(4.2) #おろしたアームがボールに当たらないように...
sleep(1)
arm_move(1.5,-400) #アームを下す
sleep(1)
move_forward(1.6) #ボールをすくうため前進
sleep(1)
catch_up(550,750) #アームを上げる
sleep(1)
move_forward(5) #前進
sleep(1)
turn_right(1.25) #後方に箱が来るよう角度を調節
sleep(1)
arm_move(1,800) #アームを上げボールを射出
sleep(1)
hold_out() #ミディアムモーターの出力を解除
sleep(1)
turn_left(1.7)
sleep(1)
move_forward(0.7)
sleep(1)
turn_left(1) #ここまで位置調整
sleep(1)
line_trace_right(1,40) #L'K'間を移動
sleep(1)
turn_left(0.5) #ラインに平行になるよう左に調節
sleep(1)
move_forward(6) #用紙間を移動 change_paper()は使わない...
sleep(1)
move_forward(4.5) #ラインを通り越して前進 ここから別の...
sleep(1)
line_trace_left(1,40) #kのラインの左側を辿りkで止まる
sleep(1)
turn_right(0.6) #ボールに向けて角度を調整
sleep(1)
move_back(4.2) #アームを下すためにバック
sleep(1)
arm_move(6,-200) # アームを下す
sleep(1)
move_forward(2.2) #ボールへ前進
sleep(1)
catch_up(550,750) #ボールを持ち上げる
sleep(1)
turn_right(2.7) #箱の向きヘあわせる
sleep(1)
move_forward(3) #箱へ直進
sleep(1)
turn_right(2.5) #180°回転
sleep(1)
move_back(2) #ボールが箱に入るようにバックで位置調整
sleep(1)
arm_move(1,300) #ボールを射出
sleep(1)
turn_left(1.5) #L'のほうを向く
sleep(1)
move_forward(3) #直進してもう一方のロボットとの接触を防ぐ
sleep(1) #関数の中にsleep()をいれておけばよりすっきりした
*結果・改善点 [#pb4ee8a5]
発表会では一回目にボールを一つ入れることができた。しかし...
終了行:
[[2019a/Member]]
#contents
*今回のミッション [#a461b500]
&ref(001.png);
箱の中にある2つのボールと床に置かれた2つのボールをすべて...
[[ミッションの詳細はこちら←←←:http://yakushi.shinshu-u.ac...
*大まかな戦略 [#la665ddc]
移動に関してはミッション2で使用したステージを使用してい...
**概要 [#h5fc5dc6]
ミッション3ではEV3のセットを2セット使うことができる。そこ...
**ルート [#w82519bf]
&ref(0002.png);
上図のとおりである。基本的には最短距離で、また、ボールに...
*ロボットの組み立て [#zc64be58]
今回はEV3を二つのロボットに分けて使用しているので、ボール...
**1号機 [#h8478151]
こっちのロボットは箱ごと持ちあげて、中身だけをもう一つの...
&ref(./0003.jpg,30%);
&ref(./0004.jpg,50%);
このような作りになった。アームの間に箱をはさみ、途中まで...
**2号機 [#m0ce03af]
こちらはボールが床に置かれているため、ミッション2と同じよ...
&ref(./0005.jpg,30%);
&ref(./0006.jpg,30%);
このような作りになっている。仲間が作ったものなので詳しく...
*プログラム [#a5f1f160]
プログラムは分担して作ったため、それぞれのプログラムの詳...
[[プログラム1:http://yakushi.shinshu-u.ac.jp/robotics/?20...
[[プログラム2の前半:http://yakushi.shinshu-u.ac.jp/roboti...
[[プログラム2の後半:http://yakushi.shinshu-u.ac.jp/roboti...
**基本的な構造について [#t006deb6]
***ライントレース [#v0edc831]
ミッション2と同じなので説明を省きたいところだが、前回は関...
def line_trace_right(t,c):
x = time.time()
while time.time() - x < t:
if cs.value() > c:
mL.run_forever(speed_sp=100)
mR.run_forever(speed_sp=50)
x = time.time()
else:
mL.run_forever(speed_sp=50)
mR.run_forever(speed_sp=100)
sleep(0.01)
mL.stop()
mR.stop()
***アーム [#y16f16a0]
アームの役割はアームを下す、持ち上げる、ボールを射出する...
***用紙間の移動 [#m72ee070]
用紙間はラインで結ばれていない。移動するにはもう一方の紙...
例
mL.run_forever(speed_sp=-50)
mR.run_forever(speed_sp=50) #反対側へ向きを合わせる
sleep(2)
while cs.value() > 15: #灰色または白を認識している間は直...
mL.run_forever(speed_sp=70)
mR.run_forever(speed_sp=70)
mL.stop() #ラインに入ったので停止
mR.stop()
**プログラム(1号機) [#baf8f64c]
***導入部分 [#pe470311]
#!/usr/bin/env python3
from ev3dev.ev3 import *
from time import sleep
mL = LargeMotor('outB')
mR = LargeMotor('outD')
mZ = MediumMotor('outA')
cs = ColorSensor('in1')
cs.mode = 'COL-REFLECT'
***定義部分 [#q952fbbb]
def motor_init(): #全モーターをリセット
mL.reset()
mR.reset()
mZ.reset()
def down(): #アームを下げる
mZ.run_timed(time_sp=600,speed_sp=150,stop_action='brak...
def up(): 箱ごとアームを途中まで上げる 箱は重いので値も...
mZ.run_timed(time_sp=685,speed_sp=-160,stop_action='...
sleep(1)
def up2(): #箱を更に持ち上げ、ボールをゴールに流し込む
mZ.run_timed(time_sp=285,speed_sp=-569,stop_action='...
sleep(1)
def nage(): #素早くアームを上げて箱を放り投げる
mZ.run_timed(time_sp=400,speed_sp=-1000,stop_action=...
sleep(1)
def go(): #デフォルトの前進
mL.run_timed(time_sp=80,speed_sp=150,stop_action='br...
mR.run_timed(time_sp=80,speed_sp=150,stop_action='br...
def over(t): #前進2 tの値で時間を調整
mL.run_timed(time_sp=t,speed_sp=200,stop_action='bra...
mR.run_timed(time_sp=t,speed_sp=200,stop_action='bra...
sleep(1)
def back(t): #後進 tの値で時間を調整
mL.run_timed(time_sp=t,speed_sp=-200,stop_action='br...
mR.run_timed(time_sp=t,speed_sp=-200,stop_action='br...
def turnl2(): #ライントレースにおける右折用
mL.run_timed(time_sp=200,speed_sp=45,stop_action='br...
mR.run_timed(time_sp=200,speed_sp=-50,stop_action='b...
sleep(1)
def turnr2(): #ライントレースにおける左折用
mR.run_timed(time_sp=200,speed_sp=75,stop_action='br...
mL.run_timed(time_sp=200,speed_sp=-45,stop_action='b...
def turnr2X(x): #左側ライントレースにおける交差点認識後...
mR.run_timed(time_sp=x,speed_sp=-75,stop_action='bra...
mL.run_timed(time_sp=x,speed_sp=45,stop_action='brak...
def turnr2Y(y): #右側ライントレースにおける交差点認識後...
mR.run_timed(time_sp=y,speed_sp=45,stop_action='brak...
mL.run_timed(time_sp=y,speed_sp=-75,stop_action='bra...
def turnC(a): #aの値でどれだけ左折するか調整
mR.run_timed(time_sp=a,speed_sp=-150,stop_action='br...
mL.run_timed(time_sp=a,speed_sp=150,stop_action='bra...
sleep(1)
def turnD(a): #aの値でどれだけ右折するか調整
mR.run_timed(time_sp=a,speed_sp=150,stop_action='bra...
mL.run_timed(time_sp=a,speed_sp=-150,stop_action='br...
sleep(1)
def linel(): #ラインの左側のトレース
S = 1
while S > 0: #Sが1の間繰り返さ...
go()
if cs.value() > 15: #白側にそれた場...
while cs.value() > 15:
turnl2()
if cs.value() < 9: #黒側にそれた場合
tS = time.time() #時間計測開始
while cs.value() < 9:
turnr2() #左に修正
if time.time()-tS > 0.48: #左へ修正が連続...
turnr2X((time.time()-tS)*1400) #曲がりすぎ...
S = 0 #繰り返しを終了する
sleep(1)
def liner(): #ラインの右側のトレース
S = 1
while S > 0: #繰り返し開始
go()
if cs.value() > 15: #白側にそれた場...
while cs.value() > 15:
turnr2()
if cs.value() < 9: #黒側にそれた場合
tS = time.time() #時間計測開始
while cs.value() < 9:
turnl2() #右に修正
if time.time()-tS > 0.48: #右へ修正が連続...
turnr2Y((time.time()-tS)*1400) #曲がりすぎた...
S = 0 #繰り返しを終了する
sleep(1)
def running(): #用紙間を渡る
while cs.value() > 15: #ラインにたどり着くまで実行
go()
sleep(1)
***実行されたプログラム [#y8bd211f]
motor_init()
sleep(110) #もう一つのロボットとぶつからないように待機
liner() #Aからスタートし、右側を辿り交差点Cを認識
over(833) #ここからトレーまでの位置を調整する
sleep(1)
turnC(1760)
back(2000)
sleep(3)
down() #アームを下げる
over(2000) #トレーの下にアームを通す
sleep(3)
up() #アームを上げる
sleep(1)
turnC(800) #辺BCに方向転換
over(400)
linel() #CからBへ左側を辿り、Bで交差点認識をする
turnC(900) #線B'D'に向かって方向転換
over(500) #線をまたぐ
running() #線B'D'に着くまで前進
sleep(3)
turnC(1910) #180度方向転換
sleep(4)
back(300) #トレーに近づく
sleep(1)
up2() #トレーへボールを流し込む
sleep(2)
down() #ここでアームを上げ下げをして、流しそびれ...
sleep(1)
up()
over(150) #同じく前進と後進を行い、ボールを確実に処...
sleep(0.5)
back(150)
sleep(1)
turnD(500) #線BDに向かって方向転換
running() #線BDに着くまで前進
linel() #線BDの左側を辿り、Dで交差点認識をする
over(150)
sleep(1)
turnC(1100) #円GHIJに向かって方向転換
down() #ここの二つで箱をぶっ飛ばす
nage()
**プログラム(2号機) [#jdd3dc5c]
***導入部分 [#w8ad0b00]
#!/usr/bin/env python3
from ev3dev.ev3 import *
from time import sleep
mL = LargeMotor('outD')
mR = LargeMotor('outC')
mM = MediumMotor('outB')
cs = ColorSensor('in3')
cs.mode = 'COL-REFLECT'
***定義部分 [#u60bf582]
def motor_init(): #ラージモーターをリセットする。
mL.reset()
mR.reset()
def arm_move(t,y): #アームを下げる t,yの値によってアー...
x = time.time() #xに現在の時刻をいれる
while time.time() - x < t: #t秒間下の動作を繰り返す
mM.run_forever(speed_sp=y) #yの速さでアームを下げる
mM.stop()
sleep(1)
def catch_up(x,t): #アームを上げる なぜ下げるときと違う...
mM.run_timed(speed_sp=x,time_sp=t,stop_action='hold')
sleep(1)
def hold_out(): #上の動作をするとモーターが固定されてし...
mM.run_timed(speed_sp=100,time_sp=100,stop_action='brak...
sleep(1)
def move_forward(t): #t秒の間前進
x = time.time() #xに現在の時間を入れる
while time.time() - x < t: #t秒経つまで下の動作を繰り...
mL.run_forever(speed_sp=-100) #マイナスの値が入って...
mR.run_forever(speed_sp=-100) #同じ
mL.stop()
mR.stop()
def move_back(t): #上と同じ仕組みでバックする スピード...
x = time.time()
while time.time() - x < t:
mL.run_forever(speed_sp=100)
mR.run_forever(speed_sp=100)
mL.stop()
mR.stop()
def turn_left(t): #t秒左に転回 左右のモーターを逆に動...
x = time.time()
while time.time() - x < t:
mL.run_forever(speed_sp=100)
mR.run_forever(speed_sp=-100)
mL.stop()
mR.stop()
def turn_right(t): #上の逆
x = time.time()
while time.time() - x < t:
mL.run_forever(speed_sp=-100)
mR.run_forever(speed_sp=100)
mL.reset()
mR.reset()
def line_trace_right(t,c): #交差点に入るまでラインの右側...
x = time.time()
while time.time() - x < t: #t秒経つまで動作を繰り返す
if cs.value() > c: #ラインの外側にそれたら左に転回
mL.run_forever(speed_sp=40)
mR.run_forever(speed_sp=-80)
x = time.time() #xの値を更新
else: #ラインの内側へそれたら右に転回 これがt秒連続...
mL.run_forever(speed_sp=-80)
mR.run_forever(speed_sp=40)
if time.time() - x >t: #whileと重複しているのでいらない...
mL.stop() #上のifを使わない場合whileのなかから出せ...
mR.stop()
def line_trace_left(t,c):交差点に入るまでラインの左側を...
x = time.time()
while time.time() - x < t: #t秒経つまで動作を繰り返す
if cs.value() > c: #ラインの外側にそれたら右に転回
mL.run_forever(speed_sp=-80)
mR.run_forever(speed_sp=40)
x = time.time() #xの値を更新
else: #ラインの内側へそれたら左に転回 これがt秒連...
mL.run_forever(speed_sp=40)
mR.run_forever(speed_sp=-80)
if time.time() - x >t:
mL.stop()
mR.stop()
def change_paper(): #2用紙間を移動するためのもの
x = 0 #0からスタート
while x < 2: #2回連続でストップしたら終了?
if cs.value() > 50:
mL.run_forever(speed_sp=100)
mR.run_forever(speed_sp=100)
if cs.value() < 50:
mL.stop()
mR.stop()
x = x + 1
***実行されたプログラム [#ca8b835a]
if __name__ == '__main__': #おまじない
motor_init() #リセット
sleep(1)
hold_out()
print(cs.value()) #確認用
sleep(1) #ここまでは準備
line_trace_left(1,40) #A'k'間を移動
sleep(1)
turn_right(0.55) #ボールに対する向きの調整
sleep(1)
move_back(4.2) #おろしたアームがボールに当たらないように...
sleep(1)
arm_move(1.5,-400) #アームを下す
sleep(1)
move_forward(1.6) #ボールをすくうため前進
sleep(1)
catch_up(550,750) #アームを上げる
sleep(1)
move_forward(5) #前進
sleep(1)
turn_right(1.25) #後方に箱が来るよう角度を調節
sleep(1)
arm_move(1,800) #アームを上げボールを射出
sleep(1)
hold_out() #ミディアムモーターの出力を解除
sleep(1)
turn_left(1.7)
sleep(1)
move_forward(0.7)
sleep(1)
turn_left(1) #ここまで位置調整
sleep(1)
line_trace_right(1,40) #L'K'間を移動
sleep(1)
turn_left(0.5) #ラインに平行になるよう左に調節
sleep(1)
move_forward(6) #用紙間を移動 change_paper()は使わない...
sleep(1)
move_forward(4.5) #ラインを通り越して前進 ここから別の...
sleep(1)
line_trace_left(1,40) #kのラインの左側を辿りkで止まる
sleep(1)
turn_right(0.6) #ボールに向けて角度を調整
sleep(1)
move_back(4.2) #アームを下すためにバック
sleep(1)
arm_move(6,-200) # アームを下す
sleep(1)
move_forward(2.2) #ボールへ前進
sleep(1)
catch_up(550,750) #ボールを持ち上げる
sleep(1)
turn_right(2.7) #箱の向きヘあわせる
sleep(1)
move_forward(3) #箱へ直進
sleep(1)
turn_right(2.5) #180°回転
sleep(1)
move_back(2) #ボールが箱に入るようにバックで位置調整
sleep(1)
arm_move(1,300) #ボールを射出
sleep(1)
turn_left(1.5) #L'のほうを向く
sleep(1)
move_forward(3) #直進してもう一方のロボットとの接触を防ぐ
sleep(1) #関数の中にsleep()をいれておけばよりすっきりした
*結果・改善点 [#pb4ee8a5]
発表会では一回目にボールを一つ入れることができた。しかし...
ページ名: