2019a/Member/takumi/Mission3
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2019a/Member]]
#contents
*課題3 [#a54866d5]
課題3は「ピンポン玉または青と赤のボールを運搬して、所定の...
&ref(Map.png);
*戦略 [#y4817a1e]
**どのボールを取るか [#t338529f]
課題3はテストの時期と重なるため十分な時間をかけての試行錯...
-プラ容器内のピンポン玉
--1個運べば8点
--2つとも運べば20点
-L地点とL'地点(いずれもプラ容器外)のピンポン玉
--1個運べば4点
--2つとも運べば12点
と加点されるポイントはプラ箱内のピンポン玉を運んだほうが...
**ボールの取り方 [#qdfe99ca]
プラ容器の中のピンポン玉は以下の方法で取ることにした。
+プラ容器を下の図のように傾ける。~
&ref(TiltTheBox.png);
+下の図のように傾けたプラ容器から転がってきたピンポン玉を...
&ref(CatchTheBall.png);
*作成したロボット [#aa84c996]
&ref(Robot.png);~
今回は上のようなロボットを作った。工夫した点は以下の4つで...
**プラ箱を傾ける部分 [#d047d11e]
&ref(Arm.png);~
図のようにプラ箱を傾けるためにはかなり長い腕が必要だった。~
&ref(TipOfTheArm.png);~
また腕の先端の棒はプラ箱を傾けたときにプラ箱を安定させる...
**ピンポン玉を回収する部分 [#j5fb030d]
&ref(Hand.png);~
ピンポン玉を回収する部分は上のようになっている。プラ容器...
**センサー部分 [#e5e797cc]
今回はライントレースにカラーセンサーを2つ使いライントレー...
&ref(ColorSensors.png);
**重心 [#c75a0d3f]
&ref(Tires.png);~
今回のロボットではモーターを多く使ったため重心が前に傾い...
*プログラムの準備 [#c02c839e]
**モジュールのインポート [#lf266af4]
#!/usr/bin/env python3
from ev3dev.ev3 import *
from time import sleep
**インスタンスの作成 [#c5d85089]
mR = LargeMotor('outC')
mL = LargeMotor('outA')
csR = ColorSensor('in1')
csL = ColorSensor('in2')
arm = LargeMotor('outD')
hand = MediumMotor('outB')
それぞれ以下のモーターやセンサーのインスタンスである。
&ref(Instances.png);
**関数の定義 [#ed41d6e9]
今回は以下の関数を定義した。
-ロボットを右/左に回転させる関数
-ロボットを前進/後退させる関数
-ライントレースをする関数
***ロボットを右に回転させる関数 [#tc9c52bc]
&ref(Right.png);~
ロボットを右に回転させる関数は回転の中心の違う2つの関数を...
def right(time_sp):
sleep(1)
mR.run_timed(time_sp=time_sp, speed_sp=100, stop_act...
def clockwise(time_sp):
mR.run_timed(time_sp=time_sp, speed_sp=-100, stop_ac...
mL.run_timed(time_sp=time_sp, speed_sp=100, stop_act...
***ロボットを左に回転させる関数 [#x2874212]
&ref(Left.png);~
ロボットを左に回転させる関数は回転の中心の違う2つの関数を...
def left(time_sp):
sleep(1)
mL.run_timed(time_sp=time_sp, speed_sp=100, stop_act...
def counter_clockwise(time_sp):
mR.run_timed(time_sp=time_sp, speed_sp=100, stop_act...
mL.run_timed(time_sp=time_sp, speed_sp=-100, stop_ac...
***ロボットを前進させる関数 [#h63327b5]
ロボットを前進させる関数は
-時間を指定して前進させるforward関数
-停止の命令をしない限り動き続けるforward_forever関数
の二種類を定義した。
def forward(time_sp):
mR.run_timed(time_sp=time_sp, speed_sp=100, stop_act...
mL.run_timed(time_sp=time_sp, speed_sp=100, stop_act...
sleep(1)
def forward_forever(speed_sp):
mR.run_forever(speed_sp=100, stop_action="brake")
mL.run_forever(speed_sp=100, stop_action="brake")
***ロボットを後退させる関数 [#q0385c76]
前進のときとは違い、ロボットを後退させる関数は1種類のみを...
def backward(time_sp):
mR.run_timed(time_sp=time_sp, speed_sp=-100, stop_ac...
mL.run_timed(time_sp=time_sp, speed_sp=-100, stop_ac...
***ライントレースをする関数 [#n43c9cfd]
&ref(LineTrace_1.png);~
&ref(LineTrace_2.png);~
ライントレースをするための関数。しかしこの関数はライント...
&ref(LineTrace_3.png);
def line_trace():
black_line_reflection = 15
if csR.value() >= black_line_reflection and csL.valu...
forward_forever(100)
sleep(0.1)
elif csR.value() >= black_line_reflection and csL.va...
counter_clockwise(100)
sleep(0.1)
elif csR.value() < black_line_reflection and csL.val...
clockwise(100)
sleep(0.1)
else:
mR.stop()
mL.stop()
sleep(0.1)
break
*プログラム [#ceaff269]
**ブロック分け [#b0ade627]
次のようにプログラムを5つのブロックに分けて作った。~
&ref(Blocks.png);
**ロボットを動かす [#i4ef33ba]
最初ロボットは赤い□の位置にMのほうを頭にしておいた。
***? プラ容器と縦軸を合わせる [#lb9cc2c4]
&ref(FirstStep.png);
# 前進してプラ容器と縦軸を合わせる。
line_trace()
sleep(0.1)
forward_forever()
sleep(4)
mL.stop()
mR.stop()
# ロボットを回転させてプラ容器のほうを向かせる。
counter_clockwise(1900)
sleep(2.1)
***? プラ容器まで接近する [#f2614a97]
&ref(SecondStep.png);
# line_trace関数でロボットとプラ容器の間にある黒線までロ...
line_trace()
sleep(0.1)
# プラ容器を傾けやすいよう距離を詰めるために少し前にずら...
forward_forever(100)
sleep(0.3)
mL.stop()
mR.stop()
***? プラ容器からピンポン玉を取る [#z278381a]
# プラ容器から確実にピンポン玉を出すためにプラ容器を2回...
# プラ容器傾け1回目
# アームをさげる
arm.reset()
sleep(0.1)
arm.run_to_rel_pos(position_sp=160, speed_sp=250, stop_a...
sleep(3)
# プラ容器傾け2回目
# アームを上げる
arm.reset()
arm.run_to_rel_pos(position_sp=-160, speed_sp=250, stop_...
hand.reset()
sleep(2)
# アームを下げる
arm.reset()
arm.run_to_rel_pos(position_sp=160, speed_sp=250, stop_a...
sleep(2)
# ボールを回収する
hand.run_to_rel_pos(position_sp=80, speed_sp=300, stop_a...
sleep(1)
# アームを上げる
arm.reset()
arm.run_to_rel_pos(position_sp=-160, speed_sp=100, stop_...
sleep(3)
***? ゴールまで移動する [#y4940b63]
&ref(ForthStep.png);
counter_clockwise(2000)
sleep(3)
# 直線B'C'まで動かしたいが途中ある直線BCのせいでline_tra...
# なので直線BCを超えた後にline_trace関数を使う。
# 直線BCを超えさせる
forward_forever(100)
sleep(3)
mR.stop()
mL.stop()
sleep(1)
# 直線B'C'までロボットを動かす。
line_trace()
sleep(1)
# プラ容器を傾けやすいよう距離をとるために少し後ろにずら...
backward(800)
sleep(1)
backward(800)
sleep(1)
***? ボールをシュートする [#oa0bb0f3]
# アームを下げてプラ容器を傾ける
arm.reset()
arm.run_to_rel_pos(position_sp=160, speed_sp=120, stop_a...
sleep(2)
# ハンドを回転させてピンポン玉をシュートする。
# ピンポン玉確実にシュートするためにハンドは何回もまわす。
# ハンドを何回もまわすためにposition_spには大きい数字を...
hand.reset()
hand.run_to_rel_pos(position_sp=-2000, speed_sp=1000, st...
sleep(5)
# アームを上げる
arm.reset()
arm.run_to_rel_pos(position_sp=-160, speed_sp=120, stop_...
*結果 [#m086aca8]
2回チャンスが与えられたが、2回ともボールをとることが出来...
*反省と感想 [#k0da089b]
今回失敗した理由としてあげられるのは、テスト前で時間がな...
~
また十分な時間がかけられず、プログラムがかなり荒くなって...
forward(4000)
と書くところを
forward_forever(100)
sleep(4)
mL.stop()
mR.stop()
と書くなど、プログラムが最適化されていないことも精度を低...
~
~
~
昨日の訪問者数: &counter(yesterday);人~
今日の訪問者数: &counter(today);人~
合計訪問者数: &counter(all);人
終了行:
[[2019a/Member]]
#contents
*課題3 [#a54866d5]
課題3は「ピンポン玉または青と赤のボールを運搬して、所定の...
&ref(Map.png);
*戦略 [#y4817a1e]
**どのボールを取るか [#t338529f]
課題3はテストの時期と重なるため十分な時間をかけての試行錯...
-プラ容器内のピンポン玉
--1個運べば8点
--2つとも運べば20点
-L地点とL'地点(いずれもプラ容器外)のピンポン玉
--1個運べば4点
--2つとも運べば12点
と加点されるポイントはプラ箱内のピンポン玉を運んだほうが...
**ボールの取り方 [#qdfe99ca]
プラ容器の中のピンポン玉は以下の方法で取ることにした。
+プラ容器を下の図のように傾ける。~
&ref(TiltTheBox.png);
+下の図のように傾けたプラ容器から転がってきたピンポン玉を...
&ref(CatchTheBall.png);
*作成したロボット [#aa84c996]
&ref(Robot.png);~
今回は上のようなロボットを作った。工夫した点は以下の4つで...
**プラ箱を傾ける部分 [#d047d11e]
&ref(Arm.png);~
図のようにプラ箱を傾けるためにはかなり長い腕が必要だった。~
&ref(TipOfTheArm.png);~
また腕の先端の棒はプラ箱を傾けたときにプラ箱を安定させる...
**ピンポン玉を回収する部分 [#j5fb030d]
&ref(Hand.png);~
ピンポン玉を回収する部分は上のようになっている。プラ容器...
**センサー部分 [#e5e797cc]
今回はライントレースにカラーセンサーを2つ使いライントレー...
&ref(ColorSensors.png);
**重心 [#c75a0d3f]
&ref(Tires.png);~
今回のロボットではモーターを多く使ったため重心が前に傾い...
*プログラムの準備 [#c02c839e]
**モジュールのインポート [#lf266af4]
#!/usr/bin/env python3
from ev3dev.ev3 import *
from time import sleep
**インスタンスの作成 [#c5d85089]
mR = LargeMotor('outC')
mL = LargeMotor('outA')
csR = ColorSensor('in1')
csL = ColorSensor('in2')
arm = LargeMotor('outD')
hand = MediumMotor('outB')
それぞれ以下のモーターやセンサーのインスタンスである。
&ref(Instances.png);
**関数の定義 [#ed41d6e9]
今回は以下の関数を定義した。
-ロボットを右/左に回転させる関数
-ロボットを前進/後退させる関数
-ライントレースをする関数
***ロボットを右に回転させる関数 [#tc9c52bc]
&ref(Right.png);~
ロボットを右に回転させる関数は回転の中心の違う2つの関数を...
def right(time_sp):
sleep(1)
mR.run_timed(time_sp=time_sp, speed_sp=100, stop_act...
def clockwise(time_sp):
mR.run_timed(time_sp=time_sp, speed_sp=-100, stop_ac...
mL.run_timed(time_sp=time_sp, speed_sp=100, stop_act...
***ロボットを左に回転させる関数 [#x2874212]
&ref(Left.png);~
ロボットを左に回転させる関数は回転の中心の違う2つの関数を...
def left(time_sp):
sleep(1)
mL.run_timed(time_sp=time_sp, speed_sp=100, stop_act...
def counter_clockwise(time_sp):
mR.run_timed(time_sp=time_sp, speed_sp=100, stop_act...
mL.run_timed(time_sp=time_sp, speed_sp=-100, stop_ac...
***ロボットを前進させる関数 [#h63327b5]
ロボットを前進させる関数は
-時間を指定して前進させるforward関数
-停止の命令をしない限り動き続けるforward_forever関数
の二種類を定義した。
def forward(time_sp):
mR.run_timed(time_sp=time_sp, speed_sp=100, stop_act...
mL.run_timed(time_sp=time_sp, speed_sp=100, stop_act...
sleep(1)
def forward_forever(speed_sp):
mR.run_forever(speed_sp=100, stop_action="brake")
mL.run_forever(speed_sp=100, stop_action="brake")
***ロボットを後退させる関数 [#q0385c76]
前進のときとは違い、ロボットを後退させる関数は1種類のみを...
def backward(time_sp):
mR.run_timed(time_sp=time_sp, speed_sp=-100, stop_ac...
mL.run_timed(time_sp=time_sp, speed_sp=-100, stop_ac...
***ライントレースをする関数 [#n43c9cfd]
&ref(LineTrace_1.png);~
&ref(LineTrace_2.png);~
ライントレースをするための関数。しかしこの関数はライント...
&ref(LineTrace_3.png);
def line_trace():
black_line_reflection = 15
if csR.value() >= black_line_reflection and csL.valu...
forward_forever(100)
sleep(0.1)
elif csR.value() >= black_line_reflection and csL.va...
counter_clockwise(100)
sleep(0.1)
elif csR.value() < black_line_reflection and csL.val...
clockwise(100)
sleep(0.1)
else:
mR.stop()
mL.stop()
sleep(0.1)
break
*プログラム [#ceaff269]
**ブロック分け [#b0ade627]
次のようにプログラムを5つのブロックに分けて作った。~
&ref(Blocks.png);
**ロボットを動かす [#i4ef33ba]
最初ロボットは赤い□の位置にMのほうを頭にしておいた。
***? プラ容器と縦軸を合わせる [#lb9cc2c4]
&ref(FirstStep.png);
# 前進してプラ容器と縦軸を合わせる。
line_trace()
sleep(0.1)
forward_forever()
sleep(4)
mL.stop()
mR.stop()
# ロボットを回転させてプラ容器のほうを向かせる。
counter_clockwise(1900)
sleep(2.1)
***? プラ容器まで接近する [#f2614a97]
&ref(SecondStep.png);
# line_trace関数でロボットとプラ容器の間にある黒線までロ...
line_trace()
sleep(0.1)
# プラ容器を傾けやすいよう距離を詰めるために少し前にずら...
forward_forever(100)
sleep(0.3)
mL.stop()
mR.stop()
***? プラ容器からピンポン玉を取る [#z278381a]
# プラ容器から確実にピンポン玉を出すためにプラ容器を2回...
# プラ容器傾け1回目
# アームをさげる
arm.reset()
sleep(0.1)
arm.run_to_rel_pos(position_sp=160, speed_sp=250, stop_a...
sleep(3)
# プラ容器傾け2回目
# アームを上げる
arm.reset()
arm.run_to_rel_pos(position_sp=-160, speed_sp=250, stop_...
hand.reset()
sleep(2)
# アームを下げる
arm.reset()
arm.run_to_rel_pos(position_sp=160, speed_sp=250, stop_a...
sleep(2)
# ボールを回収する
hand.run_to_rel_pos(position_sp=80, speed_sp=300, stop_a...
sleep(1)
# アームを上げる
arm.reset()
arm.run_to_rel_pos(position_sp=-160, speed_sp=100, stop_...
sleep(3)
***? ゴールまで移動する [#y4940b63]
&ref(ForthStep.png);
counter_clockwise(2000)
sleep(3)
# 直線B'C'まで動かしたいが途中ある直線BCのせいでline_tra...
# なので直線BCを超えた後にline_trace関数を使う。
# 直線BCを超えさせる
forward_forever(100)
sleep(3)
mR.stop()
mL.stop()
sleep(1)
# 直線B'C'までロボットを動かす。
line_trace()
sleep(1)
# プラ容器を傾けやすいよう距離をとるために少し後ろにずら...
backward(800)
sleep(1)
backward(800)
sleep(1)
***? ボールをシュートする [#oa0bb0f3]
# アームを下げてプラ容器を傾ける
arm.reset()
arm.run_to_rel_pos(position_sp=160, speed_sp=120, stop_a...
sleep(2)
# ハンドを回転させてピンポン玉をシュートする。
# ピンポン玉確実にシュートするためにハンドは何回もまわす。
# ハンドを何回もまわすためにposition_spには大きい数字を...
hand.reset()
hand.run_to_rel_pos(position_sp=-2000, speed_sp=1000, st...
sleep(5)
# アームを上げる
arm.reset()
arm.run_to_rel_pos(position_sp=-160, speed_sp=120, stop_...
*結果 [#m086aca8]
2回チャンスが与えられたが、2回ともボールをとることが出来...
*反省と感想 [#k0da089b]
今回失敗した理由としてあげられるのは、テスト前で時間がな...
~
また十分な時間がかけられず、プログラムがかなり荒くなって...
forward(4000)
と書くところを
forward_forever(100)
sleep(4)
mL.stop()
mR.stop()
と書くなど、プログラムが最適化されていないことも精度を低...
~
~
~
昨日の訪問者数: &counter(yesterday);人~
今日の訪問者数: &counter(today);人~
合計訪問者数: &counter(all);人
ページ名: