2016a/Member/maria55/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
#contents
*ロボットの全体像 [#eacb7d78]
前回の人の顔を描くロボットをベースにして、ライントレース...
~
前回の顔を描くロボットの図(センサー系の取り外しがやりや...
#ref(./ロボットの全体像.JPG)
~
↓~
~
今回のロボットの図~
#ref(./1.jpg,サイズ,画像の説明)
~
タッチセンサを用いたロボットも課題になっているので、前回...
~
また、できるだけライントレースの白黒の見分けが正確になる...
~
ライトセンサーを接写した図~
#ref(./2.jpg)
~
ライトセンサーと紙面の距離は約1cmである。あまり近すぎ...
~
*今回達成するべき課題 [#cba4a907]
#ref(./課題.png)
A地点からB地点へ (一人目)
A地点 → P直進 → Q直進 → Q直進 → R左折 → B地点
3人で構成された班であったので、それぞれのメンバーで達成...
~
自分はAコースを担当することになったので、Aコースについて...
~
*ロボットを動かす基本の考え方 [#d777e0bf]
ロボットにライントレースをさせるにあたって必要となる動作...
~
今回必要となる主な動作は~
~
・白を感知したら左にハンドルを切る
・黒を感知したら右にハンドルを切る
~
これらの動作の組み合わせで、白と黒の境界線をじぐざぐに進...
~
また、その他細かいプログラムをすることで、課題を完成させ...
~
*プログラム本体[#j96e677b]
今回は、交差点の回数がわかっているので~
~
・交差点でのモーターの動き~
・ライントレース
~
~
の動作をサブルーチンとする~
~
このときの定義文は以下のとおりである~
~
交差点でのモーターの動き
def cross(t,dl,dr):
mr.run_forever(duty_cycle_sp=dr)
ml.run_forever(duty_cycle_sp=dl)
time.sleep(t/1000)
ml.stop()
mr.stop()
~
ライントレース(このプログラムで白、黒の境界をジグザグに...
def line():
t0 = time.time()
while time.time() - t0 < 0.35:
if cs.value () > 50 :
mr.run_forever(duty_cycle_sp=-30)
ml.run_forever(duty_cycle_sp=60)
t0 = time.time()
else:
mr.run_forever(duty_cycle_sp=60)
ml.run_forever(duty_cycle_sp=-30)
~
ライントレースについてのみ上記のプログラムの若干の説明を...
~
上記のプログラムでは、~
t0 = time.time()
while time.time() - t0 < 0.35:
によってこのプログラムが更新されない限り、0.35秒で終了す...
~
if cs.value () > 50 :
mr.run_forever(duty_cycle_sp=-30)
ml.run_forever(duty_cycle_sp=60)
t0 = time.time()
~このif文を用いて、黒になったとき(cs.valueが50以上になっ...
~
else:
mr.run_forever(duty_cycle_sp=60)
ml.run_forever(duty_cycle_sp=-30)
このelse文を用いて、黒になっていないとき(cs.valueが49以...
~
すなわち、黒の状態が0.35秒以上続いた場合、左に曲がりなが...
~
この二つの関数の組み合わせで、代入する数値を微調整するこ...
~
*一個目のプログラム [#q01674c3]
チーム内でそれぞれのメンバーでコースを割り振り、自分はAコ...
ここで、一回目に課題をクリアすることのできたプログラムを...
#!/usr/bin/python
import ev3dev.ev3 as ev3
import time
ml = ev3.LargeMotor('outA')
mr = ev3.LargeMotor('outB')
cs = ev3.ColorSensor('in1')
def line():
t0 = time.time()
while time.time() - t0 < 0.35:
if cs.value () > 50 :
mr.run_forever(duty_cycle_sp=-30)
ml.run_forever(duty_cycle_sp=60)
t0 = time.time()
else:
mr.run_forever(duty_cycle_sp=60)
ml.run_forever(duty_cycle_sp=-30)
def cross(t,dl,dr):
mr.run_forever(duty_cycle_sp=dr)
ml.run_forever(duty_cycle_sp=dl)
time.sleep(t/1000)
ml.stop()
mr.stop()
mr.stop()
ml.stop()
line()
cross(1000,0,0)
cross(1000,17,-17)
cross(1000,13,13)
line()
cross(1000,0,0)
cross(1000,17,-17)
cross(1000,13,13)
line()
cross(1000,0,0)
cross(1000,17,-17)
cross(1000,13,13)
line()
cross(1000,0,0)
cross(1000,17,-17)
cross(1000,13,13)
line()
cross(1000,0,0)
cross(1000,17,-17)
cross(1000,-30,30)
line()
cross(1000,0,0)
cross(1000,17,-17)
cross(1000,13,13)
~
今回の自分のスコアとして、Aコース達成に1分10秒かかった~
~
プログラムの説明として、「line」によってライントレースを...
~
「cross」によって交差点で一秒間止まって、角度をまっすぐに...
~
このプログラムを用いれば、Aコースは指定された手順通りクリ...
~
しかし、このプログラムでは「cross」の文で一回一回何をして...
~
よって、サブルーチンを増やすことでよりプログラムを簡略化...
*サブルーチンの工夫によるプログラムの簡略化 [#d5711b90]
まず、1秒間止まるのにわざわざ「cross」を用いるのは区別が...
def wait():
mr.run_forever(duty_cycle_sp=0)
ml.run_forever(duty_cycle_sp=0)
time.sleep(1)
これによって、ライントレースが終了した後「wait()」を書き...
~
~
~
また、すべて左に曲がって止まるようなプログラムとなってい...
~
そこで、毎回の交差点で「turn」というサブルーチンを設け、...
~
以下が「turn」のプログラムである~
def turn():
mr.run_forever(duty_cycle_sp=17)
ml.run_forever(duty_cycle_sp=-17)
time.sleep(1)
~
これらのサブルーチンを用いて改良したプログラムを以下に掲...
ml = ev3.LargeMotor('outA')
mr = ev3.LargeMotor('outB')
cs = ev3.ColorSensor('in1')
def line():
t0 = time.time()
while time.time() - t0 < 0.35:
if cs.value () > 50 :
mr.run_forever(duty_cycle_sp=-30)
ml.run_forever(duty_cycle_sp=60)
t0 = time.time()
else:
mr.run_forever(duty_cycle_sp=60)
ml.run_forever(duty_cycle_sp=-30)
def cross(t,dl,dr):
mr.run_forever(duty_cycle_sp=dr)
ml.run_forever(duty_cycle_sp=dl)
time.sleep(t/1000)
ml.stop()
mr.stop()
def wait():
mr.run_forever(duty_cycle_sp=0)
ml.run_forever(duty_cycle_sp=0)
time.sleep(1)
def turn():
mr.run_forever(duty_cycle_sp=17)
ml.run_forever(duty_cycle_sp=-17)
time.sleep(1)
mr.stop()
ml.stop()
line()
wait()
turn()
cross(1000,13,13)
line()
wait()
turn()
cross(1000,13,13)
line()
wait()
turn()
cross(1000,13,13)
line()
wait()
turn()
cross(1000,13,13)
line()
wait()
turn()
cross(1000,-30,30)
line()
wait()
turn()
cross(1000,13,13)
以上のサブルーチンを用いてプログラムを作成したが、おそら...
~
原因としては、プログラムの順序と必要な記号、文についての...
*交差点で音声を出す [#h918806f]
EV3は英語を話すことができる~
~
よってそれを利用して交差点で右折なら「right」左折なら「le...
~
EV3に話させるための関数は
oto = ev3.Sound()
で定義して
oto.speak('').wait()
と入力したのち、「’’」の中に好きな単語を入力する~
~
これを用いて先ほどのプログラムを実行させて成功した~
~
すべてを掲載すると長くなるので割愛する~
~
なお、ベースのプログラムはサブルーチンを改良する前のプロ...
~
*Mission2のまとめ [#k0cbbaf5]
今回は、ITピアサポートに聞きに行ったおかげもあって、課題...
しかし、課題の内容としてプログラムが少しわかりにくかった...
今後への反省として、プログラムをわかりやすくするために文...
一つのサブルーチンで3個ぐらいの動作をまとめてやってくれ...
終了行:
#contents
*ロボットの全体像 [#eacb7d78]
前回の人の顔を描くロボットをベースにして、ライントレース...
~
前回の顔を描くロボットの図(センサー系の取り外しがやりや...
#ref(./ロボットの全体像.JPG)
~
↓~
~
今回のロボットの図~
#ref(./1.jpg,サイズ,画像の説明)
~
タッチセンサを用いたロボットも課題になっているので、前回...
~
また、できるだけライントレースの白黒の見分けが正確になる...
~
ライトセンサーを接写した図~
#ref(./2.jpg)
~
ライトセンサーと紙面の距離は約1cmである。あまり近すぎ...
~
*今回達成するべき課題 [#cba4a907]
#ref(./課題.png)
A地点からB地点へ (一人目)
A地点 → P直進 → Q直進 → Q直進 → R左折 → B地点
3人で構成された班であったので、それぞれのメンバーで達成...
~
自分はAコースを担当することになったので、Aコースについて...
~
*ロボットを動かす基本の考え方 [#d777e0bf]
ロボットにライントレースをさせるにあたって必要となる動作...
~
今回必要となる主な動作は~
~
・白を感知したら左にハンドルを切る
・黒を感知したら右にハンドルを切る
~
これらの動作の組み合わせで、白と黒の境界線をじぐざぐに進...
~
また、その他細かいプログラムをすることで、課題を完成させ...
~
*プログラム本体[#j96e677b]
今回は、交差点の回数がわかっているので~
~
・交差点でのモーターの動き~
・ライントレース
~
~
の動作をサブルーチンとする~
~
このときの定義文は以下のとおりである~
~
交差点でのモーターの動き
def cross(t,dl,dr):
mr.run_forever(duty_cycle_sp=dr)
ml.run_forever(duty_cycle_sp=dl)
time.sleep(t/1000)
ml.stop()
mr.stop()
~
ライントレース(このプログラムで白、黒の境界をジグザグに...
def line():
t0 = time.time()
while time.time() - t0 < 0.35:
if cs.value () > 50 :
mr.run_forever(duty_cycle_sp=-30)
ml.run_forever(duty_cycle_sp=60)
t0 = time.time()
else:
mr.run_forever(duty_cycle_sp=60)
ml.run_forever(duty_cycle_sp=-30)
~
ライントレースについてのみ上記のプログラムの若干の説明を...
~
上記のプログラムでは、~
t0 = time.time()
while time.time() - t0 < 0.35:
によってこのプログラムが更新されない限り、0.35秒で終了す...
~
if cs.value () > 50 :
mr.run_forever(duty_cycle_sp=-30)
ml.run_forever(duty_cycle_sp=60)
t0 = time.time()
~このif文を用いて、黒になったとき(cs.valueが50以上になっ...
~
else:
mr.run_forever(duty_cycle_sp=60)
ml.run_forever(duty_cycle_sp=-30)
このelse文を用いて、黒になっていないとき(cs.valueが49以...
~
すなわち、黒の状態が0.35秒以上続いた場合、左に曲がりなが...
~
この二つの関数の組み合わせで、代入する数値を微調整するこ...
~
*一個目のプログラム [#q01674c3]
チーム内でそれぞれのメンバーでコースを割り振り、自分はAコ...
ここで、一回目に課題をクリアすることのできたプログラムを...
#!/usr/bin/python
import ev3dev.ev3 as ev3
import time
ml = ev3.LargeMotor('outA')
mr = ev3.LargeMotor('outB')
cs = ev3.ColorSensor('in1')
def line():
t0 = time.time()
while time.time() - t0 < 0.35:
if cs.value () > 50 :
mr.run_forever(duty_cycle_sp=-30)
ml.run_forever(duty_cycle_sp=60)
t0 = time.time()
else:
mr.run_forever(duty_cycle_sp=60)
ml.run_forever(duty_cycle_sp=-30)
def cross(t,dl,dr):
mr.run_forever(duty_cycle_sp=dr)
ml.run_forever(duty_cycle_sp=dl)
time.sleep(t/1000)
ml.stop()
mr.stop()
mr.stop()
ml.stop()
line()
cross(1000,0,0)
cross(1000,17,-17)
cross(1000,13,13)
line()
cross(1000,0,0)
cross(1000,17,-17)
cross(1000,13,13)
line()
cross(1000,0,0)
cross(1000,17,-17)
cross(1000,13,13)
line()
cross(1000,0,0)
cross(1000,17,-17)
cross(1000,13,13)
line()
cross(1000,0,0)
cross(1000,17,-17)
cross(1000,-30,30)
line()
cross(1000,0,0)
cross(1000,17,-17)
cross(1000,13,13)
~
今回の自分のスコアとして、Aコース達成に1分10秒かかった~
~
プログラムの説明として、「line」によってライントレースを...
~
「cross」によって交差点で一秒間止まって、角度をまっすぐに...
~
このプログラムを用いれば、Aコースは指定された手順通りクリ...
~
しかし、このプログラムでは「cross」の文で一回一回何をして...
~
よって、サブルーチンを増やすことでよりプログラムを簡略化...
*サブルーチンの工夫によるプログラムの簡略化 [#d5711b90]
まず、1秒間止まるのにわざわざ「cross」を用いるのは区別が...
def wait():
mr.run_forever(duty_cycle_sp=0)
ml.run_forever(duty_cycle_sp=0)
time.sleep(1)
これによって、ライントレースが終了した後「wait()」を書き...
~
~
~
また、すべて左に曲がって止まるようなプログラムとなってい...
~
そこで、毎回の交差点で「turn」というサブルーチンを設け、...
~
以下が「turn」のプログラムである~
def turn():
mr.run_forever(duty_cycle_sp=17)
ml.run_forever(duty_cycle_sp=-17)
time.sleep(1)
~
これらのサブルーチンを用いて改良したプログラムを以下に掲...
ml = ev3.LargeMotor('outA')
mr = ev3.LargeMotor('outB')
cs = ev3.ColorSensor('in1')
def line():
t0 = time.time()
while time.time() - t0 < 0.35:
if cs.value () > 50 :
mr.run_forever(duty_cycle_sp=-30)
ml.run_forever(duty_cycle_sp=60)
t0 = time.time()
else:
mr.run_forever(duty_cycle_sp=60)
ml.run_forever(duty_cycle_sp=-30)
def cross(t,dl,dr):
mr.run_forever(duty_cycle_sp=dr)
ml.run_forever(duty_cycle_sp=dl)
time.sleep(t/1000)
ml.stop()
mr.stop()
def wait():
mr.run_forever(duty_cycle_sp=0)
ml.run_forever(duty_cycle_sp=0)
time.sleep(1)
def turn():
mr.run_forever(duty_cycle_sp=17)
ml.run_forever(duty_cycle_sp=-17)
time.sleep(1)
mr.stop()
ml.stop()
line()
wait()
turn()
cross(1000,13,13)
line()
wait()
turn()
cross(1000,13,13)
line()
wait()
turn()
cross(1000,13,13)
line()
wait()
turn()
cross(1000,13,13)
line()
wait()
turn()
cross(1000,-30,30)
line()
wait()
turn()
cross(1000,13,13)
以上のサブルーチンを用いてプログラムを作成したが、おそら...
~
原因としては、プログラムの順序と必要な記号、文についての...
*交差点で音声を出す [#h918806f]
EV3は英語を話すことができる~
~
よってそれを利用して交差点で右折なら「right」左折なら「le...
~
EV3に話させるための関数は
oto = ev3.Sound()
で定義して
oto.speak('').wait()
と入力したのち、「’’」の中に好きな単語を入力する~
~
これを用いて先ほどのプログラムを実行させて成功した~
~
すべてを掲載すると長くなるので割愛する~
~
なお、ベースのプログラムはサブルーチンを改良する前のプロ...
~
*Mission2のまとめ [#k0cbbaf5]
今回は、ITピアサポートに聞きに行ったおかげもあって、課題...
しかし、課題の内容としてプログラムが少しわかりにくかった...
今後への反省として、プログラムをわかりやすくするために文...
一つのサブルーチンで3個ぐらいの動作をまとめてやってくれ...
ページ名: