2019b/Member/traffic/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2019b/Member]]
*課題2 [#sfb8799b]
#contents
**概要 [#f6ab6b45]
#ref(2019b/Mission2/2019b-mission2.png,70%,概要)
A地点を出発し、黒い線にそって動くロボットを作成する。また...
今回は2人目のコースを走った。
A地点から出発
J
H (直進)
I (ボール or キューボイドをつかんでUターン)
H (右折)
G (一時停止の後、直進)
D (右折)
E, F 通過
G (一時停止の後、直進)
C (一時停止の後、左折)
B (一時停止)
A地点に入る(ゴール)
**ロボットの説明 [#ae57c3e2]
#ref(2019b/Member/traffic/Mission2/20191220_182450.jpg,60...
キューボイドを掴むアームは課題1のペンを上げ下げする機構の...
~アームの下にカラーセンサとキューボイドを認識する超音波セ...
#ref(2019b/Member/traffic/Mission2/20191220_182455.jpg,60...
カラーセンサはタイヤから少し離れた位置になった。
**プログラムの説明 [#c13c0e56]
#ref(2019b/Member/traffic/Mission2/setumei.png,50%,説明)
ライントレースの方法は、ラインの右側を走りセンサの値が一...
#ref(2019b/Member/traffic/Mission2/kousaten.png,50%,交差点)
交差点では、カラーセンサが黒だと判断して右に曲がったとき...
***前進 [#vaf86143]
from ev3dev2.motor import MoveTank, OUTPUT_B, OUTPUT_C,
from ev3dev2.sensor.lego import ColorSensor
motor = MoveTank(OUTPUT_B,OUTPUT_C)
cs = ColorSensor()
cs.mode = 'COL-REFLECT'
def forward(v_max,v_min,left,right):
while (cs.value() <= v_max and cs.value() >= v_min):
motor.on(left,right)
カラーセンサの値がv_min(黒)以上v_max(白)以下の間は左右の...
***右左折 [#j81929dc]
(略)
def turn():
if cs.value() > 78:
motor.on_for_degrees(-12,6,13)
if cs.value() < 14:
motor.on_for_degrees(6,-12,13)
カラーセンサの値が大きくなったら(78以上)左折し小さくなっ...
***交差点 [#vdbb7248]
(略)
from time import sleep
def crossroad():
if cs.value() < 12:
motor.on_for_degrees(6,-12,13)
if cs.value() < 10:
motor.on_for_degrees(-12,6,18)
sleep(1)
motor.on_for_degrees(10,10,35)
global counter
counter += 1
上で説明したように、カラーセンサの値が12以下で右に曲がっ...
***曲がり角 [#w1b880be]
(略)
def right_90_turn():
if cs.value() < 12:
motor.on_for_degrees(6,-12,13)
if cs.value() < 10:
sleep(1)
motor.on_for_degrees(12,9,35)
global counter
counter += 1
交差点の関数だけではH,G地点には対応できないので、右に90度...
交差点の関数で交差点だと認識した後戻っていたところをなく...
***キューボイド [#uf59b23c]
(一部略)
from ev3dev2.motor import MoveTank, Motor, OUTPUT_B, OUT...
motor = MoveTank(OUTPUT_B,OUTPUT_C)
arm_motor = Motor(OUTPUT_D)
def fetch_cuboid():
arm_motor.on_for_degrees(-30,50)
sleep(0.5)
motor.on_for_degrees(20,20,150)
motor.on_for_degrees(30,-30,(240/360)*685)
motor.on_for_degrees(-10,-10,100)
motor.on_for_degrees(-20,20,(120/360)*685)
キューボイドを掴んでUターンする関数。~
小モーター(アーム)を下げた後、0.5秒止まり、一度直進した後...
Uターンするときにラインの右側に復帰する必要があるため、煩...
***全体のプログラム [#if9d7494]
from ev3dev2.motor import MoveTank, Motor, OUTPUT_B, OUT...
from ev3dev2.sensor.lego import ColorSensor, UltrasonicS...
from time import sleep
motor = MoveTank(OUTPUT_B,OUTPUT_C)
arm_motor = Motor(OUTPUT_D)
cs = ColorSensor()
us = UltrasonicSensor()
cs.mode = 'COL-REFLECT'
#上記の関数の定義
def forward(v_max,v_min,left,right):
while (cs.value() <= v_max and cs.value() >= v_min):
motor.on(left,right)
def turn():
if cs.value() > 78:
motor.on_for_degrees(-12,6,13)
if cs.value() < 14:
motor.on_for_degrees(6,-12,13)
def crossroad():
if cs.value() < 12:
motor.on_for_degrees(6,-12,13)
if cs.value() < 10:
motor.on_for_degrees(-12,6,18)
sleep(1)
motor.on_for_degrees(10,10,35)
global counter
counter += 1
def right_90_turn():
if cs.value() < 12:
motor.on_for_degrees(6,-12,13)
if cs.value() < 10:
sleep(1)
motor.on_for_degrees(12,9,35)
global counter
counter += 1
def fetch_cuboid():
arm_motor.on_for_degrees(-30,50)
sleep(0.5)
motor.on_for_degrees(20,20,150)
motor.on_for_degrees(30,-30,(240/360)*685)
motor.on_for_degrees(-10,-10,100)
motor.on_for_degrees(-20,20,(120/360)*685)
#ここから動作させるためのプログラム
#超音波センサでキューボイドを見つけるまでの間、forward関...
while (us.distance_centimeters > 10):
forward(78,14,12,12)
turn()
#見つけたらwhile文を抜け、キューボイドを掴む
fetch_cuboid()
#二人目のルートではここまで交差点(曲がり角)が存在しない...
#最初の二回の交差点(曲がり角)のHとGは右に曲がるものなの...
counter = 0
while (counter < 2):
forward(78,12,15,15)
right_90_turn()
turn()
#CとB地点を判断する
counter = 0
while (counter < 2):
forward(78,12,15,15)
crossroad()
turn()
motor.off
2人目のコースではキューボイドを掴むまで曲がり角や交差点が...
**結果と反省 [#se91123d]
結果としては、精度があまりよくなく、何度もコース外に出て...
最初は黒になっている時間で交差点を判断するプログラムを組...
終了行:
[[2019b/Member]]
*課題2 [#sfb8799b]
#contents
**概要 [#f6ab6b45]
#ref(2019b/Mission2/2019b-mission2.png,70%,概要)
A地点を出発し、黒い線にそって動くロボットを作成する。また...
今回は2人目のコースを走った。
A地点から出発
J
H (直進)
I (ボール or キューボイドをつかんでUターン)
H (右折)
G (一時停止の後、直進)
D (右折)
E, F 通過
G (一時停止の後、直進)
C (一時停止の後、左折)
B (一時停止)
A地点に入る(ゴール)
**ロボットの説明 [#ae57c3e2]
#ref(2019b/Member/traffic/Mission2/20191220_182450.jpg,60...
キューボイドを掴むアームは課題1のペンを上げ下げする機構の...
~アームの下にカラーセンサとキューボイドを認識する超音波セ...
#ref(2019b/Member/traffic/Mission2/20191220_182455.jpg,60...
カラーセンサはタイヤから少し離れた位置になった。
**プログラムの説明 [#c13c0e56]
#ref(2019b/Member/traffic/Mission2/setumei.png,50%,説明)
ライントレースの方法は、ラインの右側を走りセンサの値が一...
#ref(2019b/Member/traffic/Mission2/kousaten.png,50%,交差点)
交差点では、カラーセンサが黒だと判断して右に曲がったとき...
***前進 [#vaf86143]
from ev3dev2.motor import MoveTank, OUTPUT_B, OUTPUT_C,
from ev3dev2.sensor.lego import ColorSensor
motor = MoveTank(OUTPUT_B,OUTPUT_C)
cs = ColorSensor()
cs.mode = 'COL-REFLECT'
def forward(v_max,v_min,left,right):
while (cs.value() <= v_max and cs.value() >= v_min):
motor.on(left,right)
カラーセンサの値がv_min(黒)以上v_max(白)以下の間は左右の...
***右左折 [#j81929dc]
(略)
def turn():
if cs.value() > 78:
motor.on_for_degrees(-12,6,13)
if cs.value() < 14:
motor.on_for_degrees(6,-12,13)
カラーセンサの値が大きくなったら(78以上)左折し小さくなっ...
***交差点 [#vdbb7248]
(略)
from time import sleep
def crossroad():
if cs.value() < 12:
motor.on_for_degrees(6,-12,13)
if cs.value() < 10:
motor.on_for_degrees(-12,6,18)
sleep(1)
motor.on_for_degrees(10,10,35)
global counter
counter += 1
上で説明したように、カラーセンサの値が12以下で右に曲がっ...
***曲がり角 [#w1b880be]
(略)
def right_90_turn():
if cs.value() < 12:
motor.on_for_degrees(6,-12,13)
if cs.value() < 10:
sleep(1)
motor.on_for_degrees(12,9,35)
global counter
counter += 1
交差点の関数だけではH,G地点には対応できないので、右に90度...
交差点の関数で交差点だと認識した後戻っていたところをなく...
***キューボイド [#uf59b23c]
(一部略)
from ev3dev2.motor import MoveTank, Motor, OUTPUT_B, OUT...
motor = MoveTank(OUTPUT_B,OUTPUT_C)
arm_motor = Motor(OUTPUT_D)
def fetch_cuboid():
arm_motor.on_for_degrees(-30,50)
sleep(0.5)
motor.on_for_degrees(20,20,150)
motor.on_for_degrees(30,-30,(240/360)*685)
motor.on_for_degrees(-10,-10,100)
motor.on_for_degrees(-20,20,(120/360)*685)
キューボイドを掴んでUターンする関数。~
小モーター(アーム)を下げた後、0.5秒止まり、一度直進した後...
Uターンするときにラインの右側に復帰する必要があるため、煩...
***全体のプログラム [#if9d7494]
from ev3dev2.motor import MoveTank, Motor, OUTPUT_B, OUT...
from ev3dev2.sensor.lego import ColorSensor, UltrasonicS...
from time import sleep
motor = MoveTank(OUTPUT_B,OUTPUT_C)
arm_motor = Motor(OUTPUT_D)
cs = ColorSensor()
us = UltrasonicSensor()
cs.mode = 'COL-REFLECT'
#上記の関数の定義
def forward(v_max,v_min,left,right):
while (cs.value() <= v_max and cs.value() >= v_min):
motor.on(left,right)
def turn():
if cs.value() > 78:
motor.on_for_degrees(-12,6,13)
if cs.value() < 14:
motor.on_for_degrees(6,-12,13)
def crossroad():
if cs.value() < 12:
motor.on_for_degrees(6,-12,13)
if cs.value() < 10:
motor.on_for_degrees(-12,6,18)
sleep(1)
motor.on_for_degrees(10,10,35)
global counter
counter += 1
def right_90_turn():
if cs.value() < 12:
motor.on_for_degrees(6,-12,13)
if cs.value() < 10:
sleep(1)
motor.on_for_degrees(12,9,35)
global counter
counter += 1
def fetch_cuboid():
arm_motor.on_for_degrees(-30,50)
sleep(0.5)
motor.on_for_degrees(20,20,150)
motor.on_for_degrees(30,-30,(240/360)*685)
motor.on_for_degrees(-10,-10,100)
motor.on_for_degrees(-20,20,(120/360)*685)
#ここから動作させるためのプログラム
#超音波センサでキューボイドを見つけるまでの間、forward関...
while (us.distance_centimeters > 10):
forward(78,14,12,12)
turn()
#見つけたらwhile文を抜け、キューボイドを掴む
fetch_cuboid()
#二人目のルートではここまで交差点(曲がり角)が存在しない...
#最初の二回の交差点(曲がり角)のHとGは右に曲がるものなの...
counter = 0
while (counter < 2):
forward(78,12,15,15)
right_90_turn()
turn()
#CとB地点を判断する
counter = 0
while (counter < 2):
forward(78,12,15,15)
crossroad()
turn()
motor.off
2人目のコースではキューボイドを掴むまで曲がり角や交差点が...
**結果と反省 [#se91123d]
結果としては、精度があまりよくなく、何度もコース外に出て...
最初は黒になっている時間で交差点を判断するプログラムを組...
ページ名: