2018a/Member/gear/Mission3
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2018a/Member]]
#contents
*課題3の説明 [#bbf655fa]
**内容 [#z6d771f7]
大まかな内容は「2組の積んである缶を種類ごとに分けて,各々...
&ref(2018a/Member/gear/Mission3/explanation_2.png,70%,最...
**ざっくりとしたイニシャル・ストラテジー [#w8045afa]
課題内容が発表された際に,私達のグループではおおまかに以...
-缶の積み降ろしは一個一個行うことにする.
-場所ごとに缶のリリースポイントを分けて,積まれた缶を2-1...
-リリースポイントに車体を向かわせて,指定ポイントまで運ぶ.
-缶をキャッチできるアームを垂直方向に昇降できる機構及びそ...
~
~
この時は,運ぶことまでを考えて積むことまでは想定していな...
また,1個1個の缶に対しての動作を行うので,プログラム量が...
*扱うロボット A with Bの説明&size(12){(都合により画像の一...
**ロボットの全体像 [#j1b7c6c5]
&ref(2018a/Member/gear/Mission3/figure_robot_1.JPG,80%,ロ...
&ref(2018a/Member/gear/Mission3/figure_robot_2.JPG,80%,ロ...
&ref(2018a/Member/gear/Mission3/figure_robot_3.JPG,109%,...
~
&size(18){これを分解すると… ⇒ 装置A + 装置B + ほかEV3...
&ref(2018a/Member/gear/Mission3/figure_carrier.JPG,80%,装...
&ref(2018a/Member/gear/Mission3/figure_deviceB.jpg,80%,装...
**装置Aの説明 [#qc1119ed]
装置Aは,装置B及びEV3本体を積載して移動するためのものなの...
~
&ref(2018a/Member/gear/Mission3/figure_carrier_explanatio...
**装置Bの説明 [#c3291f73]
課題完遂のための重要部分となる垂直方向の昇降に関しては,E...
***DOUBLE無限軌道 [#m3a05b9b]
無限軌道は二つあるが、偶数個のギアを用いて一つの駆動で両...
~
&ref(2018a/Member/gear/Mission3/figure_caterpillar_1.JPG,...
&ref(2018a/Member/gear/Mission3/figure_gear_explanation.j...
~
三段に積んである缶の一段目までアームが下がるような長さと...
~
&ref(2018a/Member/gear/Mission3/figure_caterpillar_2.JPG,...
~
また、必要な全長をもつ無限軌道の製作において、最初は車軸...
***FANTASTIC☆アーム [#b98960d5]
缶をキャッチしての積み降ろし、運搬を担う&color(orange){黄...
~
&ref(2018a/Member/gear/Mission3/figure_robot_4.JPG,85%,ア...
&ref(2018a/Member/gear/Mission3/figure_arm_explanation.JP...
~
左図について、二つの缶のに対して縦方向にキャッチできるよ...
~
右図については、六連ギアを組んだ際に出来た幅に合うように...
~
機能、構造及びデザイン性に富んでおり、揺るぎなく"&color(o...
~
とは言ったものの,参考にした動画はありますが([[こちら>htt...
**その他諸機器 [#s8650280]
&ref(2018a/Member/gear/Mission3/figure_us1.JPG,50%,正面の...
&ref(2018a/Member/gear/Mission3/figure_us2.JPG,50%,側面の...
~
二つの超音波センサーを上図のように取り付け,これを用いて...
*缶の積み降ろし&運搬にあたって [#maeb885d]
**ファイナル・アンリミテッド☆ストラテジー [#c951f339]
サブルーチンを一個一個作っていく中で(lift_down_can3_can2...
そして,編み出したSUVAらしきストラテジーが以下の通り.~
~
-缶を降ろして指定地点へ運搬&リリースする前に,まとめた二...
-分類の際に残ったもう一つの缶を目印にして,二つの缶を正確...
-超音波センサーを用いて正確な位置運びをする.
**注意点 [#bbb93979]
山ほどあるなかで,要旨を三つに絞ったものが以下の通り.
-キャッチした缶への動作による影響に配慮する,慎重を期した...
-フィールド上に分散する缶の位置
-缶の正確な位置情報の取得
*実行プログラムの説明 [#b2a77bde]
**プログラムの導入 [#g0d2bfb3]
今回はEV3を扱っているため,プログラミングにTera Termとい...
以下は定義までの導入である
#!/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端子側の無限軌道制御用...
以下は各位置での缶をアームでつかんでの積み降ろしをするた...
lif2 = 250 #ある缶から一個上の缶までアーム...
lif3 = 495 #ある缶から二個上の缶までアーム...
dow3 = -520 #ある缶から二個下の缶までアーム...
dow2 = -280 #ある缶から一個下の缶までアーム...
御覧の通り,値がバラバラである.~
昇降の絶対値は各々で等しくしたほうが扱いやすいのではない...
**定義の挿入(その1) [#i969792c]
***ロボットの移動時に基本的に扱うもの [#ea62f22a]
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)
***アーム開閉時に扱うもの [#had99725]
def arm_open(): #アームを開く※2
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)
※2 アームを開く時のモーターの速さはできるだけ小さくしなけ...
***アームの昇降時に''ベースとして''扱うもの [#ke01f8c3]
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)
lif,dowの各々の値は&size(16){[[こちら>#g0d2bfb3]]};←
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): #前方にある缶を探して旋回 ※1
motor_init()
while us1.value() > le:
mL.run_forever(speed_sp=50*s)
mR.run_forever(speed_sp=-50*s)
turn(20*s) #検知した後,正面を向くよう修正(調整中に...
(↑でも...
※1 状況下に応じて超音波センサーによる検知可能範囲の長さを...
**定義&size(13){(&color(red){地獄絵図};)};の挿入(その2) [...
***試合開始だぁ! [#u7f5580a]
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) #方向修正
***缶の積み降ろし&運搬時に扱うもの [#i5bbc7dd]
プログラム作成時にすでに目印として'#'で(ナンカアヤシイ)コ...
def lift_down_can3_can2(): #三段目の缶と二段目の缶をアー...
motor_init()
lift_can3() //三段目の缶まで移動
arm_close() //アームを閉じる
lift_adjust(45) //移動の際に下の缶を引っ...
run_adjust(-100) #7up / CClemon //後退
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) #CClemon / 7up //缶の手前まで接...
sleep(2.5)
arm_close() //アームを閉じて缶をキャ...
lift_adjust(45) //缶を少し持ち上げる
run_for_back_pos(-90) //少し後退 ←この時二段...
turn(110) //右へ旋回 ←
down_can2() //缶を降ろす
arm_open() //アームを開いて缶をリリ...
lift_can2() //アームを上げとく(↓coll...
御覧の通り,この長いサブルーチン中にアーム昇降の調整に用...
※※1 キャッチ前の缶との接近において,3段目と2段目に関して...
def collect_can1_can3(): //三段目と左斜め前方に移した一...
motor_init()
turn(-115) //二段目を降ろしてアーム...
down_can2() //二段目にあったアームを...
run_adjust(110) //三段目の缶がアームの中...
sleep(1.5)
arm_close() #7up / CClemon //アームを閉じて缶を...
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) //アームを閉じて缶をまと...
↓lift_down_can3_can2() と collect_can1_can3() の大まかな...
~
&ref(2018a/Member/gear/Mission3/lift_down_collect.gif,130...
~
以下は,二つの同種の缶をキャッチした状態から,手前側の固...
def pile_can():
lift_can3() #手前側のキャッチして固定...
run_for_back_pos(130) #残された缶に,積み降ろし...
sleep(3)
lift_adjust(40) #上げる過程で傾いた缶を慣...
lift_adjust(-180) #缶を積む
arm_open() #アームを開いて積まれた缶...
以下は,Y地点での缶の積み降ろしが終わった後,X地点の積み...
def can_approach2():
motor_init()
run_for_back_pos(-15) #C地点辺りで二つの缶を降ろし...
lift_can2() #周辺の缶を後の動作でアーム...
lift_adjust(65) #もう少し上げておく(これが後...
sleep(2)
run_for_back_pos(-275) #B地点辺りまで後退
sleep(6)
turn(100) #旋回してX地点の方向に合わせる
run_for_back_pos(730) #X地点の缶を目指してテキトー...
sleep(11.5)
turn(-80) #旋回して,缶を見つける準備...
turn_can_search(300,1) #右回りに旋回しながら缶を探す
turn(20) #適当な位置に正面を戻す
arm_adjust(-5) #缶を少し開いておく
run_for_back_pos(100) #ある程度の距離まで缶に接近
sleep(3)
down_can2() #アームを下げておく(lift_dow...
(↑ここで利いてくる.一つの...
↓ can_approach2() の大まかな動きの様子(昇降の様子は省略)...
~
&ref(2018a/Member/gear/Mission3/can_approach2.gif,80%,can...
~
以下はX地点での缶の積み降ろしと分別を終えた状態から,二つ...
def toward_circleY():
motor_init()
arm_close() #アームをしっかり閉じる(閉め...
arm_adjust(11)
turn(-360) #Y地点へ向かうため後方へ方向...
sleep(5)
turn(25) #少し旋回※※2
turn(-25) #戻る
pile_can() #二つの缶を二段に積み上げる
down_can2() #積み上げてアームを開いた後,...
lift_adjust(-70) #最下点まで下げておく
sleep(1)
run_for_back_pos(20) #缶を確実につかむため接近
arm_close() #アームを閉じて缶をキャッチ
lift_adjust(20) #缶を少し浮かせ,後の移動で引...
run_for_back_pos(380) #サークル付近にある最初に降ろ...
sleep(7)
arm_adjust(5) #缶をしっかりつかむ
lift_adjust(340) #缶をキャッチしたまま上げて,...
sleep(6) #↓右回りに旋回し,左回りの検...
mL.run_to_rel_pos(position_sp=45,speed_sp=40,stop_ac...
mR.run_to_rel_pos(position_sp=-45,speed_sp=40,stop_a...
sleep(4)
turn_can_search(300,-1)#左回りに旋回して缶を検知する
lift_adjust(-410) #缶を地面まで降ろす
sleep(7)
arm_open() #アームを開き缶をリリース(can...
※※2 turn(-360)の後に挿入したturn(±25)は特に意味がないよう...
~
※※3 缶を探す動作を挿入しなくても,いくつかの試行で,最初...
~
当初,サークル外の缶の検知した後,そのまま前進して pile_c...
以下は,CC&size(22){●};モンの缶の二段積みを終えて,移動し...
def can7up_catch():
motor_init()
lift_can3() #移動中,缶に引っ掛けないよう...
lift_adjust(70)
run_for_back_pos(-250) #後退
sleep(4)
turn(130) #旋回 ※※4↓
sleep(1.5)
while us2.value() > 160: #側面にある超音波センサーが...
mL.run_forever(speed_sp=60)
mR.run_forever(speed_sp=-60)
turn(40) #外周のラインに対してほぼ垂直...
run_for_back_pos(200) #車体が外周ラインに乗るまで前...
sleep(6)
turn(-170) #ラインに平行になるよう旋回(C...
sleep(2)
arm_adjust(-15) #二つの缶が確実にアームの中に...
sleep(1)
down_can3() #アームを最下点まで下げておく
lift_adjust(-25)
while us1.value() > 70: #缶との距離が一定値超のとき...
mL.run_forever(speed_sp=60)
mR.run_forever(speed_sp=60)
run_for_back_pos(100) #缶との距離が一定値に達したら...
arm_close() #アームを閉じて缶をキャッチ
arm_open() #アームを開く(toward_circleX()...
※※4 外周と垂直に近い状態にするとき,サークル内にリリース...
以下は二つの7&size(22){●};Pの缶をキャッチした状態より二段...
def toward_circleX():
motor_init()
arm_close() #アームを閉じる
pile_can() #缶を二段に積み上げる(最後はア...
down_can2() #最下点まで下げておく
lift_adjust(-110)
sleep(1)
run_for_back_pos(20) #下の缶を確実にキャッチできる...
arm_close() #アームを閉じて缶をキャッチ
arm_adjust(8) #缶をしっかりキャッチ
lift_adjust(20) #缶を少し浮かせ,後の移動で引...
run_for_back_pos(-110)#↓で旋回に入ったとき積んだ缶に...
mL.run_to_rel_pos(position_sp=-300,speed_sp=40,stop_...
mR.run_to_rel_pos(position_sp=300,speed_sp=40,stop_a...
sleep(8) #↑X地点のほうへ旋回 ※※3
arm_adjust(8) #ここまでの過程でアームが緩む...
lift_adjust(320) #缶を上げて,正面の超音波セン...
sleep(5)
turn_can_search(500,1)#右回りに旋回して,缶を探す ...
turn(20) #方向修正
lift_adjust(-320) #缶を降ろす
sleep(6)
run_for_back_pos(220) #X地点の側の缶にある程度近づく
sleep(7)
turn_can_search(300,-1)#左回りに旋回して,缶を探す(↑...
turn(-15) #方向修正 ...
while us1.value() > 80: #缶との距離が一定値超の時,...
mL.run_forever(speed_sp=70)
mR.run_forever(speed_sp=70)
pile_can() #缶を積み,三段に積み上げる(...
down_can2() #最下点まで下げておく
lift_adjust(-85)
sleep(1)
arm_close() #三段に積まれた缶をキャッチ
mL.run_to_rel_pos(position_sp=-110,speed_sp=30,stop_...
mR.run_to_rel_pos(position_sp=110,speed_sp=30,stop_a...
sleep(5) #↑三段に積まれた缶をサークル...
arm_open() #アームを開いて三段に積まれた...
※※6 turn_can_search() が距離を変えて二回行われているが,...
~
↓ toward_circleY() から toward_circleX() までの大まかな様...
~
&ref(2018a/Member/gear/Mission3/robocon.gif,80%,積み上げ...
**本番の作動プログラム [#t6257ca1]
start() #スタート地点より,B地点まで前進,...
can_approach() #缶まで適当な距離だけ接近
lift_can3_can2() #三段目と二段目の缶を降ろす
collect_can1_can3() #一段目と三段目の缶を指定ポイントま...
can_approach2() #X地点の缶へ向かう
can_approach() #上述に同じ
lift_down_can3_can2()# ↓ ←本番はここで缶を崩して...
collect_can1_can3() # ↓
toward_circleY() #Y地点での缶の積み上げ,運搬&リリース
can7up_catch() #最初に降ろしてまとめておいた缶のキ...
toward_circleX() #X地点での缶の積み上げ,運搬&リリース
本番直前の度重なる微調整の成果もなく,最大の見せ場となる...
*言い訳のような懺悔のような感想 [#a465d4ae]
作成したプログラミングを振り返ってみてみると,長すぎて美...
~
しかし,ロボコンの結果は,缶を運びきれずに基本点無得点な...
~
プログラミングはコンピューターを介すが,所詮はヒトが作っ...
~
追記:プログラミングは実践あるのみ.とりあえず何か打ち込...
~
このページの訪問者数 :本日&counter(today); 昨日&counter(...
終了行:
[[2018a/Member]]
#contents
*課題3の説明 [#bbf655fa]
**内容 [#z6d771f7]
大まかな内容は「2組の積んである缶を種類ごとに分けて,各々...
&ref(2018a/Member/gear/Mission3/explanation_2.png,70%,最...
**ざっくりとしたイニシャル・ストラテジー [#w8045afa]
課題内容が発表された際に,私達のグループではおおまかに以...
-缶の積み降ろしは一個一個行うことにする.
-場所ごとに缶のリリースポイントを分けて,積まれた缶を2-1...
-リリースポイントに車体を向かわせて,指定ポイントまで運ぶ.
-缶をキャッチできるアームを垂直方向に昇降できる機構及びそ...
~
~
この時は,運ぶことまでを考えて積むことまでは想定していな...
また,1個1個の缶に対しての動作を行うので,プログラム量が...
*扱うロボット A with Bの説明&size(12){(都合により画像の一...
**ロボットの全体像 [#j1b7c6c5]
&ref(2018a/Member/gear/Mission3/figure_robot_1.JPG,80%,ロ...
&ref(2018a/Member/gear/Mission3/figure_robot_2.JPG,80%,ロ...
&ref(2018a/Member/gear/Mission3/figure_robot_3.JPG,109%,...
~
&size(18){これを分解すると… ⇒ 装置A + 装置B + ほかEV3...
&ref(2018a/Member/gear/Mission3/figure_carrier.JPG,80%,装...
&ref(2018a/Member/gear/Mission3/figure_deviceB.jpg,80%,装...
**装置Aの説明 [#qc1119ed]
装置Aは,装置B及びEV3本体を積載して移動するためのものなの...
~
&ref(2018a/Member/gear/Mission3/figure_carrier_explanatio...
**装置Bの説明 [#c3291f73]
課題完遂のための重要部分となる垂直方向の昇降に関しては,E...
***DOUBLE無限軌道 [#m3a05b9b]
無限軌道は二つあるが、偶数個のギアを用いて一つの駆動で両...
~
&ref(2018a/Member/gear/Mission3/figure_caterpillar_1.JPG,...
&ref(2018a/Member/gear/Mission3/figure_gear_explanation.j...
~
三段に積んである缶の一段目までアームが下がるような長さと...
~
&ref(2018a/Member/gear/Mission3/figure_caterpillar_2.JPG,...
~
また、必要な全長をもつ無限軌道の製作において、最初は車軸...
***FANTASTIC☆アーム [#b98960d5]
缶をキャッチしての積み降ろし、運搬を担う&color(orange){黄...
~
&ref(2018a/Member/gear/Mission3/figure_robot_4.JPG,85%,ア...
&ref(2018a/Member/gear/Mission3/figure_arm_explanation.JP...
~
左図について、二つの缶のに対して縦方向にキャッチできるよ...
~
右図については、六連ギアを組んだ際に出来た幅に合うように...
~
機能、構造及びデザイン性に富んでおり、揺るぎなく"&color(o...
~
とは言ったものの,参考にした動画はありますが([[こちら>htt...
**その他諸機器 [#s8650280]
&ref(2018a/Member/gear/Mission3/figure_us1.JPG,50%,正面の...
&ref(2018a/Member/gear/Mission3/figure_us2.JPG,50%,側面の...
~
二つの超音波センサーを上図のように取り付け,これを用いて...
*缶の積み降ろし&運搬にあたって [#maeb885d]
**ファイナル・アンリミテッド☆ストラテジー [#c951f339]
サブルーチンを一個一個作っていく中で(lift_down_can3_can2...
そして,編み出したSUVAらしきストラテジーが以下の通り.~
~
-缶を降ろして指定地点へ運搬&リリースする前に,まとめた二...
-分類の際に残ったもう一つの缶を目印にして,二つの缶を正確...
-超音波センサーを用いて正確な位置運びをする.
**注意点 [#bbb93979]
山ほどあるなかで,要旨を三つに絞ったものが以下の通り.
-キャッチした缶への動作による影響に配慮する,慎重を期した...
-フィールド上に分散する缶の位置
-缶の正確な位置情報の取得
*実行プログラムの説明 [#b2a77bde]
**プログラムの導入 [#g0d2bfb3]
今回はEV3を扱っているため,プログラミングにTera Termとい...
以下は定義までの導入である
#!/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端子側の無限軌道制御用...
以下は各位置での缶をアームでつかんでの積み降ろしをするた...
lif2 = 250 #ある缶から一個上の缶までアーム...
lif3 = 495 #ある缶から二個上の缶までアーム...
dow3 = -520 #ある缶から二個下の缶までアーム...
dow2 = -280 #ある缶から一個下の缶までアーム...
御覧の通り,値がバラバラである.~
昇降の絶対値は各々で等しくしたほうが扱いやすいのではない...
**定義の挿入(その1) [#i969792c]
***ロボットの移動時に基本的に扱うもの [#ea62f22a]
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)
***アーム開閉時に扱うもの [#had99725]
def arm_open(): #アームを開く※2
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)
※2 アームを開く時のモーターの速さはできるだけ小さくしなけ...
***アームの昇降時に''ベースとして''扱うもの [#ke01f8c3]
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)
lif,dowの各々の値は&size(16){[[こちら>#g0d2bfb3]]};←
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): #前方にある缶を探して旋回 ※1
motor_init()
while us1.value() > le:
mL.run_forever(speed_sp=50*s)
mR.run_forever(speed_sp=-50*s)
turn(20*s) #検知した後,正面を向くよう修正(調整中に...
(↑でも...
※1 状況下に応じて超音波センサーによる検知可能範囲の長さを...
**定義&size(13){(&color(red){地獄絵図};)};の挿入(その2) [...
***試合開始だぁ! [#u7f5580a]
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) #方向修正
***缶の積み降ろし&運搬時に扱うもの [#i5bbc7dd]
プログラム作成時にすでに目印として'#'で(ナンカアヤシイ)コ...
def lift_down_can3_can2(): #三段目の缶と二段目の缶をアー...
motor_init()
lift_can3() //三段目の缶まで移動
arm_close() //アームを閉じる
lift_adjust(45) //移動の際に下の缶を引っ...
run_adjust(-100) #7up / CClemon //後退
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) #CClemon / 7up //缶の手前まで接...
sleep(2.5)
arm_close() //アームを閉じて缶をキャ...
lift_adjust(45) //缶を少し持ち上げる
run_for_back_pos(-90) //少し後退 ←この時二段...
turn(110) //右へ旋回 ←
down_can2() //缶を降ろす
arm_open() //アームを開いて缶をリリ...
lift_can2() //アームを上げとく(↓coll...
御覧の通り,この長いサブルーチン中にアーム昇降の調整に用...
※※1 キャッチ前の缶との接近において,3段目と2段目に関して...
def collect_can1_can3(): //三段目と左斜め前方に移した一...
motor_init()
turn(-115) //二段目を降ろしてアーム...
down_can2() //二段目にあったアームを...
run_adjust(110) //三段目の缶がアームの中...
sleep(1.5)
arm_close() #7up / CClemon //アームを閉じて缶を...
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) //アームを閉じて缶をまと...
↓lift_down_can3_can2() と collect_can1_can3() の大まかな...
~
&ref(2018a/Member/gear/Mission3/lift_down_collect.gif,130...
~
以下は,二つの同種の缶をキャッチした状態から,手前側の固...
def pile_can():
lift_can3() #手前側のキャッチして固定...
run_for_back_pos(130) #残された缶に,積み降ろし...
sleep(3)
lift_adjust(40) #上げる過程で傾いた缶を慣...
lift_adjust(-180) #缶を積む
arm_open() #アームを開いて積まれた缶...
以下は,Y地点での缶の積み降ろしが終わった後,X地点の積み...
def can_approach2():
motor_init()
run_for_back_pos(-15) #C地点辺りで二つの缶を降ろし...
lift_can2() #周辺の缶を後の動作でアーム...
lift_adjust(65) #もう少し上げておく(これが後...
sleep(2)
run_for_back_pos(-275) #B地点辺りまで後退
sleep(6)
turn(100) #旋回してX地点の方向に合わせる
run_for_back_pos(730) #X地点の缶を目指してテキトー...
sleep(11.5)
turn(-80) #旋回して,缶を見つける準備...
turn_can_search(300,1) #右回りに旋回しながら缶を探す
turn(20) #適当な位置に正面を戻す
arm_adjust(-5) #缶を少し開いておく
run_for_back_pos(100) #ある程度の距離まで缶に接近
sleep(3)
down_can2() #アームを下げておく(lift_dow...
(↑ここで利いてくる.一つの...
↓ can_approach2() の大まかな動きの様子(昇降の様子は省略)...
~
&ref(2018a/Member/gear/Mission3/can_approach2.gif,80%,can...
~
以下はX地点での缶の積み降ろしと分別を終えた状態から,二つ...
def toward_circleY():
motor_init()
arm_close() #アームをしっかり閉じる(閉め...
arm_adjust(11)
turn(-360) #Y地点へ向かうため後方へ方向...
sleep(5)
turn(25) #少し旋回※※2
turn(-25) #戻る
pile_can() #二つの缶を二段に積み上げる
down_can2() #積み上げてアームを開いた後,...
lift_adjust(-70) #最下点まで下げておく
sleep(1)
run_for_back_pos(20) #缶を確実につかむため接近
arm_close() #アームを閉じて缶をキャッチ
lift_adjust(20) #缶を少し浮かせ,後の移動で引...
run_for_back_pos(380) #サークル付近にある最初に降ろ...
sleep(7)
arm_adjust(5) #缶をしっかりつかむ
lift_adjust(340) #缶をキャッチしたまま上げて,...
sleep(6) #↓右回りに旋回し,左回りの検...
mL.run_to_rel_pos(position_sp=45,speed_sp=40,stop_ac...
mR.run_to_rel_pos(position_sp=-45,speed_sp=40,stop_a...
sleep(4)
turn_can_search(300,-1)#左回りに旋回して缶を検知する
lift_adjust(-410) #缶を地面まで降ろす
sleep(7)
arm_open() #アームを開き缶をリリース(can...
※※2 turn(-360)の後に挿入したturn(±25)は特に意味がないよう...
~
※※3 缶を探す動作を挿入しなくても,いくつかの試行で,最初...
~
当初,サークル外の缶の検知した後,そのまま前進して pile_c...
以下は,CC&size(22){●};モンの缶の二段積みを終えて,移動し...
def can7up_catch():
motor_init()
lift_can3() #移動中,缶に引っ掛けないよう...
lift_adjust(70)
run_for_back_pos(-250) #後退
sleep(4)
turn(130) #旋回 ※※4↓
sleep(1.5)
while us2.value() > 160: #側面にある超音波センサーが...
mL.run_forever(speed_sp=60)
mR.run_forever(speed_sp=-60)
turn(40) #外周のラインに対してほぼ垂直...
run_for_back_pos(200) #車体が外周ラインに乗るまで前...
sleep(6)
turn(-170) #ラインに平行になるよう旋回(C...
sleep(2)
arm_adjust(-15) #二つの缶が確実にアームの中に...
sleep(1)
down_can3() #アームを最下点まで下げておく
lift_adjust(-25)
while us1.value() > 70: #缶との距離が一定値超のとき...
mL.run_forever(speed_sp=60)
mR.run_forever(speed_sp=60)
run_for_back_pos(100) #缶との距離が一定値に達したら...
arm_close() #アームを閉じて缶をキャッチ
arm_open() #アームを開く(toward_circleX()...
※※4 外周と垂直に近い状態にするとき,サークル内にリリース...
以下は二つの7&size(22){●};Pの缶をキャッチした状態より二段...
def toward_circleX():
motor_init()
arm_close() #アームを閉じる
pile_can() #缶を二段に積み上げる(最後はア...
down_can2() #最下点まで下げておく
lift_adjust(-110)
sleep(1)
run_for_back_pos(20) #下の缶を確実にキャッチできる...
arm_close() #アームを閉じて缶をキャッチ
arm_adjust(8) #缶をしっかりキャッチ
lift_adjust(20) #缶を少し浮かせ,後の移動で引...
run_for_back_pos(-110)#↓で旋回に入ったとき積んだ缶に...
mL.run_to_rel_pos(position_sp=-300,speed_sp=40,stop_...
mR.run_to_rel_pos(position_sp=300,speed_sp=40,stop_a...
sleep(8) #↑X地点のほうへ旋回 ※※3
arm_adjust(8) #ここまでの過程でアームが緩む...
lift_adjust(320) #缶を上げて,正面の超音波セン...
sleep(5)
turn_can_search(500,1)#右回りに旋回して,缶を探す ...
turn(20) #方向修正
lift_adjust(-320) #缶を降ろす
sleep(6)
run_for_back_pos(220) #X地点の側の缶にある程度近づく
sleep(7)
turn_can_search(300,-1)#左回りに旋回して,缶を探す(↑...
turn(-15) #方向修正 ...
while us1.value() > 80: #缶との距離が一定値超の時,...
mL.run_forever(speed_sp=70)
mR.run_forever(speed_sp=70)
pile_can() #缶を積み,三段に積み上げる(...
down_can2() #最下点まで下げておく
lift_adjust(-85)
sleep(1)
arm_close() #三段に積まれた缶をキャッチ
mL.run_to_rel_pos(position_sp=-110,speed_sp=30,stop_...
mR.run_to_rel_pos(position_sp=110,speed_sp=30,stop_a...
sleep(5) #↑三段に積まれた缶をサークル...
arm_open() #アームを開いて三段に積まれた...
※※6 turn_can_search() が距離を変えて二回行われているが,...
~
↓ toward_circleY() から toward_circleX() までの大まかな様...
~
&ref(2018a/Member/gear/Mission3/robocon.gif,80%,積み上げ...
**本番の作動プログラム [#t6257ca1]
start() #スタート地点より,B地点まで前進,...
can_approach() #缶まで適当な距離だけ接近
lift_can3_can2() #三段目と二段目の缶を降ろす
collect_can1_can3() #一段目と三段目の缶を指定ポイントま...
can_approach2() #X地点の缶へ向かう
can_approach() #上述に同じ
lift_down_can3_can2()# ↓ ←本番はここで缶を崩して...
collect_can1_can3() # ↓
toward_circleY() #Y地点での缶の積み上げ,運搬&リリース
can7up_catch() #最初に降ろしてまとめておいた缶のキ...
toward_circleX() #X地点での缶の積み上げ,運搬&リリース
本番直前の度重なる微調整の成果もなく,最大の見せ場となる...
*言い訳のような懺悔のような感想 [#a465d4ae]
作成したプログラミングを振り返ってみてみると,長すぎて美...
~
しかし,ロボコンの結果は,缶を運びきれずに基本点無得点な...
~
プログラミングはコンピューターを介すが,所詮はヒトが作っ...
~
追記:プログラミングは実践あるのみ.とりあえず何か打ち込...
~
このページの訪問者数 :本日&counter(today); 昨日&counter(...
ページ名: