2018a/Member/mine/Mission3
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2018a/Member]]
#contents
*課題:空き缶運搬ロボット [#w0f2c59a]
** フィールドの説明 [#t464ee2d]
#ref(2018a/Member/mine/Mission3/2018a-mission3.png,50%,コ...
-フィールドは課題2で使用した紙を使用する。
-2種類の空き缶(Aタイプ,Bタイプ)をそれぞれ3個づつ用意し、...
-空き缶には色をつけたり文字や記号を書いてもよい。あるいは...
**基本ルール [#kd743856]
-競技時間は審判が続行不能と判断するまで、あるいはリタイア...
-図のA地点または(および)A'地点からスタートする。ただし...
-Aタイプの空き缶を円Y内に、Bタイプの空き缶を円X内に運ぶ。
-開始の合図から5秒以内にスタートボタンを押す作業を完了す...
-競技が終了するまで、ロボットに触ったり人間が遠隔で操作し...
-途中でうまく動かなくなった場合、1回限り再スタートするこ...
**基本得点の計算方法 [#d4930149]
-運んだ空き缶の数×3点
-空き缶を積み重ねて置くことができば場合、2段目の空き缶一...
-円内からはみ出している場合、半分以下なら1点減点、半分以...
-間違った円内に空き缶を置いた場合は、1個につき1点減点。
-間違った円内の2段目に空き缶を置いた場合は1個につき3点減...
**技術点の計算方法 [#d264d68d]
-以下の動作の精度・スピード・確実性などを含めた技術的な工...
+空き缶を探し取りにいくまでの動作 (3点)
+空き缶を掴む動作 (3点)
+空き缶を運ぶ動作 (2点)
+空き缶を置く動作 (2点)
+空き缶を積む動作 (3点)
+2台のRCXまたはNXT、EV3の連携の良さ(2点)
+自立型のロボットとしての形や動作の美しさ、斬新さ(2点)
+その他 (3点)
*機体 [#yf80c697]
#ref(2018a/Member/mine/Mission3/IMG_2864.JPG,50%,機体)
光センサでライントレースを基本として動かせるように二輪と...
#ref(2018a/Member/mine/Mission3/IMG_2865.JPG,50%,コース)
機体は2台を同時に動かしそれらの連携によって缶を動かす方...
モータを4つ使うため、機体は本体を重ね合わせた形になって...
アーム部分はミッション2のものをそのまま用いており、クワ...
#ref(2018a/Member/mine/Mission3/IMG_2866.JPG,50%,機体)
なるべくブレが出ないようにタイヤ周りとセンサーとの位置調...
#ref(2018a/Member/mine/Mission3/IMG_2867.JPG,50%,機体)
ハサミは缶の摩擦を頼りにしているので輪ゴムをつけるととも...
#ref(2018a/Member/mine/Mission3/IMG_2868.JPG,50%,機体)
下にある本体がマスター側で、足となるモータとセンサ、ハサ...
上の本体がスレイブであり、ハサミの開閉のみを担当している。
*作戦 [#k4d6cbd4]
#ref(2018a/Member/mine/Mission3/2018a-mission3-1.png,50%,...
緑の矢印の順でライントレースをしてXにある缶をYに持ってい...
ライントレース途中の小さなカーブ二つ目を通る際に、缶の塔...
満点は狙えないのだが、確実に一点以上を出せるようになって...
予行練習では、最高で6点を出すこともできた。
その後の試行錯誤でも電池残量にあまり影響なく、一定以上の...
積み重ねられるかどうかはかなりの運要素であったが、そこを...
*プログラム [#h14cdcee]
**マスター(ライントレース、ハサミの上げ下げ) [#i35369e3]
#define CONN 1 // スレーブの接続番号
#define SIGNALON 11 // ハサミで持ち上げるためのメッセ...
#define SIGNALOFF 12 // 缶を落とすためのメッセージ
#define llt OnFwd(OUT_A,50); OnRev(OUT_C,30); Wait(1);//...
#define lrt OnRev(OUT_A,30); OnFwd(OUT_C,50); Wait(1);/...
#define ternleft OnFwd(OUT_A,50); OnRev(OUT_C,10);//左...
#define ternright OnRev(OUT_A,10); OnFwd(OUT_C,50);//右...
#define go OnFwd(OUT_A,50); OnFwd(OUT_C,50);//直進する
#define back OnRev(OUT_A,50); OnRev(OUT_C,50);//後退する
#define trase_R {if(SENSOR_2<36){lrt; n++;} else if(SE...
n=0;}} //右側トレース
#define trase_L {if(SENSOR_2<36){llt; n++;} else if(SE...
n=0;}} //左側トレース
#define open RotateMotor(OUT_B,25,80); Off(OUT_B);Wait(1...
#define close RotateMotor(OUT_B,25,-80); Off(OUT_B);Wait...
#define UP RotateMotor(OUT_C,40,90); Off(OUT_C); Wait(10...
#define DOWN RotateMotor(OUT_C,20,-100);Off(OUT_C); Wait...
task main()
{
SetSensorLowspeed(S1);
SetSensorLight(S2);
int n=0;
while(n<=100)
{ // H
trase_R;
}
Off(OUT_AC);
Wait(1000);
OnFwdSync(OUT_AC, 50, 0);
Wait(500);
Off(OUT_AC);
n=0;
while(n<=100)
{ // s2
trase_R;
}
Off(OUT_AC);
Wait(1000);
OnFwd(OUT_AC,50); //線を...
Wait(500);
n=0;
while(n<=90)
{
trase_L ...
}
Off(OUT_AC);
Wait(1000);
RotateMotor(OUT_A, 60, 300);
Off(OUT_AC);
n=0;
while(n<=150)
{ //十字路で止...
trase_R
}
Off(OUT_AC);
Wait(1000);
RotateMotor(OUT_C, 60, 300);
Off(OUT_AC);
n=0;
while(n<=70)
{ //Fで止まる
trase_L
}
Off(OUT_AC);
close;
SendRemoteNumber(CONN,MAILBOX1,SIGNALON); //...
Off(OUT_ABC);
Wait(3000);
OnRev(OUT_AC,50); //バ...
Wait(1000);
Off(OUT_AC);
RotateMotorEx(OUT_AC, 75, 1860, 100, true, false); //振...
Off(OUT_AC);
n=0;
while(n<=70)
{ //Gで止まる
trase_L
}
Off(OUT_AC);
RotateMotorEx(OUT_AC, 75, 400, -100, true, false );
Off(OUT_AC);
SendRemoteNumber(CONN,MAILBOX1,SIGNALOFF);
Off(OUT_ABC);
Wait(3000);
open;
Off(OUT_ABC);
Wait(3000);
}
**スレイブ (ハサミの開閉)[#l110beac]
#define CONN 1 // スレーブの接続番号
#define SIGNALON 11 // ハサミで持ち上げるためのメッセ...
#define SIGNALOFF 12 // 缶を落とすためのメッセージ
#define llt OnFwd(OUT_A,50); OnRev(OUT_C,30); Wait(1);//...
#define lrt OnRev(OUT_A,30); OnFwd(OUT_C,50); Wait(1);/...
#define ternleft OnFwd(OUT_A,50); OnRev(OUT_C,10);//左...
#define ternright OnRev(OUT_A,10); OnFwd(OUT_C,50);//右...
#define go OnFwd(OUT_A,50); OnFwd(OUT_C,50);//直進する
#define back OnRev(OUT_A,50); OnRev(OUT_C,50);//後退する
#define trase_R {if(SENSOR_2<35){lrt; n++;} else if(SE...
n=0;}}
#define trase_L {if(SENSOR_2<35){llt; n++;} else if(SE...
n=0;}}
#define open RotateMotor(OUT_B,25,85); Off(OUT_B);Wait(1...
#define close RotateMotor(OUT_B,25,-85); Off(OUT_B);Wait...
#define UP RotateMotor(OUT_C,40,90); Off(OUT_C); Wait(10...
#define DOWN RotateMotor(OUT_C,20,-90);Off(OUT_C); Wait(...
task main ()
{
int msg; // 受け取った値を格納する変数
while (true) {
ReceiveRemoteNumber(MAILBOX1,true,msg); //
if (msg == SIGNALON) {
UP;
}
if (msg == SIGNALOFF) {
DOWN;
}
}
}
*結果と反省 [#m4938aad]
本番当日には立ち会うことができなかったのだが、メンバーか...
終了行:
[[2018a/Member]]
#contents
*課題:空き缶運搬ロボット [#w0f2c59a]
** フィールドの説明 [#t464ee2d]
#ref(2018a/Member/mine/Mission3/2018a-mission3.png,50%,コ...
-フィールドは課題2で使用した紙を使用する。
-2種類の空き缶(Aタイプ,Bタイプ)をそれぞれ3個づつ用意し、...
-空き缶には色をつけたり文字や記号を書いてもよい。あるいは...
**基本ルール [#kd743856]
-競技時間は審判が続行不能と判断するまで、あるいはリタイア...
-図のA地点または(および)A'地点からスタートする。ただし...
-Aタイプの空き缶を円Y内に、Bタイプの空き缶を円X内に運ぶ。
-開始の合図から5秒以内にスタートボタンを押す作業を完了す...
-競技が終了するまで、ロボットに触ったり人間が遠隔で操作し...
-途中でうまく動かなくなった場合、1回限り再スタートするこ...
**基本得点の計算方法 [#d4930149]
-運んだ空き缶の数×3点
-空き缶を積み重ねて置くことができば場合、2段目の空き缶一...
-円内からはみ出している場合、半分以下なら1点減点、半分以...
-間違った円内に空き缶を置いた場合は、1個につき1点減点。
-間違った円内の2段目に空き缶を置いた場合は1個につき3点減...
**技術点の計算方法 [#d264d68d]
-以下の動作の精度・スピード・確実性などを含めた技術的な工...
+空き缶を探し取りにいくまでの動作 (3点)
+空き缶を掴む動作 (3点)
+空き缶を運ぶ動作 (2点)
+空き缶を置く動作 (2点)
+空き缶を積む動作 (3点)
+2台のRCXまたはNXT、EV3の連携の良さ(2点)
+自立型のロボットとしての形や動作の美しさ、斬新さ(2点)
+その他 (3点)
*機体 [#yf80c697]
#ref(2018a/Member/mine/Mission3/IMG_2864.JPG,50%,機体)
光センサでライントレースを基本として動かせるように二輪と...
#ref(2018a/Member/mine/Mission3/IMG_2865.JPG,50%,コース)
機体は2台を同時に動かしそれらの連携によって缶を動かす方...
モータを4つ使うため、機体は本体を重ね合わせた形になって...
アーム部分はミッション2のものをそのまま用いており、クワ...
#ref(2018a/Member/mine/Mission3/IMG_2866.JPG,50%,機体)
なるべくブレが出ないようにタイヤ周りとセンサーとの位置調...
#ref(2018a/Member/mine/Mission3/IMG_2867.JPG,50%,機体)
ハサミは缶の摩擦を頼りにしているので輪ゴムをつけるととも...
#ref(2018a/Member/mine/Mission3/IMG_2868.JPG,50%,機体)
下にある本体がマスター側で、足となるモータとセンサ、ハサ...
上の本体がスレイブであり、ハサミの開閉のみを担当している。
*作戦 [#k4d6cbd4]
#ref(2018a/Member/mine/Mission3/2018a-mission3-1.png,50%,...
緑の矢印の順でライントレースをしてXにある缶をYに持ってい...
ライントレース途中の小さなカーブ二つ目を通る際に、缶の塔...
満点は狙えないのだが、確実に一点以上を出せるようになって...
予行練習では、最高で6点を出すこともできた。
その後の試行錯誤でも電池残量にあまり影響なく、一定以上の...
積み重ねられるかどうかはかなりの運要素であったが、そこを...
*プログラム [#h14cdcee]
**マスター(ライントレース、ハサミの上げ下げ) [#i35369e3]
#define CONN 1 // スレーブの接続番号
#define SIGNALON 11 // ハサミで持ち上げるためのメッセ...
#define SIGNALOFF 12 // 缶を落とすためのメッセージ
#define llt OnFwd(OUT_A,50); OnRev(OUT_C,30); Wait(1);//...
#define lrt OnRev(OUT_A,30); OnFwd(OUT_C,50); Wait(1);/...
#define ternleft OnFwd(OUT_A,50); OnRev(OUT_C,10);//左...
#define ternright OnRev(OUT_A,10); OnFwd(OUT_C,50);//右...
#define go OnFwd(OUT_A,50); OnFwd(OUT_C,50);//直進する
#define back OnRev(OUT_A,50); OnRev(OUT_C,50);//後退する
#define trase_R {if(SENSOR_2<36){lrt; n++;} else if(SE...
n=0;}} //右側トレース
#define trase_L {if(SENSOR_2<36){llt; n++;} else if(SE...
n=0;}} //左側トレース
#define open RotateMotor(OUT_B,25,80); Off(OUT_B);Wait(1...
#define close RotateMotor(OUT_B,25,-80); Off(OUT_B);Wait...
#define UP RotateMotor(OUT_C,40,90); Off(OUT_C); Wait(10...
#define DOWN RotateMotor(OUT_C,20,-100);Off(OUT_C); Wait...
task main()
{
SetSensorLowspeed(S1);
SetSensorLight(S2);
int n=0;
while(n<=100)
{ // H
trase_R;
}
Off(OUT_AC);
Wait(1000);
OnFwdSync(OUT_AC, 50, 0);
Wait(500);
Off(OUT_AC);
n=0;
while(n<=100)
{ // s2
trase_R;
}
Off(OUT_AC);
Wait(1000);
OnFwd(OUT_AC,50); //線を...
Wait(500);
n=0;
while(n<=90)
{
trase_L ...
}
Off(OUT_AC);
Wait(1000);
RotateMotor(OUT_A, 60, 300);
Off(OUT_AC);
n=0;
while(n<=150)
{ //十字路で止...
trase_R
}
Off(OUT_AC);
Wait(1000);
RotateMotor(OUT_C, 60, 300);
Off(OUT_AC);
n=0;
while(n<=70)
{ //Fで止まる
trase_L
}
Off(OUT_AC);
close;
SendRemoteNumber(CONN,MAILBOX1,SIGNALON); //...
Off(OUT_ABC);
Wait(3000);
OnRev(OUT_AC,50); //バ...
Wait(1000);
Off(OUT_AC);
RotateMotorEx(OUT_AC, 75, 1860, 100, true, false); //振...
Off(OUT_AC);
n=0;
while(n<=70)
{ //Gで止まる
trase_L
}
Off(OUT_AC);
RotateMotorEx(OUT_AC, 75, 400, -100, true, false );
Off(OUT_AC);
SendRemoteNumber(CONN,MAILBOX1,SIGNALOFF);
Off(OUT_ABC);
Wait(3000);
open;
Off(OUT_ABC);
Wait(3000);
}
**スレイブ (ハサミの開閉)[#l110beac]
#define CONN 1 // スレーブの接続番号
#define SIGNALON 11 // ハサミで持ち上げるためのメッセ...
#define SIGNALOFF 12 // 缶を落とすためのメッセージ
#define llt OnFwd(OUT_A,50); OnRev(OUT_C,30); Wait(1);//...
#define lrt OnRev(OUT_A,30); OnFwd(OUT_C,50); Wait(1);/...
#define ternleft OnFwd(OUT_A,50); OnRev(OUT_C,10);//左...
#define ternright OnRev(OUT_A,10); OnFwd(OUT_C,50);//右...
#define go OnFwd(OUT_A,50); OnFwd(OUT_C,50);//直進する
#define back OnRev(OUT_A,50); OnRev(OUT_C,50);//後退する
#define trase_R {if(SENSOR_2<35){lrt; n++;} else if(SE...
n=0;}}
#define trase_L {if(SENSOR_2<35){llt; n++;} else if(SE...
n=0;}}
#define open RotateMotor(OUT_B,25,85); Off(OUT_B);Wait(1...
#define close RotateMotor(OUT_B,25,-85); Off(OUT_B);Wait...
#define UP RotateMotor(OUT_C,40,90); Off(OUT_C); Wait(10...
#define DOWN RotateMotor(OUT_C,20,-90);Off(OUT_C); Wait(...
task main ()
{
int msg; // 受け取った値を格納する変数
while (true) {
ReceiveRemoteNumber(MAILBOX1,true,msg); //
if (msg == SIGNALON) {
UP;
}
if (msg == SIGNALOFF) {
DOWN;
}
}
}
*結果と反省 [#m4938aad]
本番当日には立ち会うことができなかったのだが、メンバーか...
ページ名: