2015b/Member/sun16/Mission3
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2015b/Member]]
目次
#contents
*課題内容 [#g9939cd0]
課題は、ボールを離れた場所から缶に当てるロボットとボール...
#ref(./2015b-mission3.png,60%,課題)
*ロボットAについて [#k3ee3c7c]
ロボットAは、ボールを掴んで缶に当てる動作を行います。この...
#ref(./DSC_0248.JPG,60%,ロボット全体図)
↑ロボット全体図
**ボールを掴む・弾く動作 [#v79a51aa]
今回の課題では、ボールを缶に当てる動作が必要になるので、...
このロボットが完成するまで、様々な改良を加えていきました...
#ref(./DSC_0250.JPG,60%,動作説明)
↑ギア側面図
*ロボットBについて [#afae0e3e]
ロボットBは、缶に当たったボールを回収する動作をします。こ...
制作初期は、缶に当たったボールを探すことを目標としていま...
#ref(./DSC_0249.JPG,60%,ロボット全体図)
↑ロボット全体図
**ボールを回収する動作 [#rd0d793d]
ロボットBのボール回収動作は、RCXのキャタピラパーツを4つ使...
このロボットは、制作が発表当日に完了したということもあり...
#ref(./DSC_0251.JPG,60%,動作説明)
↑ギア側面図
*プログラム [#we877882]
プログラムは、同チームの2人が中心になって作成してくれま...
**ロボットA用 [#daa1aaa3]
ロボットAの基本戦略は、ボールの位置を角度センサにより正確...
所々、ライントレースをしたり、角度センサを利用して走行し...
//black = 43 < 48 < white = 52
//SENSOR_2 トレース
//SENSOR_3 物体探索
//TIMER(0) トレース
//TIMER(1) 光探索
/*共通機構*/
#define power(s) SetPower(OUT_A+OUT_C,s);
/*ライントレース用*/
#define shiki 48
#define tomaru(t) Off(OUT_AC);Wait(t);
#define FWD OnFwd(OUT_AC);
#define BACK OnRev(OUT_AC);
#define LEFT_t OnRev(OUT_A); OnFwd(OUT_C);
#define LEFT Off(OUT_A); OnFwd(OUT_C);
#define RIGHT_t OnRev(OUT_C); OnFwd(OUT_A);
#define RIGHT Off(OUT_C); OnFwd(OUT_A);
#define TMAX 20
/*ロボコン独自機構*/
#define open(t) OnFwd(OUT_B);Wait(t);//玉を扱う機構
#define close(t) OnRev(OUT_B);Wait(t);Off(OUT_B);
#define stop_B Off(OUT_B);
#define SUN 50//ランタンの輝度を表す数値
#define shoot power(2);open(15);Wait(10);close(15);
/*赤球迄のトレース*/
sub trace_0()
{
power(2);
ClearSensor(SENSOR_1);
while(1){
if (SENSOR_2 < shiki -7){
LEFT_t;
} else if (SENSOR_2 < shiki -4){
LEFT;
} else if (SENSOR_2 < shiki){
FWD;
} else if(SENSOR_2 < shiki +4){
RIGHT;
} else {
RIGHT_t;
}
if(SENSOR_1 > 335){
power(3);
close(50);
ClearSensor(SENSOR_1);
break;
}
}
}
/*赤球を放つ手前*/
sub trace_1()
{
ClearSensor(SENSOR_1);
close(10);
Off(OUT_B);
power(2);
while(1){
if (SENSOR_2 < shiki -7){
LEFT_t;
} else if (SENSOR_2 < shiki -4){
LEFT;
} else if (SENSOR_2 < shiki){
FWD;
} else if(SENSOR_2 < shiki +4){
RIGHT;
} else {
RIGHT_t;
}
if(SENSOR_1 > 62){
tomaru(10);
break;
}
}
}
sub trace_2()
{
power(1);
ClearSensor(SENSOR_1);
while(1){
if (SENSOR_2 < shiki -7){
RIGHT_t;
} else if (SENSOR_2 < shiki -4){
RIGHT;
} else if (SENSOR_2 < shiki){
FWD;
} else if(SENSOR_2 < shiki +4){
LEFT;
} else {
LEFT_t;
}
if(SENSOR_1 > 44){
power(3);
close(50);
ClearSensor(SENSOR_1);
break;
}
}
}
sub trace_3()
{
power(2);
ClearSensor(SENSOR_1);
while(1){
close(1);
Off(OUT_B);
if (SENSOR_2 < shiki -7){
RIGHT_t;
} else if (SENSOR_2 < shiki -4){
RIGHT;
} else if (SENSOR_2 < shiki){
FWD;
} else if(SENSOR_2 < shiki +4){
LEFT;
} else {
LEFT_t;
}
if(SENSOR_1 > 110){
power(3);
close(50);
ClearSensor(SENSOR_1);
break;
}
}
}
/*光源を探す*/
sub LIGHT()
{
PlaySound(SOUND_UP);
int sun_MAX = 0;
int sensor_MAX = 0;
close(20);
ClearSensor(SENSOR_1);
power(1);
while(SENSOR_1 < 85){
RIGHT_t;
if(SENSOR_3 > sun_MAX){
sun_MAX = SENSOR_3;
sensor_MAX = SENSOR_1;
}
}
tomaru(10);
LEFT_t;
until(SENSOR_1 < sensor_MAX);
tomaru(10);
}
task main()
{
/*回転センサ*/
SetSensor(SENSOR_1,SENSOR_ROTATION);
/*トレース用センサ*/
SetSensor(SENSOR_2,SENSOR_LIGHT);
/*探索用センサ*/
SetSensor(SENSOR_3,SENSOR_LIGHT);
FWD;Wait(150);
trace_0();//向かう
tomaru(50);
trace_1();//赤玉持ち
LIGHT();
shoot;
tomaru(20);
ClearSensor(SENSOR_1);
RIGHT_t;
until(SENSOR_1 > 28);
tomaru(10);
ClearSensor(SENSOR_1);
FWD;
until(SENSOR_1 > 26);
Off(OUT_B);
FWD;
until(SENSOR_2 < 48);
open(7);
Off(OUT_B);
trace_2();
tomaru(10);
FWD;Wait(100);
trace_3();
tomaru(10);
LIGHT();
shoot;
trace_1();
}
**ロボットB用 [#rdc01f14]
ロボットBの基本戦略は、ライントレースする中でボールを回収...
/*
37 black
53 white
*/
int startime=300;
#define CHECKCROSSTIME 25
#define fwd(OUT) Off(OUT);OnFwd(OUT)
#define rev(OUT) Off(OUT);OnRev(OUT)
#define TURNLEFT fwd(OUT_AC)
#define LEFT Off(OUT_C);fwd(OUT_A)
#define TURNRIGHT rev(OUT_AC)
#define RIGHT Off(OUT_A);rev(OUT_C)
#define STRAIGHT rev(OUT_C);fwd(OUT_A)
#define BACK fwd(OUT_C);rev(OUT_A)
#define ISNOTCROSS FastTimer(0) <= CHECKCROSSTIME || Fas...
#define RELEASE rev(OUT_B);
#define LOADING fwd(OUT_B);
sub trace(){
ClearTimer(0);
while(ISNOTCROSS){
if(FastTimer(1) < startime){
ClearTimer(0);
}
if(52 <= SENSOR_1){
TURNRIGHT;
}else if(50 <= SENSOR_1){
RIGHT;
}else if(41 <= SENSOR_1){
STRAIGHT;
}else if(39 <= SENSOR_1){
LEFT;
}else {
TURNLEFT;
}
if(39 <= SENSOR_1) ClearTimer(0);
}
Off(OUT_AC);
ClearTimer(0);
Wait(100);
}
/* 直進する */
sub go_straight(){
STRAIGHT;
Wait(30);
ClearTimer(1);
}
/* 左折する */
sub turn_left(){
ClearTimer(1);
ClearTimer(0);
}
/* 右折する */
sub turn_right(){
ClearTimer(1);
while(ISNOTCROSS){
if(FastTimer(1) >= startime){
ClearTimer(0);
ClearTimer(1);
break;
}
if(53 <= SENSOR_1){
TURNLEFT;
}else if(50 <= SENSOR_1){
LEFT;
}else if(47 <= SENSOR_1){
STRAIGHT;
}else if(44 <= SENSOR_1){
RIGHT;
}else {
TURNRIGHT;
}
}
TURNLEFT;
Wait(10);
Off(OUT_AC);
ClearTimer(0);
ClearTimer(1);
}
task main(){
SetSensor(SENSOR_1,SENSOR_LIGHT);
ClearTimer(0);
LOADING;
go_straight();
trace();
go_straight();
Off(OUT_AC);
Wait(2300);
ClearTimer(1);
startime=900;
trace();
startime=300;
//turn_left();//
//trace();
go_straight();
trace();
go_straight();
//turn_left();
trace();
go_straight();
startime=1400;
trace();
startime=300;
TURNRIGHT;
Wait(10);
Off(OUT_AC);
RELEASE;
Wait(300);
BACK;
Wait(100);
TURNRIGHT;
Wait(40);
LOADING;
ClearTimer(0);
trace();
turn_left();
startime=900;
trace();
startime=300;
//turn_left();//
//trace();
go_straight();
trace();
go_straight();
trace();
go_straight();
startime=1400;
trace();
startime=300;
TURNRIGHT;
Wait(10);
Off(OUT_AC);
RELEASE;
Wait(300);
go_straight();
Wait(10);
Off(OUT_ABC);
}
*結果[#s55739b0]
結果は、全4チーム中一番という結果でしたが、これには、多か...
*感想 [#nf94c7f1]
終わりよければすべて良しというわけではありませんが、結果...
終了行:
[[2015b/Member]]
目次
#contents
*課題内容 [#g9939cd0]
課題は、ボールを離れた場所から缶に当てるロボットとボール...
#ref(./2015b-mission3.png,60%,課題)
*ロボットAについて [#k3ee3c7c]
ロボットAは、ボールを掴んで缶に当てる動作を行います。この...
#ref(./DSC_0248.JPG,60%,ロボット全体図)
↑ロボット全体図
**ボールを掴む・弾く動作 [#v79a51aa]
今回の課題では、ボールを缶に当てる動作が必要になるので、...
このロボットが完成するまで、様々な改良を加えていきました...
#ref(./DSC_0250.JPG,60%,動作説明)
↑ギア側面図
*ロボットBについて [#afae0e3e]
ロボットBは、缶に当たったボールを回収する動作をします。こ...
制作初期は、缶に当たったボールを探すことを目標としていま...
#ref(./DSC_0249.JPG,60%,ロボット全体図)
↑ロボット全体図
**ボールを回収する動作 [#rd0d793d]
ロボットBのボール回収動作は、RCXのキャタピラパーツを4つ使...
このロボットは、制作が発表当日に完了したということもあり...
#ref(./DSC_0251.JPG,60%,動作説明)
↑ギア側面図
*プログラム [#we877882]
プログラムは、同チームの2人が中心になって作成してくれま...
**ロボットA用 [#daa1aaa3]
ロボットAの基本戦略は、ボールの位置を角度センサにより正確...
所々、ライントレースをしたり、角度センサを利用して走行し...
//black = 43 < 48 < white = 52
//SENSOR_2 トレース
//SENSOR_3 物体探索
//TIMER(0) トレース
//TIMER(1) 光探索
/*共通機構*/
#define power(s) SetPower(OUT_A+OUT_C,s);
/*ライントレース用*/
#define shiki 48
#define tomaru(t) Off(OUT_AC);Wait(t);
#define FWD OnFwd(OUT_AC);
#define BACK OnRev(OUT_AC);
#define LEFT_t OnRev(OUT_A); OnFwd(OUT_C);
#define LEFT Off(OUT_A); OnFwd(OUT_C);
#define RIGHT_t OnRev(OUT_C); OnFwd(OUT_A);
#define RIGHT Off(OUT_C); OnFwd(OUT_A);
#define TMAX 20
/*ロボコン独自機構*/
#define open(t) OnFwd(OUT_B);Wait(t);//玉を扱う機構
#define close(t) OnRev(OUT_B);Wait(t);Off(OUT_B);
#define stop_B Off(OUT_B);
#define SUN 50//ランタンの輝度を表す数値
#define shoot power(2);open(15);Wait(10);close(15);
/*赤球迄のトレース*/
sub trace_0()
{
power(2);
ClearSensor(SENSOR_1);
while(1){
if (SENSOR_2 < shiki -7){
LEFT_t;
} else if (SENSOR_2 < shiki -4){
LEFT;
} else if (SENSOR_2 < shiki){
FWD;
} else if(SENSOR_2 < shiki +4){
RIGHT;
} else {
RIGHT_t;
}
if(SENSOR_1 > 335){
power(3);
close(50);
ClearSensor(SENSOR_1);
break;
}
}
}
/*赤球を放つ手前*/
sub trace_1()
{
ClearSensor(SENSOR_1);
close(10);
Off(OUT_B);
power(2);
while(1){
if (SENSOR_2 < shiki -7){
LEFT_t;
} else if (SENSOR_2 < shiki -4){
LEFT;
} else if (SENSOR_2 < shiki){
FWD;
} else if(SENSOR_2 < shiki +4){
RIGHT;
} else {
RIGHT_t;
}
if(SENSOR_1 > 62){
tomaru(10);
break;
}
}
}
sub trace_2()
{
power(1);
ClearSensor(SENSOR_1);
while(1){
if (SENSOR_2 < shiki -7){
RIGHT_t;
} else if (SENSOR_2 < shiki -4){
RIGHT;
} else if (SENSOR_2 < shiki){
FWD;
} else if(SENSOR_2 < shiki +4){
LEFT;
} else {
LEFT_t;
}
if(SENSOR_1 > 44){
power(3);
close(50);
ClearSensor(SENSOR_1);
break;
}
}
}
sub trace_3()
{
power(2);
ClearSensor(SENSOR_1);
while(1){
close(1);
Off(OUT_B);
if (SENSOR_2 < shiki -7){
RIGHT_t;
} else if (SENSOR_2 < shiki -4){
RIGHT;
} else if (SENSOR_2 < shiki){
FWD;
} else if(SENSOR_2 < shiki +4){
LEFT;
} else {
LEFT_t;
}
if(SENSOR_1 > 110){
power(3);
close(50);
ClearSensor(SENSOR_1);
break;
}
}
}
/*光源を探す*/
sub LIGHT()
{
PlaySound(SOUND_UP);
int sun_MAX = 0;
int sensor_MAX = 0;
close(20);
ClearSensor(SENSOR_1);
power(1);
while(SENSOR_1 < 85){
RIGHT_t;
if(SENSOR_3 > sun_MAX){
sun_MAX = SENSOR_3;
sensor_MAX = SENSOR_1;
}
}
tomaru(10);
LEFT_t;
until(SENSOR_1 < sensor_MAX);
tomaru(10);
}
task main()
{
/*回転センサ*/
SetSensor(SENSOR_1,SENSOR_ROTATION);
/*トレース用センサ*/
SetSensor(SENSOR_2,SENSOR_LIGHT);
/*探索用センサ*/
SetSensor(SENSOR_3,SENSOR_LIGHT);
FWD;Wait(150);
trace_0();//向かう
tomaru(50);
trace_1();//赤玉持ち
LIGHT();
shoot;
tomaru(20);
ClearSensor(SENSOR_1);
RIGHT_t;
until(SENSOR_1 > 28);
tomaru(10);
ClearSensor(SENSOR_1);
FWD;
until(SENSOR_1 > 26);
Off(OUT_B);
FWD;
until(SENSOR_2 < 48);
open(7);
Off(OUT_B);
trace_2();
tomaru(10);
FWD;Wait(100);
trace_3();
tomaru(10);
LIGHT();
shoot;
trace_1();
}
**ロボットB用 [#rdc01f14]
ロボットBの基本戦略は、ライントレースする中でボールを回収...
/*
37 black
53 white
*/
int startime=300;
#define CHECKCROSSTIME 25
#define fwd(OUT) Off(OUT);OnFwd(OUT)
#define rev(OUT) Off(OUT);OnRev(OUT)
#define TURNLEFT fwd(OUT_AC)
#define LEFT Off(OUT_C);fwd(OUT_A)
#define TURNRIGHT rev(OUT_AC)
#define RIGHT Off(OUT_A);rev(OUT_C)
#define STRAIGHT rev(OUT_C);fwd(OUT_A)
#define BACK fwd(OUT_C);rev(OUT_A)
#define ISNOTCROSS FastTimer(0) <= CHECKCROSSTIME || Fas...
#define RELEASE rev(OUT_B);
#define LOADING fwd(OUT_B);
sub trace(){
ClearTimer(0);
while(ISNOTCROSS){
if(FastTimer(1) < startime){
ClearTimer(0);
}
if(52 <= SENSOR_1){
TURNRIGHT;
}else if(50 <= SENSOR_1){
RIGHT;
}else if(41 <= SENSOR_1){
STRAIGHT;
}else if(39 <= SENSOR_1){
LEFT;
}else {
TURNLEFT;
}
if(39 <= SENSOR_1) ClearTimer(0);
}
Off(OUT_AC);
ClearTimer(0);
Wait(100);
}
/* 直進する */
sub go_straight(){
STRAIGHT;
Wait(30);
ClearTimer(1);
}
/* 左折する */
sub turn_left(){
ClearTimer(1);
ClearTimer(0);
}
/* 右折する */
sub turn_right(){
ClearTimer(1);
while(ISNOTCROSS){
if(FastTimer(1) >= startime){
ClearTimer(0);
ClearTimer(1);
break;
}
if(53 <= SENSOR_1){
TURNLEFT;
}else if(50 <= SENSOR_1){
LEFT;
}else if(47 <= SENSOR_1){
STRAIGHT;
}else if(44 <= SENSOR_1){
RIGHT;
}else {
TURNRIGHT;
}
}
TURNLEFT;
Wait(10);
Off(OUT_AC);
ClearTimer(0);
ClearTimer(1);
}
task main(){
SetSensor(SENSOR_1,SENSOR_LIGHT);
ClearTimer(0);
LOADING;
go_straight();
trace();
go_straight();
Off(OUT_AC);
Wait(2300);
ClearTimer(1);
startime=900;
trace();
startime=300;
//turn_left();//
//trace();
go_straight();
trace();
go_straight();
//turn_left();
trace();
go_straight();
startime=1400;
trace();
startime=300;
TURNRIGHT;
Wait(10);
Off(OUT_AC);
RELEASE;
Wait(300);
BACK;
Wait(100);
TURNRIGHT;
Wait(40);
LOADING;
ClearTimer(0);
trace();
turn_left();
startime=900;
trace();
startime=300;
//turn_left();//
//trace();
go_straight();
trace();
go_straight();
trace();
go_straight();
startime=1400;
trace();
startime=300;
TURNRIGHT;
Wait(10);
Off(OUT_AC);
RELEASE;
Wait(300);
go_straight();
Wait(10);
Off(OUT_ABC);
}
*結果[#s55739b0]
結果は、全4チーム中一番という結果でしたが、これには、多か...
*感想 [#nf94c7f1]
終わりよければすべて良しというわけではありませんが、結果...
ページ名: