2019a/Member/TOY/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2019a/Member]]
目次
#contents
*課題について [#t653a1ed]
詳しくは[[2019a/Mission2]]を参照してください。
#ref(./2019a-mission2.png,100%,コース図面)
私は
A地点から出発 → M → K(直進) → L(ピンポン玉をつかむ) → K(...
というコースを線に沿わせてロボット動かしながら、卓球のピ...
ルールは交差点では1秒間停止し、丁字路では直角方向に進入す...
*方針 [#be1016a5]
・成功率を高めるために、多少のズレをカバーできる自立して...
・プログラムに余計な負担がこないように、小回りが利くロボ...
・前回の課題1([[2019a/Mission1]])の反省を生かし、周り...
等もしっかり参照する。ネットでも使える情報を集める。(時間...
*ロボットの設計 [#n1c449a6]
#ref(./810-10-min-min.png,10%,ロボット)
コースにはきついコーナーなどがあり、特に今回は例年よりコ...
その為に、まずタイヤをよりロボットの中央に近づけることか...
#ref(./810-1.PNG,50%,ロボット全体)
次に、重量物のev3、長い回収アームが上面にあるというかなり...
次に、ピンポン玉を回収するアームについて説明します。この...
#ref(./810-2.jpg,50%,ロボットアーム)
このアームは非常に長いので、最初の移動途中にピンポン玉に...
カラーセンサーの取り付け位置には気を付けました。これがタ...
#ref(./810-3.jpg,50%,カラーセンサの位置)
*ライントレース [#q8fc2041]
今回の課題ではカラーセンサーが一つしか与えられていない。...
#ref(./810-4.png,50%,ライントレースの図解)
実際のライントレースのサブルーチンは以下のようになります。
def line_trace_left(t,c): #線の左側をライントレース
x = time.time() #スタートの時刻
while time.time() - x < t: #現在時刻−スタート時刻が...
if cs.value() > c: #カラーセンサーの値がcより大き...
mL.run_forever(speed_sp=-90)
mR.run_forever(speed_sp=30)
x = time.time() #スタート時刻を更新する
else: #カラーセンサーの値がcより小...
mL.run_forever(speed_sp=30)
mR.run_forever(speed_sp=-90)
if time.time() - x > t: #現在時刻−スタート時刻がtよ...
mL.stop()
mR.stop()
#ref(./810-5.png,50%,line_trace_left)
def line_trace_right(t,c): #線の右側をライントレース
x = time.time() #スタートの時刻
while time.time() - x < t: #現在時刻−スタート時刻が...
if cs.value() > c: #カラーセンサーの値がcより...
mL.run_forever(speed_sp=30)
mR.run_forever(speed_sp=-90)
x = time.time() #スタート時刻を更新
else: #カラーセンサーの値がcより小さい、つまり...
mL.run_forever(speed_sp=-90)
mR.run_forever(speed_sp=30)
if time.time() - x >t: #現在時刻−スタート時刻がtよ...
mL.stop()
mR.stop()
#ref(./810-6.png,50%,line_trace_right)
*コーナーを検知しない対策 [#dc247ed9]
基本的にはライントレースのコーナー判定時間を短くし、境界...
*プログラム [#ee636431]
以下が実際のプログラムである。
#!/usr/bin/env python3 #使用言語はPython3とする
from ev3dev.ev3 import * #ev3devをインポートする
from time import sleep 時間はスリープ関数を使う
mL = LargeMotor('outA') #Left,つまり左のモータがAポー...
mR = LargeMotor('outD') #Right、つまり右のモーターがD...
mM = MediumMotor('outB') #MediumモーターがBポートに繋...
cs = ColorSensor('in3') #カラーセンサーがポート3に繋...
cs.mode = 'COL-REFLECT' #カラーセンサーが反射した光の...
def motor_init(): #左右のモーターの設定をリセットする。
mL.reset()
mR.reset()
def arm_move(t,y): #ピンポン球を上下に移動するアームを...
mM.run_timed(speed_sp=y,time_sp=t,stop_action='hold')
def move_forward_long(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 move_back_long(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 move_forward(t): #時間t/1000秒の間だけ前進する。短...
mL.run_timed(speed_sp=-100,time_sp=t,stop_action='bra...
mR.run_timed(speed_sp=-100,time_sp=t,stop_action='bra...
def move_back(t): #時間t/1000秒の間だけ前進する。短距...
mL.run_timed(speed_sp=100,time_sp=t,stop_action='brak...
mR.run_timed(speed_sp=100,time_sp=t,stop_action='brak...
def turn_right(t): #t/1000秒の間だけ右回転する。小さい...
mL.run_timed(speed_sp=-100,time_sp=t,stop_action='bra...
mR.run_timed(speed_sp=100,time_sp=t,stop_action='brak...
def turn_right_long(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_left(t): #t/1000秒の間だけ左回転する。小さな...
mL.run_timed(speed_sp=100,time_sp=t,stop_action='brak...
mR.run_timed(speed_sp=-100,time_sp=t,stop_action='bra...
def turn_left_long(t): #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_left(t,c): #cの値を境目に線の左側をジグ...
x = time.time()
while time.time() - x < t:
if cs.value() > c:
mL.run_forever(speed_sp=-90)
mR.run_forever(speed_sp=30)
x = time.time()
else:
mL.run_forever(speed_sp=30)
mR.run_forever(speed_sp=-90)
if time.time() - x > t:
mL.stop()
mR.stop()
def line_trace_right(t,c): #cの値を境目に線の右側をジ...
x = time.time()
while time.time() - x < t:
if cs.value() > c:
mL.run_forever(speed_sp=30)
mR.run_forever(speed_sp=-90)
x = time.time()
else:
mL.run_forever(speed_sp=-90)
mR.run_forever(speed_sp=30)
if time.time() - x >t:
mL.stop()
mR.stop()
if __name__ == '__main__':
print (cs.value()) #カラーセンサーの値を表示。この値...
sleep(1)
motor_init() #モーターをリセットする
sleep(1) #1秒間停止。(以下同様に、()の中の数字の...
arm_move(1300,100) #コースの途中でピンポン球にアーム...
sleep(5)
line_trace_left(1.1,40) #ライントレースをし、MからK...
sleep(1)
turn_right(655) #ピンポン球を回収するように角度を調整
sleep(1)
move_back_long(4) #Kで停止したままアームを下すと、ア...
sleep(5)
arm_move(700,-100) #アームを下す。
sleep(1)
motor_init()
sleep(1)
move_forward_long(1.3) #アームをピンポン球の下に潜ら...
sleep(1)
arm_move(1500,100) #アームを上昇させ、ピンポン球を持...
sleep(1)
move_forward_long(5.5) #Lまで移動する。
sleep(1)
turn_left_long(2.4) #Lまで移動する。
sleep(1)
line_trace_right(0.8,40) #LからKまで移動し、Kでコー...
sleep(1)
turn_left_long(0.5) #Kのスタート位置まで移動
sleep(1)
move_forward_long(1.5) #Kのスタート位置まで移動
sleep(1)
turn_right_long(2) #Kのスタート位置まで移動
sleep(1)
line_trace_right(0.8,20) #KからJま線の右側をライント...
sleep(1)
move_forward(200) #Jからスタートするための移動
sleep(1)
turn_left_long(1.3) #Jからスタートするための移動
sleep(1)
line_trace_left(0.87,40) #JからIまでライントレースす...
sleep(1)
turn_right(600) #Iのスタート位置まで移動
sleep(1)
move_forward(350) #Iのスタート位置まで移動
sleep(1)
line_trace_left(0.87,40) #IからHまでライントレースす...
sleep(1)
turn_right(600) #Hのスタート位置まで移動
sleep(1)
move_forward(350) #Hのスタート位置まで移動
sleep(1)
line_trace_left(0.87,40) #HからGまでライントレースす...
sleep(1)
turn_right(1000) #Gのスタート位置まで移動
sleep(1)
move_forward(400) #Gのスタート位置まで移動
sleep(3)
turn_left_long(1.5) #Gのスタート位置まで移動
sleep(1)
line_trace_left(1,20) #GからFまでライントレースする...
sleep(1)
move_forward(500) #Fのスタート位置まで移動
sleep(1)
turn_left(900) #Fのスタート位置まで移動
sleep(1)
line_trace_left(1,20) #FからEまでライントレースする...
sleep(1)
move_forward(500) #Eのスタート位置まで移動する
sleep(1)
turn_left(900) #Eのスタート位置まで移動する
sleep(1)
line_trace_left(1,20) #EからDまでライントレースする...
sleep(1)
turn_right(800) #Dのスタート位置まで移動する。ただし...
sleep(1)
move_forward(800)#Dのスタート位置まで移動する。ただし...
sleep(1)
line_trace_right(1,20) #DからBまでライントレースする...
sleep(1)
turn_left(600) #位置調整
sleep(1)
move_back_long(5) #長いアームを下すので後ろに下がる。
sleep(1)
arm_move(150,-500) #アームを早く下し、ピンポン球をA...
sleep(1)
*感想と反省 [#p32913e6]
上記のプログラムで難しかったことは、いくつもありました。
1つ目はMからKの間にある急コーナーです。ここをライントレー...
2つ目はピンポン球の回収です。回収するためにはピンポン球の...
3つ目はHIJGの円でのコーナー検知です。コーナーに侵入すると...
最後に、今回の課題は過去のレポートやpythonのテキスト=み...
*参考にした先輩のレポート [#t565491b]
http://yakushi.shinshu-u.ac.jp/robotics/?2018a%2FMember%2...
http://yakushi.shinshu-u.ac.jp/robotics/?2016b%2FMember%2...
http://yakushi.shinshu-u.ac.jp/robotics/?2016b%2FMember%2...
http://yakushi.shinshu-u.ac.jp/robotics/?2016a%2FMember%2...
*今回の課題で苦労してるEV3の方へ←後輩はこれだけでも読んで...
Pythonの基本を、特にwhile文やif文の理解は必須である。Pyth...
工学部 電子情報システム工学科所属でEV3を使うことになっ...
終了行:
[[2019a/Member]]
目次
#contents
*課題について [#t653a1ed]
詳しくは[[2019a/Mission2]]を参照してください。
#ref(./2019a-mission2.png,100%,コース図面)
私は
A地点から出発 → M → K(直進) → L(ピンポン玉をつかむ) → K(...
というコースを線に沿わせてロボット動かしながら、卓球のピ...
ルールは交差点では1秒間停止し、丁字路では直角方向に進入す...
*方針 [#be1016a5]
・成功率を高めるために、多少のズレをカバーできる自立して...
・プログラムに余計な負担がこないように、小回りが利くロボ...
・前回の課題1([[2019a/Mission1]])の反省を生かし、周り...
等もしっかり参照する。ネットでも使える情報を集める。(時間...
*ロボットの設計 [#n1c449a6]
#ref(./810-10-min-min.png,10%,ロボット)
コースにはきついコーナーなどがあり、特に今回は例年よりコ...
その為に、まずタイヤをよりロボットの中央に近づけることか...
#ref(./810-1.PNG,50%,ロボット全体)
次に、重量物のev3、長い回収アームが上面にあるというかなり...
次に、ピンポン玉を回収するアームについて説明します。この...
#ref(./810-2.jpg,50%,ロボットアーム)
このアームは非常に長いので、最初の移動途中にピンポン玉に...
カラーセンサーの取り付け位置には気を付けました。これがタ...
#ref(./810-3.jpg,50%,カラーセンサの位置)
*ライントレース [#q8fc2041]
今回の課題ではカラーセンサーが一つしか与えられていない。...
#ref(./810-4.png,50%,ライントレースの図解)
実際のライントレースのサブルーチンは以下のようになります。
def line_trace_left(t,c): #線の左側をライントレース
x = time.time() #スタートの時刻
while time.time() - x < t: #現在時刻−スタート時刻が...
if cs.value() > c: #カラーセンサーの値がcより大き...
mL.run_forever(speed_sp=-90)
mR.run_forever(speed_sp=30)
x = time.time() #スタート時刻を更新する
else: #カラーセンサーの値がcより小...
mL.run_forever(speed_sp=30)
mR.run_forever(speed_sp=-90)
if time.time() - x > t: #現在時刻−スタート時刻がtよ...
mL.stop()
mR.stop()
#ref(./810-5.png,50%,line_trace_left)
def line_trace_right(t,c): #線の右側をライントレース
x = time.time() #スタートの時刻
while time.time() - x < t: #現在時刻−スタート時刻が...
if cs.value() > c: #カラーセンサーの値がcより...
mL.run_forever(speed_sp=30)
mR.run_forever(speed_sp=-90)
x = time.time() #スタート時刻を更新
else: #カラーセンサーの値がcより小さい、つまり...
mL.run_forever(speed_sp=-90)
mR.run_forever(speed_sp=30)
if time.time() - x >t: #現在時刻−スタート時刻がtよ...
mL.stop()
mR.stop()
#ref(./810-6.png,50%,line_trace_right)
*コーナーを検知しない対策 [#dc247ed9]
基本的にはライントレースのコーナー判定時間を短くし、境界...
*プログラム [#ee636431]
以下が実際のプログラムである。
#!/usr/bin/env python3 #使用言語はPython3とする
from ev3dev.ev3 import * #ev3devをインポートする
from time import sleep 時間はスリープ関数を使う
mL = LargeMotor('outA') #Left,つまり左のモータがAポー...
mR = LargeMotor('outD') #Right、つまり右のモーターがD...
mM = MediumMotor('outB') #MediumモーターがBポートに繋...
cs = ColorSensor('in3') #カラーセンサーがポート3に繋...
cs.mode = 'COL-REFLECT' #カラーセンサーが反射した光の...
def motor_init(): #左右のモーターの設定をリセットする。
mL.reset()
mR.reset()
def arm_move(t,y): #ピンポン球を上下に移動するアームを...
mM.run_timed(speed_sp=y,time_sp=t,stop_action='hold')
def move_forward_long(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 move_back_long(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 move_forward(t): #時間t/1000秒の間だけ前進する。短...
mL.run_timed(speed_sp=-100,time_sp=t,stop_action='bra...
mR.run_timed(speed_sp=-100,time_sp=t,stop_action='bra...
def move_back(t): #時間t/1000秒の間だけ前進する。短距...
mL.run_timed(speed_sp=100,time_sp=t,stop_action='brak...
mR.run_timed(speed_sp=100,time_sp=t,stop_action='brak...
def turn_right(t): #t/1000秒の間だけ右回転する。小さい...
mL.run_timed(speed_sp=-100,time_sp=t,stop_action='bra...
mR.run_timed(speed_sp=100,time_sp=t,stop_action='brak...
def turn_right_long(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_left(t): #t/1000秒の間だけ左回転する。小さな...
mL.run_timed(speed_sp=100,time_sp=t,stop_action='brak...
mR.run_timed(speed_sp=-100,time_sp=t,stop_action='bra...
def turn_left_long(t): #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_left(t,c): #cの値を境目に線の左側をジグ...
x = time.time()
while time.time() - x < t:
if cs.value() > c:
mL.run_forever(speed_sp=-90)
mR.run_forever(speed_sp=30)
x = time.time()
else:
mL.run_forever(speed_sp=30)
mR.run_forever(speed_sp=-90)
if time.time() - x > t:
mL.stop()
mR.stop()
def line_trace_right(t,c): #cの値を境目に線の右側をジ...
x = time.time()
while time.time() - x < t:
if cs.value() > c:
mL.run_forever(speed_sp=30)
mR.run_forever(speed_sp=-90)
x = time.time()
else:
mL.run_forever(speed_sp=-90)
mR.run_forever(speed_sp=30)
if time.time() - x >t:
mL.stop()
mR.stop()
if __name__ == '__main__':
print (cs.value()) #カラーセンサーの値を表示。この値...
sleep(1)
motor_init() #モーターをリセットする
sleep(1) #1秒間停止。(以下同様に、()の中の数字の...
arm_move(1300,100) #コースの途中でピンポン球にアーム...
sleep(5)
line_trace_left(1.1,40) #ライントレースをし、MからK...
sleep(1)
turn_right(655) #ピンポン球を回収するように角度を調整
sleep(1)
move_back_long(4) #Kで停止したままアームを下すと、ア...
sleep(5)
arm_move(700,-100) #アームを下す。
sleep(1)
motor_init()
sleep(1)
move_forward_long(1.3) #アームをピンポン球の下に潜ら...
sleep(1)
arm_move(1500,100) #アームを上昇させ、ピンポン球を持...
sleep(1)
move_forward_long(5.5) #Lまで移動する。
sleep(1)
turn_left_long(2.4) #Lまで移動する。
sleep(1)
line_trace_right(0.8,40) #LからKまで移動し、Kでコー...
sleep(1)
turn_left_long(0.5) #Kのスタート位置まで移動
sleep(1)
move_forward_long(1.5) #Kのスタート位置まで移動
sleep(1)
turn_right_long(2) #Kのスタート位置まで移動
sleep(1)
line_trace_right(0.8,20) #KからJま線の右側をライント...
sleep(1)
move_forward(200) #Jからスタートするための移動
sleep(1)
turn_left_long(1.3) #Jからスタートするための移動
sleep(1)
line_trace_left(0.87,40) #JからIまでライントレースす...
sleep(1)
turn_right(600) #Iのスタート位置まで移動
sleep(1)
move_forward(350) #Iのスタート位置まで移動
sleep(1)
line_trace_left(0.87,40) #IからHまでライントレースす...
sleep(1)
turn_right(600) #Hのスタート位置まで移動
sleep(1)
move_forward(350) #Hのスタート位置まで移動
sleep(1)
line_trace_left(0.87,40) #HからGまでライントレースす...
sleep(1)
turn_right(1000) #Gのスタート位置まで移動
sleep(1)
move_forward(400) #Gのスタート位置まで移動
sleep(3)
turn_left_long(1.5) #Gのスタート位置まで移動
sleep(1)
line_trace_left(1,20) #GからFまでライントレースする...
sleep(1)
move_forward(500) #Fのスタート位置まで移動
sleep(1)
turn_left(900) #Fのスタート位置まで移動
sleep(1)
line_trace_left(1,20) #FからEまでライントレースする...
sleep(1)
move_forward(500) #Eのスタート位置まで移動する
sleep(1)
turn_left(900) #Eのスタート位置まで移動する
sleep(1)
line_trace_left(1,20) #EからDまでライントレースする...
sleep(1)
turn_right(800) #Dのスタート位置まで移動する。ただし...
sleep(1)
move_forward(800)#Dのスタート位置まで移動する。ただし...
sleep(1)
line_trace_right(1,20) #DからBまでライントレースする...
sleep(1)
turn_left(600) #位置調整
sleep(1)
move_back_long(5) #長いアームを下すので後ろに下がる。
sleep(1)
arm_move(150,-500) #アームを早く下し、ピンポン球をA...
sleep(1)
*感想と反省 [#p32913e6]
上記のプログラムで難しかったことは、いくつもありました。
1つ目はMからKの間にある急コーナーです。ここをライントレー...
2つ目はピンポン球の回収です。回収するためにはピンポン球の...
3つ目はHIJGの円でのコーナー検知です。コーナーに侵入すると...
最後に、今回の課題は過去のレポートやpythonのテキスト=み...
*参考にした先輩のレポート [#t565491b]
http://yakushi.shinshu-u.ac.jp/robotics/?2018a%2FMember%2...
http://yakushi.shinshu-u.ac.jp/robotics/?2016b%2FMember%2...
http://yakushi.shinshu-u.ac.jp/robotics/?2016b%2FMember%2...
http://yakushi.shinshu-u.ac.jp/robotics/?2016a%2FMember%2...
*今回の課題で苦労してるEV3の方へ←後輩はこれだけでも読んで...
Pythonの基本を、特にwhile文やif文の理解は必須である。Pyth...
工学部 電子情報システム工学科所属でEV3を使うことになっ...
ページ名: