2018a/Member/makaya/Mission3
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
R3R4(2班)
課題3
ミニロボコン
目次
#contents
*課題内容(ミニロボコン) [#zff4a973]
**課題:空き缶運搬ロボット [#q04b5c7a]
空き缶を分別して所定の場所に運ぶ。
#ref(./kadai3.png,90%,課題図)
フィールドの説明
-フィールドは課題2で使用した紙を使用する。
-2種類の空き缶(Aタイプ,Bタイプ)をそれぞれ3個づつ用意し、...
-空き缶には色をつけたり文字や記号を書いてもよい。あるいは...
**ルール [#v605283e]
基本ルール
-競技時間は審判が続行不能と判断するまで、あるいはリタイア...
-図の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点)
**各係 [#qc6e5d98]
-司会・審判 (2人)・司会進行、開始・終了の合図と基本得点...
-得点の集計係 (1人)・技術点を集計する
-採点の報告係 (各チーム1人)・採点した点数を集計係に連絡する
*機体説明 [#v8384b4e]
#ref(./kitaiab.jpg,90%,親と子)
親機と子機と命名しました。2台で協力するところや大きさ的に...
**機体1(子機) [#w934251b]
#ref(./kitaib1.jpg,90%,モータ使用箇所)
モータA,Bで左右のタイヤを回す。モータCでアームを動かす。...
#ref(./kitaib2.jpg,90%,機構)
-赤枠、缶の1段目を支えるように3/4方向(横と後ろ、すなわ...
-青枠、缶の2段目をつかむ
缶の詰みあがった高さと相談する。
#ref(./kitaib3.jpg,90%,使われ方)
上図の様に1段目を支え、2段目をつかむ。
**機体2(親機おやき) [#k6c75f89]
#ref(./kitaia2.jpg,90%,つかむ箇所)
子機とつかむ機構は同じでモータBが動くと両側のアームが同時...
#ref(./kitaia3.jpg,90%,使われ方)
子機と形はほとんど同じで掴んだ時に1,2段目の缶を支え、3...
*戦略 [#hb757405]
**方針 [#a84ac806]
RISでは珍しい機体を2台つくり、そしてお互いの連携で高得点...
高得点を目指すには
-すべての缶を入れる
-2台で連携する
-移動、つかむ、積む、運ぶ
これらを行うものを考えた。
**案(アイデア) [#za6ebc11]
移動では機体がライントレースするものなので課題2を参考。...
#ref(./senryaku.jpg,90%,抱擁)
緑縁のように親機(右)と子機(左)でしっかり2、3段目を...
まるで親子の抱擁に見えませんか?
#ref(./senryaku1.jpg,90%,子離れ)
子機が後ろに下がる。
#ref(./senryaku2.jpg,90%,老後)
親機、子機が缶をはなすと見事に2段の積まれた缶と1段だけ...
#ref(./senryaku3.jpg,90%,缶の加工)
積まれた缶を引っ張り抜くときに缶同士ができるだけ影響しな...
#ref(./senryaku5.jpg,30%,ルート)
缶を置いたり運んだりするのに最適なルートが上記だと考えた...
-・オレンジ線(時間で動く)・青、緑線(子機がライントレー...
-左下スタートが子機、右下スタートが親機
*プログラムについて [#jfae31c8]
親機と子機でプログラムを書いた人が違うので書き方も違う
**親機 [#wa343a73]
***define [#v599ea6c]
#define turn_left Off(OUT_AC);OnFwd(OUT_A);OnRev(OUT_C);...
#define turn_right Off(OUT_AC);OnFwd(OUT_C);OnRev(OUT_A)...
#define run_left Off(OUT_AC);OnFwd(OUT_A);Wait(2);Off(OU...
#define run_right Off(OUT_AC);OnFwd(OUT_C);Wait(2);Off(O...
#define arm_open Off(OUT_B);OnRev(OUT_B);Wait(20);Off(OU...
#define arm_close Off(OUT_B);OnFwd(OUT_B);
#define turn_left_free OnFwd(OUT_A);OnRev(OUT_C);
#define turn_right_free OnFwd(OUT_C);OnRev(OUT_A);
#define turn_left_small OnFwd(OUT_A);
#define turn_right_small OnFwd(OUT_C);
turn_left,turn_left_freeは両方のタイヤを回転させて左へ曲...
turn_left_small,run_leftはタイヤ1つだけ回転し回転の内側...
右に曲がる,turn_right,turn_right_free,turn_right_small...
arm_openで空き缶を掴むためのアームを開き,arm_closeでアー...
***subルーチン [#zfd807c2]
sub follow_line_right(){ClearTimer(0);
while(FastTimer(0)<18)
if(SENSOR_2<38){
turn_right; // センサー2が黒を認識し...
}else if(SENSOR_2<42){
run_right;ClearTimer(0); // センサー2がグレーっぽい黒...
}else if(SENSOR_2<47){
OnFwd(OUT_AC);ClearTimer(0); // センサー2がグレーを認...
}else if(SENSOR_2<50){
run_left;ClearTimer(0); // センサー2がグレーっぽい白...
}else if(SENSOR_2<55){
turn_left;ClearTimer(0); // センサー2が白を認識した...
}}
上のサブルーチンは黒線の右側をライントレースするプログラ...
sub follow_line_left(){ClearTimer(0);
while(FastTimer(0)<18)
if(SENSOR_2<38){
turn_left; // センサー2が黒を認識した...
}else if(SENSOR_2<42){
run_left;ClearTimer(0); // センサー2がグレーっぽい黒...
}else if(SENSOR_2<47){
OnFwd(OUT_AC);ClearTimer(0); // センサー2がグレーを...
}else if(SENSOR_2<50){
run_right;ClearTimer(0); // センサー2がグレーっぽい白...
}else if(SENSOR_2<55){
turn_right;ClearTimer(0); // センサー2が白を認識した...
}}
上のプログラムは黒線の左側をライントレースするプログラム...
***task mainについて [#l73eda2c]
task main()
{
OnFwd(OUT_AC);
Wait(200);
Off(OUT_AC); // A'からHに...
SetSensor(SENSOR_2,SENSOR_LIGHT);
follow_line_left(); // Hまで黒線左側をラ...
turn_right_small;
Wait(90);
turn_right_free;
Wait(15);
Off(OUT_AC); // HからIに方向転換
follow_line_left(); // HからIに進む 黒線...
Off(OUT_AC);
Wait(300); // "こき"の動きとの時間...
turn_right_free;
Wait(10);
Off(OUT_AC); // Yに体が向くように少し...
OnFwd(OUT_AC);
Wait(40); // IからYまで直進
Off(OUT_AC);
arm_close; // 缶を掴む
Wait(1000); // 相手が2段目の空き缶を抜くまで...
arm_open; // 3段目の空き缶をアームを放すこ...
OnFwd(OUT_AC);
Wait(25);
Off(OUT_AC); // 缶をがっちり抱える
turn_right_small;
Wait(110);
Off(OUT_AC); // Yで右に90°方向転換
OnFwd(OUT_AC);
Wait(30); // 黒線左側をライントレースできる...
Off(OUT_AC);
follow_line_left(); // 黒線左側をライントレースし,...
turn_left_small;
Wait(30);
turn_left_free;
Wait(35); // Gで左へ曲がる
Off(OUT_AC);
Wait(1500); // "こき"が通り過ぎるまで待つ
OnFwd(OUT_AC);
Wait(120);
Off(OUT_AC); // 缶をおいていく
OnRev(OUT_AC);
Wait(120); // Gに戻る
turn_right_free;
Wait(70);
Off(OUT_AC); // 右に回転して軌道に戻る
follow_line_left(); // ライントレース
Off(OUT_AC);
Wait(300); // "こき"の動きとの時間合わせ
turn_right_free;
Wait(10);
Off(OUT_AC); // 少し右に曲がることでXに体を...
OnFwd(OUT_AC);
Wait(20); // 空き缶まで行く
Off(OUT_AC);
Wait(100); // "こき"との時間合わせ
arm_close; // 缶を掴む
Wait(500); // 相手が2段目の空き缶を抜くまで待機
arm_open; // 3段目の空き缶をアームを放すことで...
OnRev(OUT_AC);
Wait(120);
Off(OUT_AC);
Wait(100); // XからG辺りまで後退
turn_right_free;
Wait(75);
Off(OUT_AC);
Wait(200); // 右へ曲がる
OnFwd(OUT_AC);
Wait(200);
Off(OUT_AC);
Wait(200); // 直進
turn_left_free;
Wait(75);
Off(OUT_AC);
Wait(200); // 左へ曲がる
OnFwd(OUT_AC);
Wait(260);
Off(OUT_AC);
Wait(200); // A'で空き缶を抱える
turn_left_free;
Wait(85);
Off(OUT_AC);
Wait(200); // A'で左へ曲がる
OnFwd(OUT_AC);
Wait(100);
Off(OUT_AC); // 空き缶をXに置く
OnRev(OUT_AC);
Wait(100);
Off(OUT_AC); // Xで少し後退
Off(OUT_AC); //終了
}
**子機 [#c61ecec3]
***define [#me2920e9]
#define THRESHOLD 48 //基準(中間値)となる光の値(...
#define CROSSTIMER 6 //黒線を6回検知で止まるという値
#define GO OnFwd(OUT_AC); //まっすぐ進む
#define BACK OnRev(OUT_AC); //後ろ
#define turn_left OnFwd(OUT_A);Off(OUT_C); //左回り
#define turn_right Off(OUT_A);OnFwd(OUT_C); //右回り
#define turn_hleft OnFwd(OUT_A);OnRev(OUT_C); //右旋回
#define turn_hright OnRev(OUT_A);OnFwd(OUT_C); //左旋回
#define STEP 1 //0.01秒(if内で使用)
#define tunoTIME 200 //アームを動かす時間
***subルーチン [#madf572d]
黒<THRESHOLD-7<黒灰<THRESHOLD-3<灰<THRESHOLD+3<白...
sub traceLstop() //L(左)をトレースして黒灰を6回検知...
{
int n=0;
while(n<CROSSTIMER){
if(SENSOR_2<THRESHOLD-3){
turn_left;n++;
}else{ if(SENSOR_2<THRESHOLD+3){
GO;
}else if(SENSOR_2<THRESHOLD+7){
turn_right;
}else{
turn_hright;
}n=0;
}
Wait(STEP);
}
PlaySound(SOUND_DOWN);
}
sub traceRstop() //R(右)をトレースして黒灰を6回検...
{
int n=0;
while(n<CROSSTIMER){
if(SENSOR_2<THRESHOLD-3){
turn_right;n++;
}else{ if(SENSOR_2<THRESHOLD+3){
GO;
}else if(SENSOR_2<THRESHOLD+7){
turn_left;
}else{
turn_hleft;
}n=0;
}
Wait(STEP);
}
PlaySound(SOUND_DOWN);
}
sub traceSLstop() //L(左)をトレースして黒灰を6回検...
{
int n=0;
while(n<6){
if(SENSOR_2<THRESHOLD-3){
turn_left;n++;
}else{ if(SENSOR_2<THRESHOLD+3){
GO;
}else{
turn_right;
}n=0;
}
Wait(STEP);
}
PlaySound(SOUND_DOWN);
}//
黒で旋回そして止まるためのカウントにすると止まりきらなく...
STEPはif内の動作を1回あたり0.01秒行うための時間
各if終了後に音楽を入れることで交差点の判断の有無を確認し...
subを用いたdefine
#define STOPGOr while(SENSOR_2<THRESHOLD+7){GO;} traceRs...
#define STOPGOl while(SENSOR_2<THRESHOLD+7){GO;} traceLs...
***task mainについて [#ad0dcd96]
task main()
{
SetPower(OUT_B,3); //モータBの力を3にする
SetSensor(SENSOR_2,SENSOR_LIGHT); //センサーを...
GO;Wait(80); //地点Aの抜け出し
traceLstop();
Off(OUT_AC);Wait(350); //C交差点止まる
GO;Wait(20);
turn_hright;Wait(110);
traceRstop();
Off(OUT_AC);Wait(10); //K交差点止まる
turn_hleft;Wait(15); //つかむため軌道修正
Off(OUT_AC);Wait(200);
GO;Wait(90);Off(OUT_AC); //...
OnFwd(OUT_B);Wait(tunoTIME);Off(OUT_AC);Wait(100); ...
BACK;Wait(180); Off(OUT_AC);Wait(600); /...
OnRev(OUT_B);Wait(tunoTIME);Off(OUT_B); //缶...
GO;Wait(180);Off(OUT_AC); ...
while(SENSOR_2>THRESHOLD-7){BACK;}; //K地点...
turn_hleft;Wait(50);while(SENSOR_2>THRESHOLD-7){turn...
//CKの右側を...
traceRstop(); //CKの右トレース
GO;Wait(30);
turn_hright;Wait(100);
traceRstop(); //Cの右直線のトレース
turn_right;Wait(185);
Off(OUT_AC);Wait(10);
while(SENSOR_2>THRESHOLD-7){GO;}; //Eの右直...
GO;Wait(40);
while(SENSOR_2>THRESHOLD-7){turn_hright;};
Off(OUT_AC);Wait(400);
GO;Wait(80);Off(OUT_AC);Wait(150); //Yの...
OnFwd(OUT_B);Wait(tunoTIME);Off(OUT_AC);Wait(200); /...
BACK;Wait(90);
turn_hleft;Wait(85);Off(OUT_AC);Wait(100);
OnRev(OUT_B);Wait(tunoTIME);Off(OUT_B);Wait(30); ...
GO;Wait(165);BACK;Wait(165);Off(OUT_AC);Wait(50); ...
turn_hright;Wait(90);Off(OUT_AC);Wait(100);
GO;Wait(180);
traceSLstop(); //FG間の左トレース
turn_right(20);
traceLstop(); //GL間を左トレース
turn_hright;Wait(20);Off(OUT_AC);Wait(50); //缶を...
GO;Wait(50);Off(OUT_AC);Wait(100); /...
while(SENSOR_2>THRESHOLD-5){BACK;};Off(OUT_AC);Wait(1...
OnFwd(OUT_B);Wait(20);
turn_hright;Wait(45);
GO;Wait(110);while(SENSOR_2>THRESHOLD-7){GO;}; //K...
GO;Wait(25);
turn_hright;Wait(50);
traceRstop(); //Cまで右トレース
OnRev(OUT_B);Wait(30);Off(OUT_ABC);Wait(100);
STOPGOl; //C、直角(Dの上)間を左トレース
Wait(20);
STOPGOr; //直角、D間の右トレース
turn_hleft;Wait(20); //缶を置く位置を調整
GO;Wait(30); //缶を置く
Off(OUT_ABC);Wait(100); //終了!!
}
*結果 [#m23e724e]
**結果(動画サイトも) [#q00aee69]
ロボコンの全体の順位は皆のおかげもあって3位、得点は5点。...
今回は親機が最初の交差点認識を把握できなかったことで失敗...
練習の動画であるが動きだけでも伝えたいと思う。
https://youtu.be/Pok_ylCWW7A
**原因 [#daedfcbb]
-戦略上難しいとしている高い位置からの缶の落下、そして着地...
-電圧による効果によっての進み具合の変化。これを防ぐことは...
-動きの速いこと(動きの荒さ)からくる誤差。時間で動くとき...
-場所による光の加減で光センサーのとらえ方の違い。練習の時...
-2台の調子が合わないことしか起きない。どちらも正確性があ...
練習では子機の方が失敗率が高かったのだが、本番では完璧な...
**感想 [#yf6f965c]
このロボコンで技術が高まり成長できたことを本当にうれしく...
終了行:
R3R4(2班)
課題3
ミニロボコン
目次
#contents
*課題内容(ミニロボコン) [#zff4a973]
**課題:空き缶運搬ロボット [#q04b5c7a]
空き缶を分別して所定の場所に運ぶ。
#ref(./kadai3.png,90%,課題図)
フィールドの説明
-フィールドは課題2で使用した紙を使用する。
-2種類の空き缶(Aタイプ,Bタイプ)をそれぞれ3個づつ用意し、...
-空き缶には色をつけたり文字や記号を書いてもよい。あるいは...
**ルール [#v605283e]
基本ルール
-競技時間は審判が続行不能と判断するまで、あるいはリタイア...
-図の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点)
**各係 [#qc6e5d98]
-司会・審判 (2人)・司会進行、開始・終了の合図と基本得点...
-得点の集計係 (1人)・技術点を集計する
-採点の報告係 (各チーム1人)・採点した点数を集計係に連絡する
*機体説明 [#v8384b4e]
#ref(./kitaiab.jpg,90%,親と子)
親機と子機と命名しました。2台で協力するところや大きさ的に...
**機体1(子機) [#w934251b]
#ref(./kitaib1.jpg,90%,モータ使用箇所)
モータA,Bで左右のタイヤを回す。モータCでアームを動かす。...
#ref(./kitaib2.jpg,90%,機構)
-赤枠、缶の1段目を支えるように3/4方向(横と後ろ、すなわ...
-青枠、缶の2段目をつかむ
缶の詰みあがった高さと相談する。
#ref(./kitaib3.jpg,90%,使われ方)
上図の様に1段目を支え、2段目をつかむ。
**機体2(親機おやき) [#k6c75f89]
#ref(./kitaia2.jpg,90%,つかむ箇所)
子機とつかむ機構は同じでモータBが動くと両側のアームが同時...
#ref(./kitaia3.jpg,90%,使われ方)
子機と形はほとんど同じで掴んだ時に1,2段目の缶を支え、3...
*戦略 [#hb757405]
**方針 [#a84ac806]
RISでは珍しい機体を2台つくり、そしてお互いの連携で高得点...
高得点を目指すには
-すべての缶を入れる
-2台で連携する
-移動、つかむ、積む、運ぶ
これらを行うものを考えた。
**案(アイデア) [#za6ebc11]
移動では機体がライントレースするものなので課題2を参考。...
#ref(./senryaku.jpg,90%,抱擁)
緑縁のように親機(右)と子機(左)でしっかり2、3段目を...
まるで親子の抱擁に見えませんか?
#ref(./senryaku1.jpg,90%,子離れ)
子機が後ろに下がる。
#ref(./senryaku2.jpg,90%,老後)
親機、子機が缶をはなすと見事に2段の積まれた缶と1段だけ...
#ref(./senryaku3.jpg,90%,缶の加工)
積まれた缶を引っ張り抜くときに缶同士ができるだけ影響しな...
#ref(./senryaku5.jpg,30%,ルート)
缶を置いたり運んだりするのに最適なルートが上記だと考えた...
-・オレンジ線(時間で動く)・青、緑線(子機がライントレー...
-左下スタートが子機、右下スタートが親機
*プログラムについて [#jfae31c8]
親機と子機でプログラムを書いた人が違うので書き方も違う
**親機 [#wa343a73]
***define [#v599ea6c]
#define turn_left Off(OUT_AC);OnFwd(OUT_A);OnRev(OUT_C);...
#define turn_right Off(OUT_AC);OnFwd(OUT_C);OnRev(OUT_A)...
#define run_left Off(OUT_AC);OnFwd(OUT_A);Wait(2);Off(OU...
#define run_right Off(OUT_AC);OnFwd(OUT_C);Wait(2);Off(O...
#define arm_open Off(OUT_B);OnRev(OUT_B);Wait(20);Off(OU...
#define arm_close Off(OUT_B);OnFwd(OUT_B);
#define turn_left_free OnFwd(OUT_A);OnRev(OUT_C);
#define turn_right_free OnFwd(OUT_C);OnRev(OUT_A);
#define turn_left_small OnFwd(OUT_A);
#define turn_right_small OnFwd(OUT_C);
turn_left,turn_left_freeは両方のタイヤを回転させて左へ曲...
turn_left_small,run_leftはタイヤ1つだけ回転し回転の内側...
右に曲がる,turn_right,turn_right_free,turn_right_small...
arm_openで空き缶を掴むためのアームを開き,arm_closeでアー...
***subルーチン [#zfd807c2]
sub follow_line_right(){ClearTimer(0);
while(FastTimer(0)<18)
if(SENSOR_2<38){
turn_right; // センサー2が黒を認識し...
}else if(SENSOR_2<42){
run_right;ClearTimer(0); // センサー2がグレーっぽい黒...
}else if(SENSOR_2<47){
OnFwd(OUT_AC);ClearTimer(0); // センサー2がグレーを認...
}else if(SENSOR_2<50){
run_left;ClearTimer(0); // センサー2がグレーっぽい白...
}else if(SENSOR_2<55){
turn_left;ClearTimer(0); // センサー2が白を認識した...
}}
上のサブルーチンは黒線の右側をライントレースするプログラ...
sub follow_line_left(){ClearTimer(0);
while(FastTimer(0)<18)
if(SENSOR_2<38){
turn_left; // センサー2が黒を認識した...
}else if(SENSOR_2<42){
run_left;ClearTimer(0); // センサー2がグレーっぽい黒...
}else if(SENSOR_2<47){
OnFwd(OUT_AC);ClearTimer(0); // センサー2がグレーを...
}else if(SENSOR_2<50){
run_right;ClearTimer(0); // センサー2がグレーっぽい白...
}else if(SENSOR_2<55){
turn_right;ClearTimer(0); // センサー2が白を認識した...
}}
上のプログラムは黒線の左側をライントレースするプログラム...
***task mainについて [#l73eda2c]
task main()
{
OnFwd(OUT_AC);
Wait(200);
Off(OUT_AC); // A'からHに...
SetSensor(SENSOR_2,SENSOR_LIGHT);
follow_line_left(); // Hまで黒線左側をラ...
turn_right_small;
Wait(90);
turn_right_free;
Wait(15);
Off(OUT_AC); // HからIに方向転換
follow_line_left(); // HからIに進む 黒線...
Off(OUT_AC);
Wait(300); // "こき"の動きとの時間...
turn_right_free;
Wait(10);
Off(OUT_AC); // Yに体が向くように少し...
OnFwd(OUT_AC);
Wait(40); // IからYまで直進
Off(OUT_AC);
arm_close; // 缶を掴む
Wait(1000); // 相手が2段目の空き缶を抜くまで...
arm_open; // 3段目の空き缶をアームを放すこ...
OnFwd(OUT_AC);
Wait(25);
Off(OUT_AC); // 缶をがっちり抱える
turn_right_small;
Wait(110);
Off(OUT_AC); // Yで右に90°方向転換
OnFwd(OUT_AC);
Wait(30); // 黒線左側をライントレースできる...
Off(OUT_AC);
follow_line_left(); // 黒線左側をライントレースし,...
turn_left_small;
Wait(30);
turn_left_free;
Wait(35); // Gで左へ曲がる
Off(OUT_AC);
Wait(1500); // "こき"が通り過ぎるまで待つ
OnFwd(OUT_AC);
Wait(120);
Off(OUT_AC); // 缶をおいていく
OnRev(OUT_AC);
Wait(120); // Gに戻る
turn_right_free;
Wait(70);
Off(OUT_AC); // 右に回転して軌道に戻る
follow_line_left(); // ライントレース
Off(OUT_AC);
Wait(300); // "こき"の動きとの時間合わせ
turn_right_free;
Wait(10);
Off(OUT_AC); // 少し右に曲がることでXに体を...
OnFwd(OUT_AC);
Wait(20); // 空き缶まで行く
Off(OUT_AC);
Wait(100); // "こき"との時間合わせ
arm_close; // 缶を掴む
Wait(500); // 相手が2段目の空き缶を抜くまで待機
arm_open; // 3段目の空き缶をアームを放すことで...
OnRev(OUT_AC);
Wait(120);
Off(OUT_AC);
Wait(100); // XからG辺りまで後退
turn_right_free;
Wait(75);
Off(OUT_AC);
Wait(200); // 右へ曲がる
OnFwd(OUT_AC);
Wait(200);
Off(OUT_AC);
Wait(200); // 直進
turn_left_free;
Wait(75);
Off(OUT_AC);
Wait(200); // 左へ曲がる
OnFwd(OUT_AC);
Wait(260);
Off(OUT_AC);
Wait(200); // A'で空き缶を抱える
turn_left_free;
Wait(85);
Off(OUT_AC);
Wait(200); // A'で左へ曲がる
OnFwd(OUT_AC);
Wait(100);
Off(OUT_AC); // 空き缶をXに置く
OnRev(OUT_AC);
Wait(100);
Off(OUT_AC); // Xで少し後退
Off(OUT_AC); //終了
}
**子機 [#c61ecec3]
***define [#me2920e9]
#define THRESHOLD 48 //基準(中間値)となる光の値(...
#define CROSSTIMER 6 //黒線を6回検知で止まるという値
#define GO OnFwd(OUT_AC); //まっすぐ進む
#define BACK OnRev(OUT_AC); //後ろ
#define turn_left OnFwd(OUT_A);Off(OUT_C); //左回り
#define turn_right Off(OUT_A);OnFwd(OUT_C); //右回り
#define turn_hleft OnFwd(OUT_A);OnRev(OUT_C); //右旋回
#define turn_hright OnRev(OUT_A);OnFwd(OUT_C); //左旋回
#define STEP 1 //0.01秒(if内で使用)
#define tunoTIME 200 //アームを動かす時間
***subルーチン [#madf572d]
黒<THRESHOLD-7<黒灰<THRESHOLD-3<灰<THRESHOLD+3<白...
sub traceLstop() //L(左)をトレースして黒灰を6回検知...
{
int n=0;
while(n<CROSSTIMER){
if(SENSOR_2<THRESHOLD-3){
turn_left;n++;
}else{ if(SENSOR_2<THRESHOLD+3){
GO;
}else if(SENSOR_2<THRESHOLD+7){
turn_right;
}else{
turn_hright;
}n=0;
}
Wait(STEP);
}
PlaySound(SOUND_DOWN);
}
sub traceRstop() //R(右)をトレースして黒灰を6回検...
{
int n=0;
while(n<CROSSTIMER){
if(SENSOR_2<THRESHOLD-3){
turn_right;n++;
}else{ if(SENSOR_2<THRESHOLD+3){
GO;
}else if(SENSOR_2<THRESHOLD+7){
turn_left;
}else{
turn_hleft;
}n=0;
}
Wait(STEP);
}
PlaySound(SOUND_DOWN);
}
sub traceSLstop() //L(左)をトレースして黒灰を6回検...
{
int n=0;
while(n<6){
if(SENSOR_2<THRESHOLD-3){
turn_left;n++;
}else{ if(SENSOR_2<THRESHOLD+3){
GO;
}else{
turn_right;
}n=0;
}
Wait(STEP);
}
PlaySound(SOUND_DOWN);
}//
黒で旋回そして止まるためのカウントにすると止まりきらなく...
STEPはif内の動作を1回あたり0.01秒行うための時間
各if終了後に音楽を入れることで交差点の判断の有無を確認し...
subを用いたdefine
#define STOPGOr while(SENSOR_2<THRESHOLD+7){GO;} traceRs...
#define STOPGOl while(SENSOR_2<THRESHOLD+7){GO;} traceLs...
***task mainについて [#ad0dcd96]
task main()
{
SetPower(OUT_B,3); //モータBの力を3にする
SetSensor(SENSOR_2,SENSOR_LIGHT); //センサーを...
GO;Wait(80); //地点Aの抜け出し
traceLstop();
Off(OUT_AC);Wait(350); //C交差点止まる
GO;Wait(20);
turn_hright;Wait(110);
traceRstop();
Off(OUT_AC);Wait(10); //K交差点止まる
turn_hleft;Wait(15); //つかむため軌道修正
Off(OUT_AC);Wait(200);
GO;Wait(90);Off(OUT_AC); //...
OnFwd(OUT_B);Wait(tunoTIME);Off(OUT_AC);Wait(100); ...
BACK;Wait(180); Off(OUT_AC);Wait(600); /...
OnRev(OUT_B);Wait(tunoTIME);Off(OUT_B); //缶...
GO;Wait(180);Off(OUT_AC); ...
while(SENSOR_2>THRESHOLD-7){BACK;}; //K地点...
turn_hleft;Wait(50);while(SENSOR_2>THRESHOLD-7){turn...
//CKの右側を...
traceRstop(); //CKの右トレース
GO;Wait(30);
turn_hright;Wait(100);
traceRstop(); //Cの右直線のトレース
turn_right;Wait(185);
Off(OUT_AC);Wait(10);
while(SENSOR_2>THRESHOLD-7){GO;}; //Eの右直...
GO;Wait(40);
while(SENSOR_2>THRESHOLD-7){turn_hright;};
Off(OUT_AC);Wait(400);
GO;Wait(80);Off(OUT_AC);Wait(150); //Yの...
OnFwd(OUT_B);Wait(tunoTIME);Off(OUT_AC);Wait(200); /...
BACK;Wait(90);
turn_hleft;Wait(85);Off(OUT_AC);Wait(100);
OnRev(OUT_B);Wait(tunoTIME);Off(OUT_B);Wait(30); ...
GO;Wait(165);BACK;Wait(165);Off(OUT_AC);Wait(50); ...
turn_hright;Wait(90);Off(OUT_AC);Wait(100);
GO;Wait(180);
traceSLstop(); //FG間の左トレース
turn_right(20);
traceLstop(); //GL間を左トレース
turn_hright;Wait(20);Off(OUT_AC);Wait(50); //缶を...
GO;Wait(50);Off(OUT_AC);Wait(100); /...
while(SENSOR_2>THRESHOLD-5){BACK;};Off(OUT_AC);Wait(1...
OnFwd(OUT_B);Wait(20);
turn_hright;Wait(45);
GO;Wait(110);while(SENSOR_2>THRESHOLD-7){GO;}; //K...
GO;Wait(25);
turn_hright;Wait(50);
traceRstop(); //Cまで右トレース
OnRev(OUT_B);Wait(30);Off(OUT_ABC);Wait(100);
STOPGOl; //C、直角(Dの上)間を左トレース
Wait(20);
STOPGOr; //直角、D間の右トレース
turn_hleft;Wait(20); //缶を置く位置を調整
GO;Wait(30); //缶を置く
Off(OUT_ABC);Wait(100); //終了!!
}
*結果 [#m23e724e]
**結果(動画サイトも) [#q00aee69]
ロボコンの全体の順位は皆のおかげもあって3位、得点は5点。...
今回は親機が最初の交差点認識を把握できなかったことで失敗...
練習の動画であるが動きだけでも伝えたいと思う。
https://youtu.be/Pok_ylCWW7A
**原因 [#daedfcbb]
-戦略上難しいとしている高い位置からの缶の落下、そして着地...
-電圧による効果によっての進み具合の変化。これを防ぐことは...
-動きの速いこと(動きの荒さ)からくる誤差。時間で動くとき...
-場所による光の加減で光センサーのとらえ方の違い。練習の時...
-2台の調子が合わないことしか起きない。どちらも正確性があ...
練習では子機の方が失敗率が高かったのだが、本番では完璧な...
**感想 [#yf6f965c]
このロボコンで技術が高まり成長できたことを本当にうれしく...
ページ名: