2016a/Member/Tea/Mission3
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2016a/Member]]
&size(30){目次};
#contents
*はじめに [#o4c57092]
今回の課題3の活動は、2チームが一体となり5〜6人で行った。~
チームメンバーは、~
「zawati」、「ngtrz」、「Ari」、「Etu」、「Tea」の5人です。
**課題3 [#o12a0911]
[[2016a/Mission2]]で使ったコースでタイムレースを行う。
**ルール [#ua4efa47]
[[2016a/Mission3]]を参考。(EV3のルールは除く)
***基本ルール [#oc72065c]
・紙コップをC地点、D地点にそれぞれ3個(合計6個)置き、C地点...
・紙コップは上下どちらにおいてもかまわない。
・2台のロボットの場合はA地点とB地点からスタート、一体型の...
・最終的に黒線で囲まれた輪の中にC地点からの紙コップとD地...
・紙コップを重ねる場所は、必ずしも目的地点の輪の中でなく...
・最終的に紙コップが自力で立っていること、またロボットが...
・競技時間はすべてのコップを重ね終わるまで、あるいは審判...
・審判の合図の後、5秒以内にロボットをスタートさせ、それ以...
・紙コップに色を塗ったり文字や絵をかいてもよいが、穴を開...
・光センサは2セット合わせて2つまで使って良い、その他のセ...
***基本得点の計算方法 [#ad9f4715]
・1段目の紙コップ3点、2段目の紙コップ6点、・・、n段目のコ...
・奇数段目にあるDのコップと偶数段目にあるCのコップは0点
***技術点の計算方法 [#ybb6aeed]
以下の動作の精度・スピード・確実性などを含めた技術的な工...
・スタートしてから紙コップの地点まで移動する速さ、正確さ ...
・紙コップをつかむ動作 (3点)
・紙コップをゴールまで運ぶ動作の速さ、正確さ (2点)
・紙コップを重ねる動作 (3点)
・2台のロボットの連携の良さ (3点)
・自立型のロボットとしての形や動作の美しさ、斬新さ (3点)
・ロボコン出場ロボットとしての完成度 (2点)
・その他 (2点)
*計画 [#h260bff6]
*ロボット [#ac70f212]
*プログラム [#r28fcc61]
**定義 [#aebb60eb]
***ライントレースの定義 [#tf7dd34d]
#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); //...
***紙コップを掴むための定義 [#ee0dc4c0]
#define SPEED_GET 30 //紙コップに前進するスピ...
#define ARM_TIME 50 //紙コップをつかむモー...
#define go_forward OnFwd(OUT_AB,SPEED_GET); //紙コッ...
#define arm(time_a) OnFwd(OUT_AB,SPEED_GET);Wait(time_a)...
***マスター(相手)と交信するための定義 [#a19d3d31]
#define CONN 0 //マスター(相手)との接続番号
#define Boot 11 //マスター(相手)に送信する番号
**サブルーチン [#ne4b6af8]
***基本動作のサブルーチン [#pa94a727]
sub turn_right_A(int time_b) //右折
{
move_RL(0, 30);
Wait(time_b);
}
sub turn_right_B(int time_c) //右旋回
{
move_RL(-SPEED_L,25);
Wait(time_c);
}
sub back(int time_d) //後退
{
move_RL(-30,-30);
Wait(time_d);
}
***移動のサブルーチン [#a8c3cdf4]
sub AC() //AからCまで進む
{
SetSensorLight(S1);
int n_black=0; //黒をカウント
int m_kousa=0; //交差点をカウント
while(m_kousa < 3) { //交差点が3回目ま...
while (n_black < nMAX) { //n_black(黒)...
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_blac...
}
Wait(STEP); //上記の動作を、STEP(1回...
}
if (m_kousa < 1) { //もし交差点が1...
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) { //もし交差...
short_break;
PlaySound(SOUND_DOWN);
move_RL(0, 27);
Wait(2800);
m_kousa++;
n_black=0;
} else { //もし交差...
short_break;
move_RL(-SPEED_L,30);
Wait(600);
Off(OUT_AB);
m_kousa++;
PlaySound(SOUND_FAST_UP);
}
}
}
sub CP() //CからPまで進む
{
SetSensorLight(S1);
int n_black=0;
int m_kousa=0;
while(m_kousa < 2) { //交差点が2回目ま...
while (n_black < nMAX) {
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;
}
Wait(STEP);
}
if (m_kousa < 1) { //もし交差点が...
short_break;
PlaySound(SOUND_DOUBLE_BEEP);
move_RL(SPEED_L,-25);
Wait(900);
m_kousa++;
n_black=0;
} else { //もし交差点...
short_break;
PlaySound(SOUND_FAST_UP);
Off(OUT_AB);
m_kousa++;
}
}
}
sub PD() //PからDまで進む
{
SetSensorLight(S1);
int n_black=0;
int m_kousa=0;
while(m_kousa < 2) { //交差点が2回目までの間
while (n_black < nMAX) {
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;
}
Wait(STEP);
}
if (m_kousa < 1) { //もし交差点が1回...
short_break;
PlaySound(SOUND_DOUBLE_BEEP);
move_RL(SPEED_L,-25);
Wait(900);
m_kousa++;
n_black=0;
} else { //もし交差点が2回目...
short_break;
move_RL(-SPEED_L,30);
Wait(800);
Off(OUT_AB);
m_kousa++;
PlaySound(SOUND_FAST_UP);
}
}
}
sub DP() //DからPまで進む
{
SetSensorLight(S1);
int n_black=0;
int m_kousa=0;
while(m_kousa < 1) { //交差点が1回目ま...
while (n_black < nMAX) {
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;
}
Wait(STEP);
}
if (m_kousa < 1) { //もし交差点が1回...
short_break;
PlaySound(SOUND_FAST_UP);
Off(OUT_AB);
m_kousa++;
} else {
short_break;
PlaySound(SOUND_FAST_UP);
Off(OUT_AB);
m_kousa++;
}
}
}
sub PC() //PからCまで進む
{
SetSensorLight(S1);
int n_black=0;
int m_kousa=0;
while(m_kousa < 2) { //交差点が2回目ま...
while (n_black < nMAX) {
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;
}
Wait(STEP);
}
if (m_kousa < 1) { //もし交差点が1回...
short_break;
PlaySound(SOUND_DOWN);
move_RL(0, 27);
Wait(2800);
m_kousa++;
n_black=0;
} else { //もし交差点が2...
short_break;
move_RL(-SPEED_L,30);
Wait(600);
Off(OUT_AB);
m_kousa++;
PlaySound(SOUND_FAST_UP);
}
}
}
***アームを動かすサブルーチン [#ed109981]
sub get() //各ポイント1個目の紙コップをつ...
{
SetSensorLowspeed(S2); //端子2に超音波センサ
go_forward;
/* 25cm以内に障害物があるとコップを掴みに行く */
if (SensorUS(S2) <= 25) { arm(590); }
Off(OUT_AB);
}
sub get_2() //各ポイント2個目の紙コップをつ...
{
SetSensorLowspeed(S2);
go_forward;
if (SensorUS(S2) <= 25) { arm(1300); }
Off(OUT_AB);
}
sub release() //紙コップを離す
{
OnFwd(OUT_C,ARM_TIME);
Wait(200);
Off(OUT_C);
SendRemoteNumber(CONN,MAILBOX1,Boot); //マスター...
}
**メイン [#d0754d28]
task main()
{
/* AからCまで行き紙コップを掴み方向転換する */
AC();
get();
back(1700);
turn_right_B(2200);
/* CからPまで行き紙コップを離し方向転換する */
CP();
release();
back(1700);
turn_right_B(3800);
/* PからDまで行き紙コップを掴み方向転換する */
PD();
get();
back(1700);
turn_right_B(2200);
turn_right_A(3000);
/* DからPまで行き紙コップを離し方向転換する */
DP();
release();
back(1700);
turn_right_B(3400);
/* PからCまで行き紙コップを掴み方向展開する */
PC();
get_2();
back(2000);
turn_right_B(2200);
/* CからPまで行き紙コップを離し方向転換する */
CP();
release();
back(1700);
turn_right_B(3800);
}
*ロボコン結果 [#t0909224]
結果は、
基本点 0点
技術点平均 11.1点 ←全ての班の中でナンバーワン!
総合順位 3位
*反省・感想 [#vabf3fc4]
終了行:
[[2016a/Member]]
&size(30){目次};
#contents
*はじめに [#o4c57092]
今回の課題3の活動は、2チームが一体となり5〜6人で行った。~
チームメンバーは、~
「zawati」、「ngtrz」、「Ari」、「Etu」、「Tea」の5人です。
**課題3 [#o12a0911]
[[2016a/Mission2]]で使ったコースでタイムレースを行う。
**ルール [#ua4efa47]
[[2016a/Mission3]]を参考。(EV3のルールは除く)
***基本ルール [#oc72065c]
・紙コップをC地点、D地点にそれぞれ3個(合計6個)置き、C地点...
・紙コップは上下どちらにおいてもかまわない。
・2台のロボットの場合はA地点とB地点からスタート、一体型の...
・最終的に黒線で囲まれた輪の中にC地点からの紙コップとD地...
・紙コップを重ねる場所は、必ずしも目的地点の輪の中でなく...
・最終的に紙コップが自力で立っていること、またロボットが...
・競技時間はすべてのコップを重ね終わるまで、あるいは審判...
・審判の合図の後、5秒以内にロボットをスタートさせ、それ以...
・紙コップに色を塗ったり文字や絵をかいてもよいが、穴を開...
・光センサは2セット合わせて2つまで使って良い、その他のセ...
***基本得点の計算方法 [#ad9f4715]
・1段目の紙コップ3点、2段目の紙コップ6点、・・、n段目のコ...
・奇数段目にあるDのコップと偶数段目にあるCのコップは0点
***技術点の計算方法 [#ybb6aeed]
以下の動作の精度・スピード・確実性などを含めた技術的な工...
・スタートしてから紙コップの地点まで移動する速さ、正確さ ...
・紙コップをつかむ動作 (3点)
・紙コップをゴールまで運ぶ動作の速さ、正確さ (2点)
・紙コップを重ねる動作 (3点)
・2台のロボットの連携の良さ (3点)
・自立型のロボットとしての形や動作の美しさ、斬新さ (3点)
・ロボコン出場ロボットとしての完成度 (2点)
・その他 (2点)
*計画 [#h260bff6]
*ロボット [#ac70f212]
*プログラム [#r28fcc61]
**定義 [#aebb60eb]
***ライントレースの定義 [#tf7dd34d]
#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); //...
***紙コップを掴むための定義 [#ee0dc4c0]
#define SPEED_GET 30 //紙コップに前進するスピ...
#define ARM_TIME 50 //紙コップをつかむモー...
#define go_forward OnFwd(OUT_AB,SPEED_GET); //紙コッ...
#define arm(time_a) OnFwd(OUT_AB,SPEED_GET);Wait(time_a)...
***マスター(相手)と交信するための定義 [#a19d3d31]
#define CONN 0 //マスター(相手)との接続番号
#define Boot 11 //マスター(相手)に送信する番号
**サブルーチン [#ne4b6af8]
***基本動作のサブルーチン [#pa94a727]
sub turn_right_A(int time_b) //右折
{
move_RL(0, 30);
Wait(time_b);
}
sub turn_right_B(int time_c) //右旋回
{
move_RL(-SPEED_L,25);
Wait(time_c);
}
sub back(int time_d) //後退
{
move_RL(-30,-30);
Wait(time_d);
}
***移動のサブルーチン [#a8c3cdf4]
sub AC() //AからCまで進む
{
SetSensorLight(S1);
int n_black=0; //黒をカウント
int m_kousa=0; //交差点をカウント
while(m_kousa < 3) { //交差点が3回目ま...
while (n_black < nMAX) { //n_black(黒)...
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_blac...
}
Wait(STEP); //上記の動作を、STEP(1回...
}
if (m_kousa < 1) { //もし交差点が1...
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) { //もし交差...
short_break;
PlaySound(SOUND_DOWN);
move_RL(0, 27);
Wait(2800);
m_kousa++;
n_black=0;
} else { //もし交差...
short_break;
move_RL(-SPEED_L,30);
Wait(600);
Off(OUT_AB);
m_kousa++;
PlaySound(SOUND_FAST_UP);
}
}
}
sub CP() //CからPまで進む
{
SetSensorLight(S1);
int n_black=0;
int m_kousa=0;
while(m_kousa < 2) { //交差点が2回目ま...
while (n_black < nMAX) {
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;
}
Wait(STEP);
}
if (m_kousa < 1) { //もし交差点が...
short_break;
PlaySound(SOUND_DOUBLE_BEEP);
move_RL(SPEED_L,-25);
Wait(900);
m_kousa++;
n_black=0;
} else { //もし交差点...
short_break;
PlaySound(SOUND_FAST_UP);
Off(OUT_AB);
m_kousa++;
}
}
}
sub PD() //PからDまで進む
{
SetSensorLight(S1);
int n_black=0;
int m_kousa=0;
while(m_kousa < 2) { //交差点が2回目までの間
while (n_black < nMAX) {
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;
}
Wait(STEP);
}
if (m_kousa < 1) { //もし交差点が1回...
short_break;
PlaySound(SOUND_DOUBLE_BEEP);
move_RL(SPEED_L,-25);
Wait(900);
m_kousa++;
n_black=0;
} else { //もし交差点が2回目...
short_break;
move_RL(-SPEED_L,30);
Wait(800);
Off(OUT_AB);
m_kousa++;
PlaySound(SOUND_FAST_UP);
}
}
}
sub DP() //DからPまで進む
{
SetSensorLight(S1);
int n_black=0;
int m_kousa=0;
while(m_kousa < 1) { //交差点が1回目ま...
while (n_black < nMAX) {
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;
}
Wait(STEP);
}
if (m_kousa < 1) { //もし交差点が1回...
short_break;
PlaySound(SOUND_FAST_UP);
Off(OUT_AB);
m_kousa++;
} else {
short_break;
PlaySound(SOUND_FAST_UP);
Off(OUT_AB);
m_kousa++;
}
}
}
sub PC() //PからCまで進む
{
SetSensorLight(S1);
int n_black=0;
int m_kousa=0;
while(m_kousa < 2) { //交差点が2回目ま...
while (n_black < nMAX) {
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;
}
Wait(STEP);
}
if (m_kousa < 1) { //もし交差点が1回...
short_break;
PlaySound(SOUND_DOWN);
move_RL(0, 27);
Wait(2800);
m_kousa++;
n_black=0;
} else { //もし交差点が2...
short_break;
move_RL(-SPEED_L,30);
Wait(600);
Off(OUT_AB);
m_kousa++;
PlaySound(SOUND_FAST_UP);
}
}
}
***アームを動かすサブルーチン [#ed109981]
sub get() //各ポイント1個目の紙コップをつ...
{
SetSensorLowspeed(S2); //端子2に超音波センサ
go_forward;
/* 25cm以内に障害物があるとコップを掴みに行く */
if (SensorUS(S2) <= 25) { arm(590); }
Off(OUT_AB);
}
sub get_2() //各ポイント2個目の紙コップをつ...
{
SetSensorLowspeed(S2);
go_forward;
if (SensorUS(S2) <= 25) { arm(1300); }
Off(OUT_AB);
}
sub release() //紙コップを離す
{
OnFwd(OUT_C,ARM_TIME);
Wait(200);
Off(OUT_C);
SendRemoteNumber(CONN,MAILBOX1,Boot); //マスター...
}
**メイン [#d0754d28]
task main()
{
/* AからCまで行き紙コップを掴み方向転換する */
AC();
get();
back(1700);
turn_right_B(2200);
/* CからPまで行き紙コップを離し方向転換する */
CP();
release();
back(1700);
turn_right_B(3800);
/* PからDまで行き紙コップを掴み方向転換する */
PD();
get();
back(1700);
turn_right_B(2200);
turn_right_A(3000);
/* DからPまで行き紙コップを離し方向転換する */
DP();
release();
back(1700);
turn_right_B(3400);
/* PからCまで行き紙コップを掴み方向展開する */
PC();
get_2();
back(2000);
turn_right_B(2200);
/* CからPまで行き紙コップを離し方向転換する */
CP();
release();
back(1700);
turn_right_B(3800);
}
*ロボコン結果 [#t0909224]
結果は、
基本点 0点
技術点平均 11.1点 ←全ての班の中でナンバーワン!
総合順位 3位
*反省・感想 [#vabf3fc4]
ページ名: