2012b/Member/atchoo/Mission1
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2012b/Member]]
*課題1レポート [#d896fcae]
*メンバー [#k5126c5c]
--atchoo:繊維学部所属 凡人
--aspect:工学部所属 唯一神
--ウベック:パイロット AB型、乙女座、パイロット歴25年
*課題の紹介 [#j252c9ae]
写真のようなコースを作成しロボットを制御するというもので...
#ref(2012b/Member/atchoo/Mission1/2012b-mission1.png,80%)
一人目
+スタート地点から出発しピンポン球を回収します。
+ライン(黒線)をトレースしながらゴールを目指し、途中のT字...
+ゴールしたらエリア外からピンポン球をゴールめがけて打ち出...
二人目
-一人目とは逆周りにコースを回ります。
**作成したロボットの紹介 [#t4a5c214]
-ロボットの名前
YURIKA号
#ref(2012b/Member/atchoo/Mission1/2012-12-19_18-56-24_533...
-ロボットの外観:
全体像としてはクレーン車をモチーフにしました。重心はどち...
-アーム:
このアームを作るにあたって参考となったのは「ゆりかご」で...
#ref(2012b/Member/atchoo/Mission1/2012-12-19_18-54-54_670...
球を回収するときの写真
#ref(2012b/Member/atchoo/Mission1/2012-12-19_18-55-16_581...
球を取り込んだときの写真
#ref(2012b/Member/atchoo/Mission1/2012-12-19_20-47-16_445...
球を打ち出すときの写真
ゆりかごが球を回収する時は巻き込むようにモーターを回...
-プログラムの説明:
今回の課題であるライントレースをするにあたり交差点の判断...
#define THRESHOLD 51 // しきい値
#define SPEED_H 50 // 直線用のスピード
#define SPEED_L 40 // カーブのスピード
#define SPEED_S 25 // シュート用のスピード
#define OnRL(speedR,speedL) \
OnFwd(OUT_B,speedR);OnFwd(OUT_C,speedL);
#define go_forward OnRL(SPEED_H,SPEED_H); // 直進
#define turn_left1 OnRL(SPEED_L,-SPEED_L);// 左旋回
#define turn_left0 OnRL(SPEED_L,0);// 左折
#define turn_right0 OnRL(0,SPEED_L);// 右折
#define turn_right1 OnRL(-SPEED_L,SPEED_L);// 右旋回
#define STEP 1 // 1回の判断で動く時間
#define nMAX1 140 // 通常のカーブとして許容できる繰り返...
#define nMAX2 150 // ゴールとして判断する繰り返しの最大値
#define xturn 170 //交差点突破の方向修正
#define yturn 200 //シュートの方向修正
#define short_break Off(OUT_BC); Wait(1000); // 小休止
#define CROSS_TIME 200 // 交差点通過にかかる時間
/* 交差点を渡る */
#define cross_line OnRL(SPEED_L,SPEED_L);Wait(CROSS_TIME...
#define st1 8000 // 時間の変数1
#define st2 5000 // 時間の変数2
task main()
{
SetSensorLight(S3);
int nOnline = 0; // 続けて黒になった回数 (カウンタ)
long t0 = CurrentTick(); // タイマ
int pattern = 1; // 行動するパターン
//////////////////////////////////////////
/* 球の回収 */
//////////////////////////////////////////
OnFwd(OUT_A,SPEED_S);Wait(430); // 球の回収
Off(OUT_A);Wait(1000);
OnFwd(OUT_BC,SPEED_S);Wait(750); // 前進する
Off(OUT_BC);Wait(1000);
t0 = CurrentTick(); // タイマのリセット
while (true) {
switch(pattern){
/////////////////////////////////////////////////////...
/* 1:直角・急カーブを曲がるトレースパターン */
/* 2:交差点を直進するトレースパターン */
/* 3:交差点を突破するパターン */
/* 4:ゴールのパターン */
/* 5:シュートするパターン */
/////////////////////////////////////////////////////...
case 1:
////////////////////////////////////////////////////...
/* 直角・急カーブを曲がるパターン */
////////////////////////////////////////////////////...
if (CurrentTick() - t0 >= st1) { // パターンの変更の...
t0 = CurrentTick(); // タイマのリセット
nOnline=0; // カウンタをリセット
pattern = 2; // 交差点を直進するパターン
break;
}
if (SENSOR_3 < THRESHOLD-10) {
turn_left1;
} else if (SENSOR_3 < THRESHOLD-5) {
turn_left0;
} else if (SENSOR_3 < THRESHOLD+5) {
go_forward;
} else if (SENSOR_3 < THRESHOLD+10) {
turn_right0;
} else {
turn_right1;
}
Wait(STEP);
break;
case 2:
////////////////////////////////////////////////////...
/* 交差点を直進していいパターン */
////////////////////////////////////////////////////...
if (CurrentTick() - t0 >= st2) { //パターン変更の判断
Off(OUT_BC);Wait(1000);
t0 = CurrentTick();
pattern = 4; // ゴールするパターン
break;
}
if(nOnline > nMAX1){ // 交差点判断
Off(OUT_BC);Wait(1000);
pattern = 3; // 交差点を突破するパターン
break;
}
if (SENSOR_3 < THRESHOLD-10) {
turn_left1;
nOnline++; // カウンタを増やす
} else if (SENSOR_3 < THRESHOLD-5) {
turn_left0;
nOnline++; // カウンタを増やす
} else {
if (SENSOR_3 < THRESHOLD+5) {
go_forward;
} else if (SENSOR_3 < THRESHOLD+10) {
turn_right0;
} else {
turn_right1;
}
nOnline=0; // カウンタをリセット
}
Wait(STEP);
break;
case 3:
////////////////////////////////////////////////////...
/* 交差点を突破するパターン */
////////////////////////////////////////////////////...
short_break; // 小休憩
turn_right1; Wait(xturn); // 進行方向修正
Off(OUT_BC);Wait(1000);
cross_line; // 交差点を渡る
nOnline=0; //カウンタをリセット
pattern = 2; // 交差点を直進するパターン
break;
case 4:
////////////////////////////////////////////////////...
/* ゴールするパターン */
////////////////////////////////////////////////////...
if(nOnline > nMAX2){ // ゴール判断
pattern = 5; // シュートするパターン
break;
}
if (SENSOR_3 < THRESHOLD-10) {
turn_left1;
nOnline++; // カウンタを増やす
} else {
if (SENSOR_3 < THRESHOLD-5) {
turn_left0;
} else if (SENSOR_3 < THRESHOLD+5) {
go_forward;
} else if (SENSOR_3 < THRESHOLD+10) {
turn_right0;
} else {
turn_right1;
}
nOnline=0; // カウンタをリセット
}
Wait(STEP);
break;
case 5:
////////////////////////////////////////////////////...
/* シュートするパターン */
////////////////////////////////////////////////////...
short_break; // 小休憩
turn_right1; Wait(yturn); // 進行方向修正
Off(OUT_BC);Wait(1000);
OnRev(OUT_A,SPEED_H);Wait(360); //シュート
Off(OUT_A);Wait(1000);
pattern = 6; // 終了
break;
default:
Off(OUT_ABC);
break;
}
}
}
*感想・反省点 [#d297c784]
-ロボットを完成させるタイミングが遅かったのでプログラムの...
-ロボットの全長がほかの班に比べやや大きめなので動きに誤差...
パートナーのaspectさん、本当にありがとうございました。
終了行:
[[2012b/Member]]
*課題1レポート [#d896fcae]
*メンバー [#k5126c5c]
--atchoo:繊維学部所属 凡人
--aspect:工学部所属 唯一神
--ウベック:パイロット AB型、乙女座、パイロット歴25年
*課題の紹介 [#j252c9ae]
写真のようなコースを作成しロボットを制御するというもので...
#ref(2012b/Member/atchoo/Mission1/2012b-mission1.png,80%)
一人目
+スタート地点から出発しピンポン球を回収します。
+ライン(黒線)をトレースしながらゴールを目指し、途中のT字...
+ゴールしたらエリア外からピンポン球をゴールめがけて打ち出...
二人目
-一人目とは逆周りにコースを回ります。
**作成したロボットの紹介 [#t4a5c214]
-ロボットの名前
YURIKA号
#ref(2012b/Member/atchoo/Mission1/2012-12-19_18-56-24_533...
-ロボットの外観:
全体像としてはクレーン車をモチーフにしました。重心はどち...
-アーム:
このアームを作るにあたって参考となったのは「ゆりかご」で...
#ref(2012b/Member/atchoo/Mission1/2012-12-19_18-54-54_670...
球を回収するときの写真
#ref(2012b/Member/atchoo/Mission1/2012-12-19_18-55-16_581...
球を取り込んだときの写真
#ref(2012b/Member/atchoo/Mission1/2012-12-19_20-47-16_445...
球を打ち出すときの写真
ゆりかごが球を回収する時は巻き込むようにモーターを回...
-プログラムの説明:
今回の課題であるライントレースをするにあたり交差点の判断...
#define THRESHOLD 51 // しきい値
#define SPEED_H 50 // 直線用のスピード
#define SPEED_L 40 // カーブのスピード
#define SPEED_S 25 // シュート用のスピード
#define OnRL(speedR,speedL) \
OnFwd(OUT_B,speedR);OnFwd(OUT_C,speedL);
#define go_forward OnRL(SPEED_H,SPEED_H); // 直進
#define turn_left1 OnRL(SPEED_L,-SPEED_L);// 左旋回
#define turn_left0 OnRL(SPEED_L,0);// 左折
#define turn_right0 OnRL(0,SPEED_L);// 右折
#define turn_right1 OnRL(-SPEED_L,SPEED_L);// 右旋回
#define STEP 1 // 1回の判断で動く時間
#define nMAX1 140 // 通常のカーブとして許容できる繰り返...
#define nMAX2 150 // ゴールとして判断する繰り返しの最大値
#define xturn 170 //交差点突破の方向修正
#define yturn 200 //シュートの方向修正
#define short_break Off(OUT_BC); Wait(1000); // 小休止
#define CROSS_TIME 200 // 交差点通過にかかる時間
/* 交差点を渡る */
#define cross_line OnRL(SPEED_L,SPEED_L);Wait(CROSS_TIME...
#define st1 8000 // 時間の変数1
#define st2 5000 // 時間の変数2
task main()
{
SetSensorLight(S3);
int nOnline = 0; // 続けて黒になった回数 (カウンタ)
long t0 = CurrentTick(); // タイマ
int pattern = 1; // 行動するパターン
//////////////////////////////////////////
/* 球の回収 */
//////////////////////////////////////////
OnFwd(OUT_A,SPEED_S);Wait(430); // 球の回収
Off(OUT_A);Wait(1000);
OnFwd(OUT_BC,SPEED_S);Wait(750); // 前進する
Off(OUT_BC);Wait(1000);
t0 = CurrentTick(); // タイマのリセット
while (true) {
switch(pattern){
/////////////////////////////////////////////////////...
/* 1:直角・急カーブを曲がるトレースパターン */
/* 2:交差点を直進するトレースパターン */
/* 3:交差点を突破するパターン */
/* 4:ゴールのパターン */
/* 5:シュートするパターン */
/////////////////////////////////////////////////////...
case 1:
////////////////////////////////////////////////////...
/* 直角・急カーブを曲がるパターン */
////////////////////////////////////////////////////...
if (CurrentTick() - t0 >= st1) { // パターンの変更の...
t0 = CurrentTick(); // タイマのリセット
nOnline=0; // カウンタをリセット
pattern = 2; // 交差点を直進するパターン
break;
}
if (SENSOR_3 < THRESHOLD-10) {
turn_left1;
} else if (SENSOR_3 < THRESHOLD-5) {
turn_left0;
} else if (SENSOR_3 < THRESHOLD+5) {
go_forward;
} else if (SENSOR_3 < THRESHOLD+10) {
turn_right0;
} else {
turn_right1;
}
Wait(STEP);
break;
case 2:
////////////////////////////////////////////////////...
/* 交差点を直進していいパターン */
////////////////////////////////////////////////////...
if (CurrentTick() - t0 >= st2) { //パターン変更の判断
Off(OUT_BC);Wait(1000);
t0 = CurrentTick();
pattern = 4; // ゴールするパターン
break;
}
if(nOnline > nMAX1){ // 交差点判断
Off(OUT_BC);Wait(1000);
pattern = 3; // 交差点を突破するパターン
break;
}
if (SENSOR_3 < THRESHOLD-10) {
turn_left1;
nOnline++; // カウンタを増やす
} else if (SENSOR_3 < THRESHOLD-5) {
turn_left0;
nOnline++; // カウンタを増やす
} else {
if (SENSOR_3 < THRESHOLD+5) {
go_forward;
} else if (SENSOR_3 < THRESHOLD+10) {
turn_right0;
} else {
turn_right1;
}
nOnline=0; // カウンタをリセット
}
Wait(STEP);
break;
case 3:
////////////////////////////////////////////////////...
/* 交差点を突破するパターン */
////////////////////////////////////////////////////...
short_break; // 小休憩
turn_right1; Wait(xturn); // 進行方向修正
Off(OUT_BC);Wait(1000);
cross_line; // 交差点を渡る
nOnline=0; //カウンタをリセット
pattern = 2; // 交差点を直進するパターン
break;
case 4:
////////////////////////////////////////////////////...
/* ゴールするパターン */
////////////////////////////////////////////////////...
if(nOnline > nMAX2){ // ゴール判断
pattern = 5; // シュートするパターン
break;
}
if (SENSOR_3 < THRESHOLD-10) {
turn_left1;
nOnline++; // カウンタを増やす
} else {
if (SENSOR_3 < THRESHOLD-5) {
turn_left0;
} else if (SENSOR_3 < THRESHOLD+5) {
go_forward;
} else if (SENSOR_3 < THRESHOLD+10) {
turn_right0;
} else {
turn_right1;
}
nOnline=0; // カウンタをリセット
}
Wait(STEP);
break;
case 5:
////////////////////////////////////////////////////...
/* シュートするパターン */
////////////////////////////////////////////////////...
short_break; // 小休憩
turn_right1; Wait(yturn); // 進行方向修正
Off(OUT_BC);Wait(1000);
OnRev(OUT_A,SPEED_H);Wait(360); //シュート
Off(OUT_A);Wait(1000);
pattern = 6; // 終了
break;
default:
Off(OUT_ABC);
break;
}
}
}
*感想・反省点 [#d297c784]
-ロボットを完成させるタイミングが遅かったのでプログラムの...
-ロボットの全長がほかの班に比べやや大きめなので動きに誤差...
パートナーのaspectさん、本当にありがとうございました。
ページ名: