2018a/Member/gear/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2018a/Member]]
#contents
*課題2の説明 [#g77517d1]
**内容 [#n00a28e5]
下の図のようなコースを各チームで作成し、「ミッション」を...
***コース [#ycc153c5]
&ref(2018a/Member/gear/Mission2/2018a_mission2.png,80%,課...
&ref(2018a/Member/gear/Mission2/2018a_mission2_route.png,...
***コースの説明 [#t240a8af]
-缶のキャッチングまで
&size(18){Aをスタート ⇒ Bを直進 ⇒ Cで一時停止の後、直進 ⇒...
-缶をホールドしたままライントレース
&size(18){⇒ DからEに向かい、Eを直進 ⇒ FをGで一時停止の後...
-缶をリリースのち帰還まで
&size(18){⇒ Lを直進Kを直進 ⇒ Jで一時停止の後、空き缶をYに...
**方針 [#t6b0dfa9]
-出来るだけ正確かつスピードの速いライントレースをするため...
~
-トレースの仕方はラインの縁を付属のカラーセンサーを用いて...
~
-指定の交差点で一時停止するときを考えると,上述のジグザグ...
&ref(2018a/Member/gear/Mission2/explanation_line.png,86%,...
*扱うロボットの説明 [#c131aaf1]
**ロボットの全体像 [#ued88287]
今回で扱うロボットは課題1と同様にEV3である.以下の写真の...
&ref(2018a/Member/gear/Mission2/robot_figure.jpg,86%,ロボ...
&size(18){アームを開くとこんな感じ→};&ref(2018a/Member/ge...
~
缶のキャッチングのためのアームは,両脇より挟む様式を用い...
&ref(2018a/Member/gear/Mission2/figure_can_catch.png,80%,...
&ref(2018a/Member/gear/Mission2/figure_can_catching.png,8...
**使用する諸機器 [#ic81df57]
***&size(17){カラーセンサー}; [#ped5caca]
今回の課題完遂のための最重要部分である.~
~
&ref(2018a/Member/gear/Mission2/figure_Color-Sensor.jpg,4...
~
なるべくタイヤの前方につけることで,色を検知してジグザグ...
***&size(17){超音波センサー}; [#l55bd07d]
缶のキャッチやリリースの際に使用する.~
~
&ref(2018a/Member/gear/Mission2/figure_Ultrasonic-Sensor....
~
本体の真正面についていないことに注意する.
*ライントレースにあたって [#l58a721b]
**地点間の移動 [#fb77948]
-&color(blue){&size(18){A→B→C};};~
単調な長いカーブがあるので,交差点の手前までにかかりそう...
-&color(blue){&size(17){C→D→X地点にある缶をキャッチ};};~
急カーブ手前の直線は速度を大きくさせて &size(17){テキトー...
-&color(blue){&size(17){D→E→F→G};};~
缶をキャッチした後にサークルから離脱,トレースをさせてE,F...
-&color(blue){&size(17){G→H};};~
二番目の急カーブまでは正確にトレースさせる.最後の直線に...
-&color(blue){&size(17){H→I};};~
H地点で一時停止した後,右方向へ車体を向けて正確にトレース...
-&color(blue){&size(17){I→J};};~
L,K地点では一時停止する必要はないが,簡易的に扱うために交...
-&color(blue){&size(17){Y地点に缶をリリース→B};};~
J地点で一時停止後,車体を旋回させて缶をY地点の真上に位置...
-&color(blue){&size(17){B→A};};~
B地点で一時停止後,左折してAに向かい,T字の部分で交差点と...
~
&size(15){※なお,スタート時のカウントダウンや交差点検知に...
**注意点 [#df9c0499]
***ロボット本体について [#ha31b1a6]
今回の課題で扱うロボットは最初の写真から分かる通り重装備...
&ref(2018a/Member/gear/Mission2/example_accident.png,80%,...
***ライントレース時について [#y73ef421]
ライントレースでは&color(red){車体のスピードと切り返しの...
*実行プログラムの説明 [#ub70388e]
**プログラムの導入 [#o596b472]
今回はEV3を扱っているため,プログラミングにTera Termとい...
以下は定義までの導入である
1#!/usr/bin/env python3
from ev3dev.ev3 import * #EV3を扱うモジュールをイン...
from time import #timeモジュールをインポート
mL = LargeMotor('outA') #A端子側の移動用モーターをm...
mR = LargeMotor('outB') #B端子側の移動用モーターをm...
mA = MediumMotor('outC') #C端子側のアーム開閉用モー...
cs = ColorSensor('in1') #1端子側のカラーセンサーをc...
us = UltrasonicSensor('in2') #2端子側の超音波センサーをu...
**定義の挿入 [#v2fcb8ff]
***トレースの各場面で基本的に扱うもの [#p1b968fc]
def motor_init(): #各モーターをリセットする
mL.reset()
mR.reset()
mA.reset()
def turn(r): #その場で角度 r だけ旋回す...
mL.run_to_rel_pos(position_sp=r,speed_sp=100,stop_act...
mR.run_to_rel_pos(position_sp=-r,speed_sp=100,stop_ac...
sleep(1)
def line_follow_fast(t): #指定時間 t だけ速度を大きくし...
motor_init()
tS = time.time()
while time.time() - tS < t:
if cs.value() <= 30:
mL.run_forever(speed_sp=130)
mR.run_forever(speed_sp=40)
if cs.value() >= 30:
mL.run_forever(speed_sp=40)
mR.run_forever(speed_sp=130)
if time.time() - tS > t:
mL.stop()
mR.stop()
sleep(1)
以下は交差点検知用トレースプログラムである.なお,カラー...
def inter_find1(): #ラインの左側をトレースすると...
motor_init()
tS = time.time() #検知開始時刻を tS と...
while time.time() - tS < 0.47: #検知継続時間が0.4秒...
if cs.value() <= 30: #「白」っぽい色を検知...
mL.run_forever(speed_sp=100)
mR.run_forever(speed_sp=-40)
if cs.value() >= 30: #「黒」っぽい色を検知...
mL.run_forever(speed_sp=-30)
mR.run_forever(speed_sp=70) #正確に検知継続時...
tS = time.time() #タイムカウント開始 ...
if time.time() - tS > 0.47: #検知継続時間が0.4秒...
mL.stop()
mR.stop()
sleep(1)
def inter_find2(): #ラインの右側をトレースすると...
motor_init()
tS = time.time()
while time.time() - tS < 0.47:
if cs.value() <= 30:
mL.run_forever(speed_sp=-40)
mR.run_forever(speed_sp=100)
if cs.value() >= 30:
mL.run_forever(speed_sp=70)
mR.run_forever(speed_sp=-30)
tS = time.time()
if time.time()- tS > 0.47:
mL.stop()
mR.stop()
sleep(1)
以下は各交差点を検知するためのプログラムである.
def inter1_straight(): #第一交差点(C地点)
inter_find2()
sing_go()
def inter4_left(): #第四交差点(G地点)
inter_find1()
sing_go()
def inter5_right(): #第五交差点(H地点)
inter_find2()
sing_go()
def inter6_right(): #第六交差点(I地点)
inter_find2()
sing_go()
turn(60)
sleep(1)
B地点の交差点での検知については工夫した点があるので後述で...
***アームを開閉させる時に扱うもの [#e238d6ac]
def can_catch(): #アームを内側へ開く(キャッ...
motor_init()
mA.run_to_rel_pos(position_sp=46,speed_sp=40,stop_ac...
sleep(1)
def can_release(): #アームを外側へ開く(アーム...
mA.reset
mA.run_to_rel_pos(position_sp=-46,speed_sp=50,stop_a...
sleep(1)
***EV3で音を出すときに扱うもの [#j500eed2]
今回は交差点を検知したときとスタートまでのカウントダウン...
def sing_start(): #3秒間のカウント
for i in [1,2,3]: #後述のコマンドを3...
Sound.tone(600, 300).wait() #600ヘルツを0.3秒間...
sleep(0.7)
def sing_go(): #高音域を発声
Sound.tone(1200, 400).wait() #1200ヘルツを0.4秒...
def sound_start(): #スタート3秒前カウント(イメー...
sing_start()
sing_go()
***円滑なライントレースのために [#z25983bd]
基本的にトレースの行程に沿って説明する.~
トレース序盤
def curve_fast(): #第一カーブのトレース
line_follow_fast(11)
def straight_fast_inter1(): #第一交差点通過後の直線のト...
line_follow_fast(10)
以下は第二カーブから缶のキャッチ,G地点の交差点検知にかけて
def curve_follow_catch(): #第二カーブをトレース,D地点で...
motor_init() 缶を検知(なお...
while us.value() >= 55: #缶との距離が55mm超の場合,...
if cs.value() <= 30:
mL.run_forever(speed_sp=-40)
mR.run_forever(speed_sp=90)
if cs.value() >= 30:
mL.run_forever(speed_sp=90)
mR.run_forever(speed_sp=-40)
if us.value() <= 55: #55mmに達したらwhileを抜けて一...
mL.stop()
mR.stop()
sing_go()
sleep(1)
mL.run_to_rel_pos(position_sp=80,speed_sp=80,sto...
mR.run_to_rel_pos(position_sp=80,speed_sp=80,sto...
def inter_find_through1(): #キャッチした後にサークルから...
motor_init()
mL.run_to_rel_pos(position_sp=-80,speed_sp=80,stop_a...
mR.run_to_rel_pos(position_sp=-80,speed_sp=80,stop_a...
sleep(0.5)
turn(-90)
inter4_left()
↓curve_follow_catch() から inter_find_through1() までの様...
~
&ref(2018a/Member/gear/Mission2/figure_catching1.jpg,50%,...
&ref(2018a/Member/gear/Mission2/figure_catching2.jpg,50%,...
&ref(2018a/Member/gear/Mission2/figure_catching3.jpg,50%,...
&ref(2018a/Member/gear/Mission2/figure_catching4.jpg,50%,...
&ref(2018a/Member/gear/Mission2/figure_catching5.jpg,50%,...
~
以下はG地点からH地点までの連続カーブをトレースするための...
第四カーブ通過後すぐの直線を速度の大きいトレースに切り替...
def zigzag_follow(): #G地点からH地点までの連続する...
motor_init()
tS = time.time()
while time.time() - tS < 2.5:
if cs.value() <= 30:
mL.run_forever(speed_sp=-40)
mR.run_forever(speed_sp=90)
tS = time.time()
if cs.value() >= 30:
mL.run_forever(speed_sp=90)
mR.run_forever(speed_sp=-40)
if time.time() - tS > 2.5:
turn(100) #H地点手前で交差点検知に移るた...
sleep(0.5)
line_follow_fast(5) #第四カーブ通過後の直線を速度...
sleep(0.5)
def inter_find_through2(): #L,K,J地点を交差点として検知...
for i in [1,2,3]: #L,K,Jの3地点で後述のコマンド...
inter_find2() #↓交差点を検知した後,トレー...
sleep(1)
mL.run_to_rel_pos(position_sp=40,speed_sp=40,sto...
mR.run_to_rel_pos(position_sp=160,speed_sp=120,s...
sleep(1.2)
turn(-20)
sleep(0.5)
実は全くの偶然だが,inter_find_through2でのトレースの仕方...
なお,次の地点までのトレース前に体勢を整えていなければ,...
&ref(2018a/Member/gear/Mission2/inter_find_through2.png,5...
~
以下は缶のリリースと方向転換の過程である.~
def follow_release():
inter_find_through2() #I地点からJ地点までサークルを...
sing_go()
turn(-200) #Y地点に缶をリリースする角度...
sleep(0.5)
can_release() #缶をリリース
sleep(0.5)
mL.run_to_rel_pos(position_sp=-200,speed_sp=80,stop_...
mR.run_to_rel_pos(position_sp=-200,speed_sp=80,stop_...
sleep(1)
※このとき,旋回しても車体が缶に当たらない距離まで下がるた...
~
~
車体の方向を転換してB地点へ向かう.
def leave_circle():
motor_init()
while us.value() <= 120: #超音波センサーで,旋回して...
mL.run_forever(speed_sp=-100)
mR.run_forever(speed_sp=-100)
if us.value() >= 120:
mL.stop()
mR.stop()
sleep(0.1)
turn(90) #少し車体の角度を変える
while cs.value() >= 30: #ラインを検知するまで進む
mL.run_forever(speed_sp=80)
mR.run_forever(speed_sp=80)
if cs.value() <= 30:
mL.stop() #ラインを検知したら一時停止
mR.stop()
sleep(0.1) #↓ラインを跨ぐ
mL.run_to_rel_pos(position_sp=90,speed_sp=80,sto...
mR.run_to_rel_pos(position_sp=90,speed_sp=80,sto...
sleep(1)
以下の図は後退から旋回に移るまでの過程の様子である.~
~
&ref(2018a/Member/gear/Mission2/turn_locus.png,90%,カラー...
def inter10_find_left():
motor_init()
while cs.value() >= 30: #ラインを検知するまで(検知...
mL.run_forever(speed_sp=80)
mR.run_forever(speed_sp=-80)
if cs.value() <= 30:
mL.stop()
mR.stop()
sleep(0.1)
inter_find2() #ラインを検知したら,B地点...
sing_go()
mL.run_to_rel_pos(position_sp=80,speed_sp=80,stop_...
mR.run_to_rel_pos(position_sp=80,speed_sp=80,stop_...
sleep(0.5)
turn(-58)
以下の図は inter10_find_left の動作の様子である.~
~
&ref(2018a/Member/gear/Mission2/inter10_trace_locus3.png,...
※※このとき,検知後に曲がってラインから外れるだけでは次ト...
~
&size(25){×};&ref(2018a/Member/gear/Mission2/inter10_trac...
&ref(2018a/Member/gear/Mission2/trace_faulse.png,40%,誤検...
&size(25){〇};&ref(2018a/Member/gear/Mission2/inter10_tra...
~
以下はスクエアを探して後方より入庫するまで
def find_square():
inter_find1() #突き当りを交差点として検知
sleep(1)
turn(-360) #方向転換
sleep(0.3)
def enter_square(): #後方より入庫
motor_init()
mL.run_to_rel_pos(position_sp=-250,speed_sp=80,stop_...
mR.run_to_rel_pos(position_sp=-250,speed_sp=80,stop_...
sleep(2)
can_catch()
**実際の作動プログラム [#r97b7025]
sound_start() #スタート合図
curve_fast() #緩やかな第一カーブを速くトレース
inter1_straight() #第一交差点を検知&停止→直進
straight_fast_inter1() #検知後の直線を速くトレース
turn(-40) #ラインの右側トレースから左側トレ...
can_release() #アームを開いてキャッチングの準備...
curve_follow_catch() #急な第二カーブを通過後,第二交差...
inter_find_through1() #最初のサークルを辿り,第四交差点...
zigzag_follow() #急カーブが連続する第三カーブを通過
inter5_right() #第五交差点を検知&停止→右折
inter6_right() #第六交差点を検知&停止→右折
follow_release() #サークルを辿り,第九交差点で停止...
leave_circle() #缶のリリース後,サークルより離れ...
inter10_find_left() #第十交差点を検知&停止→左折
find_square() #ベーススクエアまで戻る
enter_square() #T字路で検知&停止からの方向転換し...
※※※キャッチに入る前になぜトレースの位置を変更するかという...
*感想 [#aa2002a8]
今回はハードウエアに対して比較的時間をかけなかったので,...
本日&counter(today);昨日&counter(yesterday);合計&counter(...
終了行:
[[2018a/Member]]
#contents
*課題2の説明 [#g77517d1]
**内容 [#n00a28e5]
下の図のようなコースを各チームで作成し、「ミッション」を...
***コース [#ycc153c5]
&ref(2018a/Member/gear/Mission2/2018a_mission2.png,80%,課...
&ref(2018a/Member/gear/Mission2/2018a_mission2_route.png,...
***コースの説明 [#t240a8af]
-缶のキャッチングまで
&size(18){Aをスタート ⇒ Bを直進 ⇒ Cで一時停止の後、直進 ⇒...
-缶をホールドしたままライントレース
&size(18){⇒ DからEに向かい、Eを直進 ⇒ FをGで一時停止の後...
-缶をリリースのち帰還まで
&size(18){⇒ Lを直進Kを直進 ⇒ Jで一時停止の後、空き缶をYに...
**方針 [#t6b0dfa9]
-出来るだけ正確かつスピードの速いライントレースをするため...
~
-トレースの仕方はラインの縁を付属のカラーセンサーを用いて...
~
-指定の交差点で一時停止するときを考えると,上述のジグザグ...
&ref(2018a/Member/gear/Mission2/explanation_line.png,86%,...
*扱うロボットの説明 [#c131aaf1]
**ロボットの全体像 [#ued88287]
今回で扱うロボットは課題1と同様にEV3である.以下の写真の...
&ref(2018a/Member/gear/Mission2/robot_figure.jpg,86%,ロボ...
&size(18){アームを開くとこんな感じ→};&ref(2018a/Member/ge...
~
缶のキャッチングのためのアームは,両脇より挟む様式を用い...
&ref(2018a/Member/gear/Mission2/figure_can_catch.png,80%,...
&ref(2018a/Member/gear/Mission2/figure_can_catching.png,8...
**使用する諸機器 [#ic81df57]
***&size(17){カラーセンサー}; [#ped5caca]
今回の課題完遂のための最重要部分である.~
~
&ref(2018a/Member/gear/Mission2/figure_Color-Sensor.jpg,4...
~
なるべくタイヤの前方につけることで,色を検知してジグザグ...
***&size(17){超音波センサー}; [#l55bd07d]
缶のキャッチやリリースの際に使用する.~
~
&ref(2018a/Member/gear/Mission2/figure_Ultrasonic-Sensor....
~
本体の真正面についていないことに注意する.
*ライントレースにあたって [#l58a721b]
**地点間の移動 [#fb77948]
-&color(blue){&size(18){A→B→C};};~
単調な長いカーブがあるので,交差点の手前までにかかりそう...
-&color(blue){&size(17){C→D→X地点にある缶をキャッチ};};~
急カーブ手前の直線は速度を大きくさせて &size(17){テキトー...
-&color(blue){&size(17){D→E→F→G};};~
缶をキャッチした後にサークルから離脱,トレースをさせてE,F...
-&color(blue){&size(17){G→H};};~
二番目の急カーブまでは正確にトレースさせる.最後の直線に...
-&color(blue){&size(17){H→I};};~
H地点で一時停止した後,右方向へ車体を向けて正確にトレース...
-&color(blue){&size(17){I→J};};~
L,K地点では一時停止する必要はないが,簡易的に扱うために交...
-&color(blue){&size(17){Y地点に缶をリリース→B};};~
J地点で一時停止後,車体を旋回させて缶をY地点の真上に位置...
-&color(blue){&size(17){B→A};};~
B地点で一時停止後,左折してAに向かい,T字の部分で交差点と...
~
&size(15){※なお,スタート時のカウントダウンや交差点検知に...
**注意点 [#df9c0499]
***ロボット本体について [#ha31b1a6]
今回の課題で扱うロボットは最初の写真から分かる通り重装備...
&ref(2018a/Member/gear/Mission2/example_accident.png,80%,...
***ライントレース時について [#y73ef421]
ライントレースでは&color(red){車体のスピードと切り返しの...
*実行プログラムの説明 [#ub70388e]
**プログラムの導入 [#o596b472]
今回はEV3を扱っているため,プログラミングにTera Termとい...
以下は定義までの導入である
1#!/usr/bin/env python3
from ev3dev.ev3 import * #EV3を扱うモジュールをイン...
from time import #timeモジュールをインポート
mL = LargeMotor('outA') #A端子側の移動用モーターをm...
mR = LargeMotor('outB') #B端子側の移動用モーターをm...
mA = MediumMotor('outC') #C端子側のアーム開閉用モー...
cs = ColorSensor('in1') #1端子側のカラーセンサーをc...
us = UltrasonicSensor('in2') #2端子側の超音波センサーをu...
**定義の挿入 [#v2fcb8ff]
***トレースの各場面で基本的に扱うもの [#p1b968fc]
def motor_init(): #各モーターをリセットする
mL.reset()
mR.reset()
mA.reset()
def turn(r): #その場で角度 r だけ旋回す...
mL.run_to_rel_pos(position_sp=r,speed_sp=100,stop_act...
mR.run_to_rel_pos(position_sp=-r,speed_sp=100,stop_ac...
sleep(1)
def line_follow_fast(t): #指定時間 t だけ速度を大きくし...
motor_init()
tS = time.time()
while time.time() - tS < t:
if cs.value() <= 30:
mL.run_forever(speed_sp=130)
mR.run_forever(speed_sp=40)
if cs.value() >= 30:
mL.run_forever(speed_sp=40)
mR.run_forever(speed_sp=130)
if time.time() - tS > t:
mL.stop()
mR.stop()
sleep(1)
以下は交差点検知用トレースプログラムである.なお,カラー...
def inter_find1(): #ラインの左側をトレースすると...
motor_init()
tS = time.time() #検知開始時刻を tS と...
while time.time() - tS < 0.47: #検知継続時間が0.4秒...
if cs.value() <= 30: #「白」っぽい色を検知...
mL.run_forever(speed_sp=100)
mR.run_forever(speed_sp=-40)
if cs.value() >= 30: #「黒」っぽい色を検知...
mL.run_forever(speed_sp=-30)
mR.run_forever(speed_sp=70) #正確に検知継続時...
tS = time.time() #タイムカウント開始 ...
if time.time() - tS > 0.47: #検知継続時間が0.4秒...
mL.stop()
mR.stop()
sleep(1)
def inter_find2(): #ラインの右側をトレースすると...
motor_init()
tS = time.time()
while time.time() - tS < 0.47:
if cs.value() <= 30:
mL.run_forever(speed_sp=-40)
mR.run_forever(speed_sp=100)
if cs.value() >= 30:
mL.run_forever(speed_sp=70)
mR.run_forever(speed_sp=-30)
tS = time.time()
if time.time()- tS > 0.47:
mL.stop()
mR.stop()
sleep(1)
以下は各交差点を検知するためのプログラムである.
def inter1_straight(): #第一交差点(C地点)
inter_find2()
sing_go()
def inter4_left(): #第四交差点(G地点)
inter_find1()
sing_go()
def inter5_right(): #第五交差点(H地点)
inter_find2()
sing_go()
def inter6_right(): #第六交差点(I地点)
inter_find2()
sing_go()
turn(60)
sleep(1)
B地点の交差点での検知については工夫した点があるので後述で...
***アームを開閉させる時に扱うもの [#e238d6ac]
def can_catch(): #アームを内側へ開く(キャッ...
motor_init()
mA.run_to_rel_pos(position_sp=46,speed_sp=40,stop_ac...
sleep(1)
def can_release(): #アームを外側へ開く(アーム...
mA.reset
mA.run_to_rel_pos(position_sp=-46,speed_sp=50,stop_a...
sleep(1)
***EV3で音を出すときに扱うもの [#j500eed2]
今回は交差点を検知したときとスタートまでのカウントダウン...
def sing_start(): #3秒間のカウント
for i in [1,2,3]: #後述のコマンドを3...
Sound.tone(600, 300).wait() #600ヘルツを0.3秒間...
sleep(0.7)
def sing_go(): #高音域を発声
Sound.tone(1200, 400).wait() #1200ヘルツを0.4秒...
def sound_start(): #スタート3秒前カウント(イメー...
sing_start()
sing_go()
***円滑なライントレースのために [#z25983bd]
基本的にトレースの行程に沿って説明する.~
トレース序盤
def curve_fast(): #第一カーブのトレース
line_follow_fast(11)
def straight_fast_inter1(): #第一交差点通過後の直線のト...
line_follow_fast(10)
以下は第二カーブから缶のキャッチ,G地点の交差点検知にかけて
def curve_follow_catch(): #第二カーブをトレース,D地点で...
motor_init() 缶を検知(なお...
while us.value() >= 55: #缶との距離が55mm超の場合,...
if cs.value() <= 30:
mL.run_forever(speed_sp=-40)
mR.run_forever(speed_sp=90)
if cs.value() >= 30:
mL.run_forever(speed_sp=90)
mR.run_forever(speed_sp=-40)
if us.value() <= 55: #55mmに達したらwhileを抜けて一...
mL.stop()
mR.stop()
sing_go()
sleep(1)
mL.run_to_rel_pos(position_sp=80,speed_sp=80,sto...
mR.run_to_rel_pos(position_sp=80,speed_sp=80,sto...
def inter_find_through1(): #キャッチした後にサークルから...
motor_init()
mL.run_to_rel_pos(position_sp=-80,speed_sp=80,stop_a...
mR.run_to_rel_pos(position_sp=-80,speed_sp=80,stop_a...
sleep(0.5)
turn(-90)
inter4_left()
↓curve_follow_catch() から inter_find_through1() までの様...
~
&ref(2018a/Member/gear/Mission2/figure_catching1.jpg,50%,...
&ref(2018a/Member/gear/Mission2/figure_catching2.jpg,50%,...
&ref(2018a/Member/gear/Mission2/figure_catching3.jpg,50%,...
&ref(2018a/Member/gear/Mission2/figure_catching4.jpg,50%,...
&ref(2018a/Member/gear/Mission2/figure_catching5.jpg,50%,...
~
以下はG地点からH地点までの連続カーブをトレースするための...
第四カーブ通過後すぐの直線を速度の大きいトレースに切り替...
def zigzag_follow(): #G地点からH地点までの連続する...
motor_init()
tS = time.time()
while time.time() - tS < 2.5:
if cs.value() <= 30:
mL.run_forever(speed_sp=-40)
mR.run_forever(speed_sp=90)
tS = time.time()
if cs.value() >= 30:
mL.run_forever(speed_sp=90)
mR.run_forever(speed_sp=-40)
if time.time() - tS > 2.5:
turn(100) #H地点手前で交差点検知に移るた...
sleep(0.5)
line_follow_fast(5) #第四カーブ通過後の直線を速度...
sleep(0.5)
def inter_find_through2(): #L,K,J地点を交差点として検知...
for i in [1,2,3]: #L,K,Jの3地点で後述のコマンド...
inter_find2() #↓交差点を検知した後,トレー...
sleep(1)
mL.run_to_rel_pos(position_sp=40,speed_sp=40,sto...
mR.run_to_rel_pos(position_sp=160,speed_sp=120,s...
sleep(1.2)
turn(-20)
sleep(0.5)
実は全くの偶然だが,inter_find_through2でのトレースの仕方...
なお,次の地点までのトレース前に体勢を整えていなければ,...
&ref(2018a/Member/gear/Mission2/inter_find_through2.png,5...
~
以下は缶のリリースと方向転換の過程である.~
def follow_release():
inter_find_through2() #I地点からJ地点までサークルを...
sing_go()
turn(-200) #Y地点に缶をリリースする角度...
sleep(0.5)
can_release() #缶をリリース
sleep(0.5)
mL.run_to_rel_pos(position_sp=-200,speed_sp=80,stop_...
mR.run_to_rel_pos(position_sp=-200,speed_sp=80,stop_...
sleep(1)
※このとき,旋回しても車体が缶に当たらない距離まで下がるた...
~
~
車体の方向を転換してB地点へ向かう.
def leave_circle():
motor_init()
while us.value() <= 120: #超音波センサーで,旋回して...
mL.run_forever(speed_sp=-100)
mR.run_forever(speed_sp=-100)
if us.value() >= 120:
mL.stop()
mR.stop()
sleep(0.1)
turn(90) #少し車体の角度を変える
while cs.value() >= 30: #ラインを検知するまで進む
mL.run_forever(speed_sp=80)
mR.run_forever(speed_sp=80)
if cs.value() <= 30:
mL.stop() #ラインを検知したら一時停止
mR.stop()
sleep(0.1) #↓ラインを跨ぐ
mL.run_to_rel_pos(position_sp=90,speed_sp=80,sto...
mR.run_to_rel_pos(position_sp=90,speed_sp=80,sto...
sleep(1)
以下の図は後退から旋回に移るまでの過程の様子である.~
~
&ref(2018a/Member/gear/Mission2/turn_locus.png,90%,カラー...
def inter10_find_left():
motor_init()
while cs.value() >= 30: #ラインを検知するまで(検知...
mL.run_forever(speed_sp=80)
mR.run_forever(speed_sp=-80)
if cs.value() <= 30:
mL.stop()
mR.stop()
sleep(0.1)
inter_find2() #ラインを検知したら,B地点...
sing_go()
mL.run_to_rel_pos(position_sp=80,speed_sp=80,stop_...
mR.run_to_rel_pos(position_sp=80,speed_sp=80,stop_...
sleep(0.5)
turn(-58)
以下の図は inter10_find_left の動作の様子である.~
~
&ref(2018a/Member/gear/Mission2/inter10_trace_locus3.png,...
※※このとき,検知後に曲がってラインから外れるだけでは次ト...
~
&size(25){×};&ref(2018a/Member/gear/Mission2/inter10_trac...
&ref(2018a/Member/gear/Mission2/trace_faulse.png,40%,誤検...
&size(25){〇};&ref(2018a/Member/gear/Mission2/inter10_tra...
~
以下はスクエアを探して後方より入庫するまで
def find_square():
inter_find1() #突き当りを交差点として検知
sleep(1)
turn(-360) #方向転換
sleep(0.3)
def enter_square(): #後方より入庫
motor_init()
mL.run_to_rel_pos(position_sp=-250,speed_sp=80,stop_...
mR.run_to_rel_pos(position_sp=-250,speed_sp=80,stop_...
sleep(2)
can_catch()
**実際の作動プログラム [#r97b7025]
sound_start() #スタート合図
curve_fast() #緩やかな第一カーブを速くトレース
inter1_straight() #第一交差点を検知&停止→直進
straight_fast_inter1() #検知後の直線を速くトレース
turn(-40) #ラインの右側トレースから左側トレ...
can_release() #アームを開いてキャッチングの準備...
curve_follow_catch() #急な第二カーブを通過後,第二交差...
inter_find_through1() #最初のサークルを辿り,第四交差点...
zigzag_follow() #急カーブが連続する第三カーブを通過
inter5_right() #第五交差点を検知&停止→右折
inter6_right() #第六交差点を検知&停止→右折
follow_release() #サークルを辿り,第九交差点で停止...
leave_circle() #缶のリリース後,サークルより離れ...
inter10_find_left() #第十交差点を検知&停止→左折
find_square() #ベーススクエアまで戻る
enter_square() #T字路で検知&停止からの方向転換し...
※※※キャッチに入る前になぜトレースの位置を変更するかという...
*感想 [#aa2002a8]
今回はハードウエアに対して比較的時間をかけなかったので,...
本日&counter(today);昨日&counter(yesterday);合計&counter(...
ページ名: