2018a/Member/haya/Mission3
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2018a/Member]]
*課題3[#r414c566]
#ref(2018a-mission3.png)
基本ルール
-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点)
*ロボット [#y87afe7f]
**ロボットの構造 [#w076fa4c]
#ref(yoko.jpg)
#ref(hidari.jpg)
横側から
-NXT同士をつなぐため、横側から補強してとれないようにして...
#ref(sita.jpg)
下側から
-ギアでタイやが真ん中に来るようにしている。
-前部分に赤外線センサーを取り付けることで、ライトトレース...
#ref(syoumen.jpg)
正面から
-ギアを使って、重いハサミを持ち上げている。
#ref(usiro.jpg)
後ろから
-NXTの本体を上下に2つ重ね、上にハサミとハサミを上下させ...
**ロボットの工夫した点 [#t10f449c]
-ハサミに小さなタイヤ、ゴムをつけることで空き缶をつかんだ...
-ハサミを上下させるモーターにギアをつけることで、重いモー...
-タイヤを重心付近にすることで、ロボットの揺れが大きくなら...
-NXTの本体を縦に2つつなげることによって二段目の空き缶を...
*プログラム [#jcc08893]
**戦略 [#c6753242]
Y側の2段目の空き缶をハサミでたたき落とし、X側の2段目の...
**マスター側のプログラム [#k8a53ed5]
#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...
#define trase_L {if(SENSOR_2<36){llt; n++;} else if(SE...
#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);
}
**スレイブ側のプログラム [#j26ed415]
#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...
#define trase_L {if(SENSOR_2<35){llt; n++;} else if(SE...
#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;
}
}
}
*プログラムの工夫した点 [#z9a35e5e]
(前提)「Aタイプの空き缶を円Y内に、Bタイプの空き缶を円X...
-マスターとスレイブにプログラムを分けることで操作できるモ...
-空き缶の近くまでライトトレースすることで空き缶の位置を認...
-ライトトレースで空き缶の位置を認識させるため、超音波セン...
-満点を狙わずに1,2段目を確実に入れられるようにプログラ...
-円Y内の1.2段目の空き缶をハサミでたたき落とすことによ...
*結果 [#u9d81417]
下から2番目だった。つまり、とても悪かった。空き缶は1つ...
*反省点 [#c674a10e]
ロボットもプログラムも発想は悪くなかったと思う。その代わ...
1、ルールを読み間違えないようにする。どれだけ頑張っても...
2、全員でロボットを作り、全員でプログラムを作る。ロボッ...
3、ロボットやプログラムの工夫点を他人に上手に説明する技...
終了行:
[[2018a/Member]]
*課題3[#r414c566]
#ref(2018a-mission3.png)
基本ルール
-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点)
*ロボット [#y87afe7f]
**ロボットの構造 [#w076fa4c]
#ref(yoko.jpg)
#ref(hidari.jpg)
横側から
-NXT同士をつなぐため、横側から補強してとれないようにして...
#ref(sita.jpg)
下側から
-ギアでタイやが真ん中に来るようにしている。
-前部分に赤外線センサーを取り付けることで、ライトトレース...
#ref(syoumen.jpg)
正面から
-ギアを使って、重いハサミを持ち上げている。
#ref(usiro.jpg)
後ろから
-NXTの本体を上下に2つ重ね、上にハサミとハサミを上下させ...
**ロボットの工夫した点 [#t10f449c]
-ハサミに小さなタイヤ、ゴムをつけることで空き缶をつかんだ...
-ハサミを上下させるモーターにギアをつけることで、重いモー...
-タイヤを重心付近にすることで、ロボットの揺れが大きくなら...
-NXTの本体を縦に2つつなげることによって二段目の空き缶を...
*プログラム [#jcc08893]
**戦略 [#c6753242]
Y側の2段目の空き缶をハサミでたたき落とし、X側の2段目の...
**マスター側のプログラム [#k8a53ed5]
#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...
#define trase_L {if(SENSOR_2<36){llt; n++;} else if(SE...
#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);
}
**スレイブ側のプログラム [#j26ed415]
#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...
#define trase_L {if(SENSOR_2<35){llt; n++;} else if(SE...
#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;
}
}
}
*プログラムの工夫した点 [#z9a35e5e]
(前提)「Aタイプの空き缶を円Y内に、Bタイプの空き缶を円X...
-マスターとスレイブにプログラムを分けることで操作できるモ...
-空き缶の近くまでライトトレースすることで空き缶の位置を認...
-ライトトレースで空き缶の位置を認識させるため、超音波セン...
-満点を狙わずに1,2段目を確実に入れられるようにプログラ...
-円Y内の1.2段目の空き缶をハサミでたたき落とすことによ...
*結果 [#u9d81417]
下から2番目だった。つまり、とても悪かった。空き缶は1つ...
*反省点 [#c674a10e]
ロボットもプログラムも発想は悪くなかったと思う。その代わ...
1、ルールを読み間違えないようにする。どれだけ頑張っても...
2、全員でロボットを作り、全員でプログラムを作る。ロボッ...
3、ロボットやプログラムの工夫点を他人に上手に説明する技...
ページ名: