2018a/Member/yokouchi/Mission3
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2018a/MemberOnly]]
*課題3〜空き缶運搬ロボット〜 [#k866a1ea]
**課題の説明 [#vb3368b9]
フィールドの説明
#ref(2018a/Member/yokouchi/Mission3/2018a-mission2.png,75...
-フィールドは課題2で使用した紙を使用する。
-2種類の空き缶(Aタイプ,Bタイプ)をそれぞれ3個づつ用意し、...
-空き缶には色をつけたり文字や記号を書いてもよい。あるいは...
ルール
-競技時間は審判が続行不能と判断するまで、あるいはリタイア...
-図のA地点または(および)A'地点からスタートする。ただし...
-Aタイプの空き缶を円Y内に、Bタイプの空き缶を円X内に運ぶ。
-開始の合図から5秒以内にスタートボタンを押す作業を完了す...
-競技が終了するまで、ロボットに触ったり人間が遠隔で操作し...
-途中でうまく動かなくなった場合、1回限り再スタートするこ...
基本得点の計算方法
-運んだ空き缶の数×3点
-空き缶を積み重ねて置くことができば場合、2段目の空き缶一...
-円内からはみ出している場合、半分以下なら1点減点、半分以...
-間違った円内に空き缶を置いた場合は、1個につき1点減点。
-間違った円内の2段目に空き缶を置いた場合は1個につき3点減...
技術点の計算方法
-以下の動作の精度・スピード・確実性などを含めた技術的な工...
-空き缶を探し取りにいくまでの動作 (3点)
-空き缶を掴む動作 (3点)
-空き缶を運ぶ動作 (2点)
-空き缶を置く動作 (2点)
-空き缶を積む動作 (3点)
-2台のRCXまたはNXT、EV3の連携の良さ(2点)
-自立型のロボットとしての形や動作の美しさ、斬新さ(2点)
-その他 (3点)
*チームの戦略 [#s80a1f95]
今回の課題を取り組むにあたり、自由度が高いため、様々な戦...
その中からいかに高得点を取ることが出来るかを意識し、以下...
+缶の積み下ろしは一つずつ。
+おろした缶を色別に仕分けする。
+それぞれの缶を指定の場所に運搬する。
+運搬、そして積み下ろしができるようなアームの制作。
*今回使用するロボットの説明 [#mf88ec37]
**ロボットの全体像 [#zd0c30da]
正面から見たとき
#ref(2018a/Member/yokouchi/Mission3/figure_robot_1.JPG,60...
背面から見たとき
#ref(2018a/Member/yokouchi/Mission3/DSC_0296.png,50%,背面)
**缶を掴む部分 [#w557d5e8]
#ref(2018a/Member/yokouchi/Mission3/DSC_0295.png,50%,アー...
この缶を掴む部分で重要なことは、まず、持つ部分の間隔をで...
そのため、このアームの奥の方を掴む部分、手前を運ぶ部分と...
また工夫した点として、缶がずれないようアームにゴム製のパ...
**ロボットの缶を操作する部分 [#dd7ea41d]
#ref(2018a/Member/yokouchi/Mission3/DSC_0294.png,50%,アー...
#ref(2018a/Member/yokouchi/Mission3/DSC_0298.png,50%,beru...
ベルトコンベアの要領を用い、中央にあるアーム部分を上下さ...
*実際ロボットが缶を持っている様子 [#j75ce356]
#ref(2018a/Member/yokouchi/Mission3/DSC_0288.png,50%,jisa...
実際にプログラミングをし、このロボが缶を掴むとこのように...
手前のアームでは重心が前にいきアンバランスになってしまう...
*プログラムの説明 [#c0e71179]
**プログラムの導入 [#zb56a854]
今回は前回同様、python言語を用いた。
以下は定義までの導入である。
#!/usr/bin/env python3
from ev3dev.ev3 import * -EV3を扱うモジュールをイ...
from time import sleep -timeモジュールからsleep...
us1 = UltrasonicSensor('in1') -1端子側の超音波センサー(...
us2 = UltrasonicSensor('in3') -3端子側の超音波センサー(...
mL = LargeMotor('outA') -A端子側の移動用モーター...
mR = LargeMotor('outB') -B端子側の移動用モーター...
mA = MediumMotor('outC') -C端子側のアーム開閉用モ...
mLif = LargeMotor('outD') -D端子側の無限軌道制御用...
また以下は、アームの上下をする際に用いるmLifの回転角度の...
lif2 = 250 -ある缶から一個上の缶までアーム...
lif3 = 495 -ある缶から二個上の缶までアーム...
dow3 = -520 -ある缶から二個下の缶までアーム...
dow2 = -280 -ある缶から一個下の缶までアーム...
**定義 [#h7a6dbb7]
***ロボットの移動時に使うもの [#t1ee32b3]
def motor_init(): -各モーターをリセットする
mL.reset()
mR.reset()
mLif.reset()
def turn(t): -右回りを正とし,指定角度 t だけ移...
mL.run_to_rel_pos(position_sp=t,speed_sp=60,stop_act...
mR.run_to_rel_pos(position_sp=-t,speed_sp=60,stop_ac...
sleep(3)
def run_for_back_pos(t): -指定角度 t だけ移動用モーター...
motor_init()
mL.run_to_rel_pos(position_sp=t,speed_sp=60,stop_act...
mR.run_to_rel_pos(position_sp=t,speed_sp=60,stop_act...
sleep(1)
def run_adjust(t): -上述定義を用いて,前進または後...
run_for_back_pos(t)
***アームの開閉時に扱うもの [#j7d91d1d]
def arm_open(): -アームを開く
mA.reset()
mA.run_to_rel_pos(position_sp=-20,speed_sp=20,stop_a...
sleep(2)
def arm_close(): -アームを閉じる
mA.reset()
mA.run_to_rel_pos(position_sp=50,speed_sp=50,stop_ac...
sleep(2)
def arm_adjust(t): -アーム開閉時に調整のために用いる(m...
mA.reset()
mA.run_to_rel_pos(position_sp=t,speed_sp=50,stop_act...
sleep(1)
***アームの上下移動時 [#z1f87ba1]
def lift_can2(): -アームが,ある缶から一個上の缶...
motor_init()
mLif.run_to_rel_pos(position_sp=lif2,speed_sp=80,sto...
sleep(3)
def lift_can3(): -ある缶から二個上の缶まで上昇する
motor_init()
mLif.run_to_rel_pos(position_sp=lif3,speed_sp=80,sto...
sleep(6)
def down_can2(): -ある缶から一個下の缶まで降下する
motor_init()
mLif.run_to_rel_pos(position_sp=dow2,speed_sp=75,sto...
sleep(5)
def down_can3(): -ある缶から二個下の缶目で降下する
motor_init()
mLif.run_to_rel_pos(position_sp=dow3,speed_sp=75,sto...
sleep(6)
def lift_adjust(t): -上述に定義した値以外で昇降を調整(...
motor_init()
mLif.run_to_rel_pos(position_sp=t,speed_sp=60,stop_a...
sleep(3)
def can_approach(): -缶の積み降ろしの前に,缶を見つけ,...
motor_init()
while us1.value() > 70: -缶との距離が一定値超の時,...
mL.run_forever(speed_sp=80)
mR.run_forever(speed_sp=80)
run_for_back_pos(80) -一定の距離まで近づいたら,...
sleep(2)
def turn_can_search(le,s): -前方にある缶を探して旋回
motor_init()
while us1.value() > le:
mL.run_forever(speed_sp=50*s)
mR.run_forever(speed_sp=-50*s)
***はじめの移動 [#m58a5289]
def start(): -スターティングポイントよりB地点に向...
motor_init()
run_for_back_pos(600) -↓で旋回して缶の正面になるよ...
sleep(8)
turn(165) -缶の正面を向くよう旋回
sleep(2)
turn(20) -旋回して缶を見つける準備に入る
turn_can_search(250,-1)-左回りに旋回して缶を探す
turn(-5) -方向修正
***缶の積み下ろし&運搬時に扱うもの [#l6f3908e]
def lift_down_can3_can2(): -三段目の缶と二段目の缶をアー...
motor_init()
lift_can3() -三段目の缶まで移動
arm_close() -アームを閉じる
lift_adjust(45) -移動の際に下の缶を引っ...
run_adjust(-100) -後退
sleep(2)
turn(-110) -左へ旋回
down_can3() -缶をとりあえず降ろす
lift_adjust(-40) -最下点まで降ろすよう調整
arm_open() -アームを開いて缶をリリ...
run_for_back_pos(250) -左斜め前方まで押して移動
sleep(3.5)
lift_can3() -移動の際に缶を引っ掛け...
lift_adjust(45)
run_for_back_pos(-250) -積まれた缶の前まで下が...
sleep(3.5)
turn(110) -缶の正面へ旋回
arm_adjust(-10) -アームを少し開く(確実に...
down_can2() -二段目の缶までアームを...
run_adjust(113) -缶の手前まで接近
sleep(2.5)
arm_close() -アームを閉じて缶をキャ...
lift_adjust(45) -缶を少し持ち上げる
run_for_back_pos(-90) -少し後退 ←この時二段目...
turn(110) -右へ旋回 ←
down_can2() -缶を降ろす
arm_open() -アームを開いて缶をリリ...
lift_can2() -アームを上げとく(↓colle...
def collect_can1_can3(): -三段目と左斜め前方に移した一...
motor_init()
turn(-115) -二段目を降ろしてアームを...
down_can2() -二段目にあったアームを三...
run_adjust(110) -三段目の缶がアームの中に...
sleep(1.5)
arm_close() -アームを閉じて缶をキャッチ
run_for_back_pos(-320) -後退
sleep(6)
lift_can3() -缶をキャッチしたまま上げ...
turn_can_search(300,-1) -最初に移した缶を探し,左...
down_can3() -缶を最下点まで降ろす
arm_open() -アームを開いて缶をリリース
arm_adjust(-10) -二つの缶が入るようにアー...
run_for_back_pos(500) -アームの中に二つの缶が入...
sleep(6)
arm_adjust(20) -アームを閉じて缶をまとめ...
終了行:
[[2018a/MemberOnly]]
*課題3〜空き缶運搬ロボット〜 [#k866a1ea]
**課題の説明 [#vb3368b9]
フィールドの説明
#ref(2018a/Member/yokouchi/Mission3/2018a-mission2.png,75...
-フィールドは課題2で使用した紙を使用する。
-2種類の空き缶(Aタイプ,Bタイプ)をそれぞれ3個づつ用意し、...
-空き缶には色をつけたり文字や記号を書いてもよい。あるいは...
ルール
-競技時間は審判が続行不能と判断するまで、あるいはリタイア...
-図のA地点または(および)A'地点からスタートする。ただし...
-Aタイプの空き缶を円Y内に、Bタイプの空き缶を円X内に運ぶ。
-開始の合図から5秒以内にスタートボタンを押す作業を完了す...
-競技が終了するまで、ロボットに触ったり人間が遠隔で操作し...
-途中でうまく動かなくなった場合、1回限り再スタートするこ...
基本得点の計算方法
-運んだ空き缶の数×3点
-空き缶を積み重ねて置くことができば場合、2段目の空き缶一...
-円内からはみ出している場合、半分以下なら1点減点、半分以...
-間違った円内に空き缶を置いた場合は、1個につき1点減点。
-間違った円内の2段目に空き缶を置いた場合は1個につき3点減...
技術点の計算方法
-以下の動作の精度・スピード・確実性などを含めた技術的な工...
-空き缶を探し取りにいくまでの動作 (3点)
-空き缶を掴む動作 (3点)
-空き缶を運ぶ動作 (2点)
-空き缶を置く動作 (2点)
-空き缶を積む動作 (3点)
-2台のRCXまたはNXT、EV3の連携の良さ(2点)
-自立型のロボットとしての形や動作の美しさ、斬新さ(2点)
-その他 (3点)
*チームの戦略 [#s80a1f95]
今回の課題を取り組むにあたり、自由度が高いため、様々な戦...
その中からいかに高得点を取ることが出来るかを意識し、以下...
+缶の積み下ろしは一つずつ。
+おろした缶を色別に仕分けする。
+それぞれの缶を指定の場所に運搬する。
+運搬、そして積み下ろしができるようなアームの制作。
*今回使用するロボットの説明 [#mf88ec37]
**ロボットの全体像 [#zd0c30da]
正面から見たとき
#ref(2018a/Member/yokouchi/Mission3/figure_robot_1.JPG,60...
背面から見たとき
#ref(2018a/Member/yokouchi/Mission3/DSC_0296.png,50%,背面)
**缶を掴む部分 [#w557d5e8]
#ref(2018a/Member/yokouchi/Mission3/DSC_0295.png,50%,アー...
この缶を掴む部分で重要なことは、まず、持つ部分の間隔をで...
そのため、このアームの奥の方を掴む部分、手前を運ぶ部分と...
また工夫した点として、缶がずれないようアームにゴム製のパ...
**ロボットの缶を操作する部分 [#dd7ea41d]
#ref(2018a/Member/yokouchi/Mission3/DSC_0294.png,50%,アー...
#ref(2018a/Member/yokouchi/Mission3/DSC_0298.png,50%,beru...
ベルトコンベアの要領を用い、中央にあるアーム部分を上下さ...
*実際ロボットが缶を持っている様子 [#j75ce356]
#ref(2018a/Member/yokouchi/Mission3/DSC_0288.png,50%,jisa...
実際にプログラミングをし、このロボが缶を掴むとこのように...
手前のアームでは重心が前にいきアンバランスになってしまう...
*プログラムの説明 [#c0e71179]
**プログラムの導入 [#zb56a854]
今回は前回同様、python言語を用いた。
以下は定義までの導入である。
#!/usr/bin/env python3
from ev3dev.ev3 import * -EV3を扱うモジュールをイ...
from time import sleep -timeモジュールからsleep...
us1 = UltrasonicSensor('in1') -1端子側の超音波センサー(...
us2 = UltrasonicSensor('in3') -3端子側の超音波センサー(...
mL = LargeMotor('outA') -A端子側の移動用モーター...
mR = LargeMotor('outB') -B端子側の移動用モーター...
mA = MediumMotor('outC') -C端子側のアーム開閉用モ...
mLif = LargeMotor('outD') -D端子側の無限軌道制御用...
また以下は、アームの上下をする際に用いるmLifの回転角度の...
lif2 = 250 -ある缶から一個上の缶までアーム...
lif3 = 495 -ある缶から二個上の缶までアーム...
dow3 = -520 -ある缶から二個下の缶までアーム...
dow2 = -280 -ある缶から一個下の缶までアーム...
**定義 [#h7a6dbb7]
***ロボットの移動時に使うもの [#t1ee32b3]
def motor_init(): -各モーターをリセットする
mL.reset()
mR.reset()
mLif.reset()
def turn(t): -右回りを正とし,指定角度 t だけ移...
mL.run_to_rel_pos(position_sp=t,speed_sp=60,stop_act...
mR.run_to_rel_pos(position_sp=-t,speed_sp=60,stop_ac...
sleep(3)
def run_for_back_pos(t): -指定角度 t だけ移動用モーター...
motor_init()
mL.run_to_rel_pos(position_sp=t,speed_sp=60,stop_act...
mR.run_to_rel_pos(position_sp=t,speed_sp=60,stop_act...
sleep(1)
def run_adjust(t): -上述定義を用いて,前進または後...
run_for_back_pos(t)
***アームの開閉時に扱うもの [#j7d91d1d]
def arm_open(): -アームを開く
mA.reset()
mA.run_to_rel_pos(position_sp=-20,speed_sp=20,stop_a...
sleep(2)
def arm_close(): -アームを閉じる
mA.reset()
mA.run_to_rel_pos(position_sp=50,speed_sp=50,stop_ac...
sleep(2)
def arm_adjust(t): -アーム開閉時に調整のために用いる(m...
mA.reset()
mA.run_to_rel_pos(position_sp=t,speed_sp=50,stop_act...
sleep(1)
***アームの上下移動時 [#z1f87ba1]
def lift_can2(): -アームが,ある缶から一個上の缶...
motor_init()
mLif.run_to_rel_pos(position_sp=lif2,speed_sp=80,sto...
sleep(3)
def lift_can3(): -ある缶から二個上の缶まで上昇する
motor_init()
mLif.run_to_rel_pos(position_sp=lif3,speed_sp=80,sto...
sleep(6)
def down_can2(): -ある缶から一個下の缶まで降下する
motor_init()
mLif.run_to_rel_pos(position_sp=dow2,speed_sp=75,sto...
sleep(5)
def down_can3(): -ある缶から二個下の缶目で降下する
motor_init()
mLif.run_to_rel_pos(position_sp=dow3,speed_sp=75,sto...
sleep(6)
def lift_adjust(t): -上述に定義した値以外で昇降を調整(...
motor_init()
mLif.run_to_rel_pos(position_sp=t,speed_sp=60,stop_a...
sleep(3)
def can_approach(): -缶の積み降ろしの前に,缶を見つけ,...
motor_init()
while us1.value() > 70: -缶との距離が一定値超の時,...
mL.run_forever(speed_sp=80)
mR.run_forever(speed_sp=80)
run_for_back_pos(80) -一定の距離まで近づいたら,...
sleep(2)
def turn_can_search(le,s): -前方にある缶を探して旋回
motor_init()
while us1.value() > le:
mL.run_forever(speed_sp=50*s)
mR.run_forever(speed_sp=-50*s)
***はじめの移動 [#m58a5289]
def start(): -スターティングポイントよりB地点に向...
motor_init()
run_for_back_pos(600) -↓で旋回して缶の正面になるよ...
sleep(8)
turn(165) -缶の正面を向くよう旋回
sleep(2)
turn(20) -旋回して缶を見つける準備に入る
turn_can_search(250,-1)-左回りに旋回して缶を探す
turn(-5) -方向修正
***缶の積み下ろし&運搬時に扱うもの [#l6f3908e]
def lift_down_can3_can2(): -三段目の缶と二段目の缶をアー...
motor_init()
lift_can3() -三段目の缶まで移動
arm_close() -アームを閉じる
lift_adjust(45) -移動の際に下の缶を引っ...
run_adjust(-100) -後退
sleep(2)
turn(-110) -左へ旋回
down_can3() -缶をとりあえず降ろす
lift_adjust(-40) -最下点まで降ろすよう調整
arm_open() -アームを開いて缶をリリ...
run_for_back_pos(250) -左斜め前方まで押して移動
sleep(3.5)
lift_can3() -移動の際に缶を引っ掛け...
lift_adjust(45)
run_for_back_pos(-250) -積まれた缶の前まで下が...
sleep(3.5)
turn(110) -缶の正面へ旋回
arm_adjust(-10) -アームを少し開く(確実に...
down_can2() -二段目の缶までアームを...
run_adjust(113) -缶の手前まで接近
sleep(2.5)
arm_close() -アームを閉じて缶をキャ...
lift_adjust(45) -缶を少し持ち上げる
run_for_back_pos(-90) -少し後退 ←この時二段目...
turn(110) -右へ旋回 ←
down_can2() -缶を降ろす
arm_open() -アームを開いて缶をリリ...
lift_can2() -アームを上げとく(↓colle...
def collect_can1_can3(): -三段目と左斜め前方に移した一...
motor_init()
turn(-115) -二段目を降ろしてアームを...
down_can2() -二段目にあったアームを三...
run_adjust(110) -三段目の缶がアームの中に...
sleep(1.5)
arm_close() -アームを閉じて缶をキャッチ
run_for_back_pos(-320) -後退
sleep(6)
lift_can3() -缶をキャッチしたまま上げ...
turn_can_search(300,-1) -最初に移した缶を探し,左...
down_can3() -缶を最下点まで降ろす
arm_open() -アームを開いて缶をリリース
arm_adjust(-10) -二つの缶が入るようにアー...
run_for_back_pos(500) -アームの中に二つの缶が入...
sleep(6)
arm_adjust(20) -アームを閉じて缶をまとめ...
ページ名: