2016a/Member/Etu/Mission3
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2016a/Member]]
目次
#contents
*はじめに [#ya2d0417]
今回の課題は、課題2で作ったコースを使って、紙コップを指...
僕の班は紙コップを運ぶロボット、もう一つの班は紙コップを...
*ロボット本体の説明 [#j6964452]
#ref(IMG_1336.jpg)
課題2で使ったロボットにアームとタッチセンサーを付け足し...
#ref(IMG_1337.jpg)
アームの真下に付いているタッチセンサーでコップとの距離を...
*プログラムの説明 [#cbf0c660]
#define THRES1 39 //閾値1(黒、黒線中央)
#define THRES2 43 //閾値2(黒に近い黒、黒線中央から少...
#define THRES3 53 //閾値3(薄黒、黒線中央と境界の中間)
#define THRES4 59 //閾値4(白に近い黒、黒線境界から少...
#define SPEED_H 40 //速いスピード
#define SPEED_L 17 //遅いスピード
#define TIME_CROSS 230 //交差点を渡る時の時間
#define STEP 1 //1回の判定で進む時間
#define nMAX 220 //交差点での黒の判定基準
#define move_RL(speedR,speedL) OnFwd(OUT_A,speedR);OnFwd...
#define short_break Off(OUT_BC); Wait(500); /...
#define SPEED 30
#define ARM 50
#define go_forward OnFwd(OUT_AB,SPEED);
#define arm(t) OnFwd(OUT_AB,SPEED);Wait(t);\
Off(OUT_AB);OnRev(OUT_C,ARM);Wait(200);Off(O...
#define CONN 0
#define Boot 11
sub turn_right_A() //右折
{
move_RL(0, 30);
}
sub turn_right_B() //右旋回
{
move_RL(-SPEED_L,25);
}
sub back() //後退
{
move_RL(-SPEED,-30);
Wait(1700);
}
sub AC()
{
SetSensorLight(S1);
int n_black=0; //黒をカウント
int m_kousa=0; //交差点をカウント
while(m_kousa < 3) { //交差点が5回目未...
while (n_black < nMAX) { //n_black(黒)がn...
if (SENSOR_1 < THRES1) { //もし黒のとき...
move_RL(SPEED_L,-25);
n_black++;
} else { //そうでないとき
if (SENSOR_1 < THRES2) { //もし黒に近...
move_RL(SPEED_L,0);
} else if (SENSOR_1 < THRES3) { //薄黒⇔黒に...
move_RL(SPEED_H,50);
} else if (SENSOR_1 < THRES4) { //白に近い黒...
move_RL(0, 30);
} else { //白のとき右...
move_RL(-SPEED_L,25);
}
n_black=0; //n_black(黒)...
}
Wait(STEP); //上記の動作を、STEP(1回)ずつ...
}
if (m_kousa < 1) { //もし交差点が3回目...
short_break;
PlaySound(SOUND_DOUBLE_BEEP); //直進の合図
move_RL(SPEED_L,-25);
Wait(1100);
m_kousa++; //交差点をカウント
n_black=0; //n_blackを0に戻すことでライ...
} else if (m_kousa < 2) { //交差点が4回目のと...
short_break;
PlaySound(SOUND_DOWN); //左折の合図
move_RL(0, 27);
Wait(2800);
m_kousa++;
n_black=0;
} else { //B地点前T字を交差点5回目...
short_break;
move_RL(-SPEED_L,30);
Wait(600);
Off(OUT_AB);
m_kousa++; //m_kousa(交差点)=5回目とな...
PlaySound(SOUND_FAST_UP); //終了の合図
}
}
}
sub CP()
{
SetSensorLight(S1);
int n_black=0; //黒をカウント
int m_kousa=0; //交差点をカウント
while(m_kousa < 2) { //交差点が5回目未...
while (n_black < nMAX) { //n_black(黒)がn...
if (SENSOR_1 < THRES1) { //もし黒のとき...
move_RL(SPEED_L,-25);
n_black++;
} else { //そうでないとき
if (SENSOR_1 < THRES2) { //もし黒に近...
move_RL(SPEED_L,0);
} else if (SENSOR_1 < THRES3) { //薄黒⇔黒に...
move_RL(SPEED_H,50);
} else if (SENSOR_1 < THRES4) { //白に近い黒...
move_RL(0, 25);
} else { //白のとき右...
move_RL(-SPEED_L,25);
}
n_black=0; //n_black(黒)...
}
Wait(STEP); //上記の動作を、STEP(1回)ずつ...
}
if (m_kousa < 1) { //もし交差点が3回目...
short_break;
PlaySound(SOUND_DOUBLE_BEEP); //直進の合図
move_RL(SPEED_L,-25);
Wait(900);
m_kousa++; //交差点をカウント
n_black=0; //n_blackを0に戻すことでライ...
} else { //交差点が4回目のとき交差点を左折
short_break;
PlaySound(SOUND_DOWN); //左折の合図
Off(OUT_AB);
m_kousa++;
}
}
}
sub PD()
{
SetSensorLight(S1);
int n_black=0; //黒をカウント
int m_kousa=0; //交差点をカウント
while(m_kousa < 2) { //交差点が5回目未...
while (n_black < nMAX) { //n_black(黒)がn...
if (SENSOR_1 < THRES1) { //もし黒のとき...
move_RL(SPEED_L,-25);
n_black++;
} else { //そうでないとき
if (SENSOR_1 < THRES2) { //もし黒に近...
move_RL(SPEED_L,0);
} else if (SENSOR_1 < THRES3) { //薄黒⇔黒に...
move_RL(SPEED_H,50);
} else if (SENSOR_1 < THRES4) { //白に近い黒...
move_RL(0, 25);
} else { //白のとき右...
move_RL(-SPEED_L,25);
}
n_black=0; //n_black(黒)...
}
Wait(STEP); //上記の動作を、STEP(1回)ずつ...
}
if (m_kousa < 1) { //もし交差点が3回目...
short_break;
PlaySound(SOUND_DOUBLE_BEEP); //直進の合図
move_RL(SPEED_L,-25);
Wait(900);
m_kousa++; //交差点をカウント
n_black=0; //n_blackを0に戻すことでライ...
} else { //交差点が4回目のとき交差点を左折
short_break;
move_RL(-SPEED_L,30);
Wait(800);
Off(OUT_AB);
m_kousa++; //m_kousa(交差点)=5回目とな...
PlaySound(SOUND_FAST_UP); //終了の合図
}
}
}
sub DP()
{
SetSensorLight(S1);
int n_black=0; //黒をカウント
int m_kousa=0; //交差点をカウント
while(m_kousa < 1) { //交差点が5回目未...
while (n_black < nMAX) { //n_black(黒)がn...
if (SENSOR_1 < THRES1) { //もし黒のとき...
move_RL(SPEED_L,-25);
n_black++;
} else { //そうでないとき
if (SENSOR_1 < THRES2) { //もし黒に近...
move_RL(SPEED_L,0);
} else if (SENSOR_1 < THRES3) { //薄黒⇔黒に...
move_RL(SPEED_H,50);
} else if (SENSOR_1 < THRES4) { //白に近い黒...
move_RL(0, 25);
} else { //白のとき右...
move_RL(-SPEED_L,25);
}
n_black=0; //n_black(黒)...
}
Wait(STEP); //上記の動作を、STEP(1回)ずつ...
}
if (m_kousa < 1) { //もし交差点が3回目...
short_break;
PlaySound(SOUND_DOWN); //左折の合図
Off(OUT_AB);
m_kousa++; short_break;
} else { //交差点が4回目のとき交差点を左折
short_break;
PlaySound(SOUND_DOWN); //左折の合図
Off(OUT_AB);
m_kousa++;
}
}
}
sub PC()
{
SetSensorLight(S1);
int n_black=0; //黒をカウント
int m_kousa=0; //交差点をカウント
while(m_kousa < 2) { //交差点が5回目未...
while (n_black < nMAX) { //n_black(黒)がn...
if (SENSOR_1 < THRES1) { //もし黒のとき...
move_RL(SPEED_L,-25);
n_black++;
} else { //そうでないとき
if (SENSOR_1 < THRES2) { //もし黒に近...
move_RL(SPEED_L,0);
} else if (SENSOR_1 < THRES3) { //薄黒⇔黒に...
move_RL(SPEED_H,50);
} else if (SENSOR_1 < THRES4) { //白に近い黒...
move_RL(0, 25);
} else { //白のとき右...
move_RL(-SPEED_L,25);
}
n_black=0; //n_black(黒)...
}
Wait(STEP); //上記の動作を、STEP(1回)ずつ...
}
if (m_kousa < 1) { //もし交差点が3回目...
short_break;
PlaySound(SOUND_DOWN); //左折の合図
move_RL(0, 27);
Wait(2800);
m_kousa++;
n_black=0;
} else { //交差点が4回目のとき交差点を左折
short_break;
move_RL(-SPEED_L,30);
Wait(600);
Off(OUT_AB);
m_kousa++; //m_kousa(交差点)=5回目とな...
PlaySound(SOUND_FAST_UP);
}
}
}
sub get() //紙コップを掴む(1周目)
{
SetSensorLowspeed(S2); // 端子2には超音波センサ
go_forward;
/* 25cm以内に障害物があるとコップを掴みに行く */
if (SensorUS(S2) <= 25) { arm(590); }
Off(OUT_AB);
}
sub get_2() //紙コップを掴む(2周目)
{
SetSensorLowspeed(S2); // 端子2には超音波センサ
go_forward;
/* 25cm以内に障害物があるとコップを掴みに行く */
if (SensorUS(S2) <= 25) { arm(1150); }
Off(OUT_AB);
}
sub release() //紙コップを離す
{
OnFwd(OUT_C,ARM);
Wait(200);
Off(OUT_C);
SendRemoteNumber(CONN,MAILBOX1,Boot);
}
task main()
{
AC();
get();
back();
turn_right_B();
Wait(2200);
CP();
release();
back();
turn_right_B();
Wait(3800);
PD();
get();
back();
turn_right_B();
Wait(2200);
turn_right_A();
Wait(3000);
DP();
release();
back();
turn_right_B();
Wait(3400);
PC();
get_2();
back();
turn_right_B();
Wait(2200);
CP();
release();
back();
turn_right_B();
Wait(3800);
}
*苦労した点 [#jb59a3f4]
まず、ロボットを製作する段階でかなり手こずった。他の班が...
結局シンプルなつくりになったけど、変に重くないし壊れたり...
*感想 [#g6ae8bdd]
テスト期間でなにかと忙しく、なかなかロボティクスに時間を...
そんな忙しい中、プログラムをロボコン当日ギリギリでほぼ完...
終了行:
[[2016a/Member]]
目次
#contents
*はじめに [#ya2d0417]
今回の課題は、課題2で作ったコースを使って、紙コップを指...
僕の班は紙コップを運ぶロボット、もう一つの班は紙コップを...
*ロボット本体の説明 [#j6964452]
#ref(IMG_1336.jpg)
課題2で使ったロボットにアームとタッチセンサーを付け足し...
#ref(IMG_1337.jpg)
アームの真下に付いているタッチセンサーでコップとの距離を...
*プログラムの説明 [#cbf0c660]
#define THRES1 39 //閾値1(黒、黒線中央)
#define THRES2 43 //閾値2(黒に近い黒、黒線中央から少...
#define THRES3 53 //閾値3(薄黒、黒線中央と境界の中間)
#define THRES4 59 //閾値4(白に近い黒、黒線境界から少...
#define SPEED_H 40 //速いスピード
#define SPEED_L 17 //遅いスピード
#define TIME_CROSS 230 //交差点を渡る時の時間
#define STEP 1 //1回の判定で進む時間
#define nMAX 220 //交差点での黒の判定基準
#define move_RL(speedR,speedL) OnFwd(OUT_A,speedR);OnFwd...
#define short_break Off(OUT_BC); Wait(500); /...
#define SPEED 30
#define ARM 50
#define go_forward OnFwd(OUT_AB,SPEED);
#define arm(t) OnFwd(OUT_AB,SPEED);Wait(t);\
Off(OUT_AB);OnRev(OUT_C,ARM);Wait(200);Off(O...
#define CONN 0
#define Boot 11
sub turn_right_A() //右折
{
move_RL(0, 30);
}
sub turn_right_B() //右旋回
{
move_RL(-SPEED_L,25);
}
sub back() //後退
{
move_RL(-SPEED,-30);
Wait(1700);
}
sub AC()
{
SetSensorLight(S1);
int n_black=0; //黒をカウント
int m_kousa=0; //交差点をカウント
while(m_kousa < 3) { //交差点が5回目未...
while (n_black < nMAX) { //n_black(黒)がn...
if (SENSOR_1 < THRES1) { //もし黒のとき...
move_RL(SPEED_L,-25);
n_black++;
} else { //そうでないとき
if (SENSOR_1 < THRES2) { //もし黒に近...
move_RL(SPEED_L,0);
} else if (SENSOR_1 < THRES3) { //薄黒⇔黒に...
move_RL(SPEED_H,50);
} else if (SENSOR_1 < THRES4) { //白に近い黒...
move_RL(0, 30);
} else { //白のとき右...
move_RL(-SPEED_L,25);
}
n_black=0; //n_black(黒)...
}
Wait(STEP); //上記の動作を、STEP(1回)ずつ...
}
if (m_kousa < 1) { //もし交差点が3回目...
short_break;
PlaySound(SOUND_DOUBLE_BEEP); //直進の合図
move_RL(SPEED_L,-25);
Wait(1100);
m_kousa++; //交差点をカウント
n_black=0; //n_blackを0に戻すことでライ...
} else if (m_kousa < 2) { //交差点が4回目のと...
short_break;
PlaySound(SOUND_DOWN); //左折の合図
move_RL(0, 27);
Wait(2800);
m_kousa++;
n_black=0;
} else { //B地点前T字を交差点5回目...
short_break;
move_RL(-SPEED_L,30);
Wait(600);
Off(OUT_AB);
m_kousa++; //m_kousa(交差点)=5回目とな...
PlaySound(SOUND_FAST_UP); //終了の合図
}
}
}
sub CP()
{
SetSensorLight(S1);
int n_black=0; //黒をカウント
int m_kousa=0; //交差点をカウント
while(m_kousa < 2) { //交差点が5回目未...
while (n_black < nMAX) { //n_black(黒)がn...
if (SENSOR_1 < THRES1) { //もし黒のとき...
move_RL(SPEED_L,-25);
n_black++;
} else { //そうでないとき
if (SENSOR_1 < THRES2) { //もし黒に近...
move_RL(SPEED_L,0);
} else if (SENSOR_1 < THRES3) { //薄黒⇔黒に...
move_RL(SPEED_H,50);
} else if (SENSOR_1 < THRES4) { //白に近い黒...
move_RL(0, 25);
} else { //白のとき右...
move_RL(-SPEED_L,25);
}
n_black=0; //n_black(黒)...
}
Wait(STEP); //上記の動作を、STEP(1回)ずつ...
}
if (m_kousa < 1) { //もし交差点が3回目...
short_break;
PlaySound(SOUND_DOUBLE_BEEP); //直進の合図
move_RL(SPEED_L,-25);
Wait(900);
m_kousa++; //交差点をカウント
n_black=0; //n_blackを0に戻すことでライ...
} else { //交差点が4回目のとき交差点を左折
short_break;
PlaySound(SOUND_DOWN); //左折の合図
Off(OUT_AB);
m_kousa++;
}
}
}
sub PD()
{
SetSensorLight(S1);
int n_black=0; //黒をカウント
int m_kousa=0; //交差点をカウント
while(m_kousa < 2) { //交差点が5回目未...
while (n_black < nMAX) { //n_black(黒)がn...
if (SENSOR_1 < THRES1) { //もし黒のとき...
move_RL(SPEED_L,-25);
n_black++;
} else { //そうでないとき
if (SENSOR_1 < THRES2) { //もし黒に近...
move_RL(SPEED_L,0);
} else if (SENSOR_1 < THRES3) { //薄黒⇔黒に...
move_RL(SPEED_H,50);
} else if (SENSOR_1 < THRES4) { //白に近い黒...
move_RL(0, 25);
} else { //白のとき右...
move_RL(-SPEED_L,25);
}
n_black=0; //n_black(黒)...
}
Wait(STEP); //上記の動作を、STEP(1回)ずつ...
}
if (m_kousa < 1) { //もし交差点が3回目...
short_break;
PlaySound(SOUND_DOUBLE_BEEP); //直進の合図
move_RL(SPEED_L,-25);
Wait(900);
m_kousa++; //交差点をカウント
n_black=0; //n_blackを0に戻すことでライ...
} else { //交差点が4回目のとき交差点を左折
short_break;
move_RL(-SPEED_L,30);
Wait(800);
Off(OUT_AB);
m_kousa++; //m_kousa(交差点)=5回目とな...
PlaySound(SOUND_FAST_UP); //終了の合図
}
}
}
sub DP()
{
SetSensorLight(S1);
int n_black=0; //黒をカウント
int m_kousa=0; //交差点をカウント
while(m_kousa < 1) { //交差点が5回目未...
while (n_black < nMAX) { //n_black(黒)がn...
if (SENSOR_1 < THRES1) { //もし黒のとき...
move_RL(SPEED_L,-25);
n_black++;
} else { //そうでないとき
if (SENSOR_1 < THRES2) { //もし黒に近...
move_RL(SPEED_L,0);
} else if (SENSOR_1 < THRES3) { //薄黒⇔黒に...
move_RL(SPEED_H,50);
} else if (SENSOR_1 < THRES4) { //白に近い黒...
move_RL(0, 25);
} else { //白のとき右...
move_RL(-SPEED_L,25);
}
n_black=0; //n_black(黒)...
}
Wait(STEP); //上記の動作を、STEP(1回)ずつ...
}
if (m_kousa < 1) { //もし交差点が3回目...
short_break;
PlaySound(SOUND_DOWN); //左折の合図
Off(OUT_AB);
m_kousa++; short_break;
} else { //交差点が4回目のとき交差点を左折
short_break;
PlaySound(SOUND_DOWN); //左折の合図
Off(OUT_AB);
m_kousa++;
}
}
}
sub PC()
{
SetSensorLight(S1);
int n_black=0; //黒をカウント
int m_kousa=0; //交差点をカウント
while(m_kousa < 2) { //交差点が5回目未...
while (n_black < nMAX) { //n_black(黒)がn...
if (SENSOR_1 < THRES1) { //もし黒のとき...
move_RL(SPEED_L,-25);
n_black++;
} else { //そうでないとき
if (SENSOR_1 < THRES2) { //もし黒に近...
move_RL(SPEED_L,0);
} else if (SENSOR_1 < THRES3) { //薄黒⇔黒に...
move_RL(SPEED_H,50);
} else if (SENSOR_1 < THRES4) { //白に近い黒...
move_RL(0, 25);
} else { //白のとき右...
move_RL(-SPEED_L,25);
}
n_black=0; //n_black(黒)...
}
Wait(STEP); //上記の動作を、STEP(1回)ずつ...
}
if (m_kousa < 1) { //もし交差点が3回目...
short_break;
PlaySound(SOUND_DOWN); //左折の合図
move_RL(0, 27);
Wait(2800);
m_kousa++;
n_black=0;
} else { //交差点が4回目のとき交差点を左折
short_break;
move_RL(-SPEED_L,30);
Wait(600);
Off(OUT_AB);
m_kousa++; //m_kousa(交差点)=5回目とな...
PlaySound(SOUND_FAST_UP);
}
}
}
sub get() //紙コップを掴む(1周目)
{
SetSensorLowspeed(S2); // 端子2には超音波センサ
go_forward;
/* 25cm以内に障害物があるとコップを掴みに行く */
if (SensorUS(S2) <= 25) { arm(590); }
Off(OUT_AB);
}
sub get_2() //紙コップを掴む(2周目)
{
SetSensorLowspeed(S2); // 端子2には超音波センサ
go_forward;
/* 25cm以内に障害物があるとコップを掴みに行く */
if (SensorUS(S2) <= 25) { arm(1150); }
Off(OUT_AB);
}
sub release() //紙コップを離す
{
OnFwd(OUT_C,ARM);
Wait(200);
Off(OUT_C);
SendRemoteNumber(CONN,MAILBOX1,Boot);
}
task main()
{
AC();
get();
back();
turn_right_B();
Wait(2200);
CP();
release();
back();
turn_right_B();
Wait(3800);
PD();
get();
back();
turn_right_B();
Wait(2200);
turn_right_A();
Wait(3000);
DP();
release();
back();
turn_right_B();
Wait(3400);
PC();
get_2();
back();
turn_right_B();
Wait(2200);
CP();
release();
back();
turn_right_B();
Wait(3800);
}
*苦労した点 [#jb59a3f4]
まず、ロボットを製作する段階でかなり手こずった。他の班が...
結局シンプルなつくりになったけど、変に重くないし壊れたり...
*感想 [#g6ae8bdd]
テスト期間でなにかと忙しく、なかなかロボティクスに時間を...
そんな忙しい中、プログラムをロボコン当日ギリギリでほぼ完...
ページ名: