2013a/Member/ma/Mission1
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
#contents
*ロボットの紹介 [#d2b4ef72]
-サンプルのロボットでは攻略するコースのような急なカーブは...
そこでモーターとモーターとの距離を縮めることによって小回...
今回のような急なカーブも曲がり切れるようにした。~
-缶を挟むギミックにはモーター付きの大きなハサミを使用した...
缶がロボットに触れたかどうかの判定をするためにバンパーを...
#ref(DSC_0148.jpg)
写真のハサミが開閉することによって缶をつかんだり離したり...
ハサミの先端には小さなタイヤを取り付け、缶がハサミから滑...
*コース攻略法 [#l42dc28d]
#ref(robotics-2013a-mission10.jpg)
-このコースでは時計回りコースを担当した。~
-缶をつかみ目的の場所に置くために図のようにコースを5分割...
プログラムもそれに合わせて5つに分けて作成した。
*プログラムの説明 [#sa2fe1d4]
#define THRESHOLD 42 //しきい値
#define HIPOWER 5 //速さの値(速)
#define LOWPOWER 1 //速さの値(遅)
#define set_power_H SetPower(OUT_AC,HIPOWER); //速い回転
#define set_power_L SetPower(OUT_AC,LOWPOWER); //遅い回転
#define go_forward set_power_H; OnFwd(OUT_AC); //前進
#define turn_left1 set_power_L; OnRev(OUT_A); OnFwd(OUT_...
#define turn_left0 set_power_L; Off(OUT_A); OnFwd(OUT_C)...
#define turn_right0 set_power_L; OnFwd(OUT_A); Off(OUT_C...
#define turn_right1 set_power_L; OnFwd(OUT_A); OnRev(OUT...
#define STEP 1 //黒を判断する間隔
#define nMAX 3 //交差点を判断する基準の値
#define short_break Off(OUT_AC); Wait(10); //小休止
#define cross_time 20 //交差点を渡る時間
#define cross_line go_forward set_power_H; OnFwd(OUT_AC)...
#define time1 1600 //決められたポイントまで動作する時間
#define time3 900
#define time5 900
task main() {
SetSensor(SENSOR_2, SENSOR_LIGHT);
SetSensor(SENSOR_1, SENSOR_TOUCH);
ClearTimer(0);
int counter=0;
int nOnline=0;
-ここから?の部分のコースの攻略。~
指定された時間まで通常のライントレースをする。~
また、途中でタッチセンサーに反応があればモーターによって...
if (SENSOR_1 == 0){ //?のコースの途中まで通常のライン...
OnFwd(OUT_B);
}
while(FastTimer(0) <= time1){
if (SENSOR_1 == 1){
OnRev(OUT_B);
}
if (SENSOR_2 < THRESHOLD -4){
turn_left1;
} else if (SENSOR_2 < THRESHOLD -3){
turn_left0;
} else if (SENSOR_2 < THRESHOLD +0){
go_forward;
} else if (SENSOR_2 < THRESHOLD +2){
turn_right0;
} else {
turn_right1;
}
Wait(STEP);
}
PlaySound(SOUND_CLICK);
-?の部分。~
交差点にに差し掛かるとそれを認識して曲がらずに直進する(...
このパート終了までに3つの交差点があるので、交差点を3つ...
while(counter < 3){ //交差点を3つ渡る
while(nOnline < nMAX){
if (SENSOR_2 < THRESHOLD -3){
turn_left1;
nOnline++;
} else {
if (SENSOR_2 < THRESHOLD -2){
turn_left0;
} else if (SENSOR_2 < THRESHOLD -0){
go_forward;
} else if (SENSOR_2 < THRESHOLD +2){
turn_right0;
} else {
turn_right1;
}
nOnline=0;
}
Wait(STEP);
}
short_break;
turn_right1; Wait(nMAX*STEP);
cross_line;
PlaySound(SOUND_UP);
nOnline=0;
counter++;
}
PlaySound(SOUND_CLICK);
-?の部分。~
円状の部分をロボットが回るおおまかな時間を計測して、プロ...
ClearTimer(0);
while(FastTimer(0) <= time3){ //通常のライントレース
if (SENSOR_2 < THRESHOLD -4){
turn_left1;
} else if (SENSOR_2 < THRESHOLD -3){
turn_left0;
} else if (SENSOR_2 < THRESHOLD +0){
go_forward;
} else if (SENSOR_2 < THRESHOLD +2){
turn_right0;
} else {
turn_right1;
}
Wait(STEP);
}
PlaySound(SOUND_CLICK);
-?の部分。~
交差点があり、ここだけは通常のライントレースでは突破でき...
一瞬だけ交差点を渡るプログラムに切り替えて攻略した。
counter=0;
while(counter < 1){ //交差点を一つ渡る
while(nOnline < nMAX){
if (SENSOR_2 < THRESHOLD -4){
turn_left1;
nOnline++;
} else {
if (SENSOR_2 < THRESHOLD -3){
turn_left0;
} else if (SENSOR_2 < THRESHOLD -0){
go_forward;
} else if (SENSOR_2 < THRESHOLD +2){
turn_right0;
} else {
turn_right1;
}
nOnline=0;
}
Wait(STEP);
}
short_break;
turn_right1; Wait(nMAX*STEP);
cross_line;
PlaySound(SOUND_UP);
nOnline=0;
counter++;
}
PlaySound(SOUND_CLICK);
-?の部分。~
前半部分は通常のライントレース。~
後半からは交差点(スタート地点)を認識すると決められた動...
缶を決められた位置に置くプログラム。~
ClearTimer(0);
while(FastTimer(0) <= time5){ //コース途中まで通常のラ...
if (SENSOR_2 < THRESHOLD -4){
turn_left1;
} else if (SENSOR_2 < THRESHOLD -3){
turn_left0;
} else if (SENSOR_2 < THRESHOLD +0){
go_forward;
} else if (SENSOR_2 < THRESHOLD +4){
turn_right0;
} else {
turn_right1;
}
Wait(STEP);
}
PlaySound(SOUND_CLICK);
counter=0;
while(counter < 1){ //スタートの位置を判断して次の命令に...
while(nOnline < nMAX){
if (SENSOR_2 < THRESHOLD -4){
turn_left1;
nOnline++;
} else {
if (SENSOR_2 < THRESHOLD -3){
turn_left0;
} else if (SENSOR_2 < THRESHOLD -0){
go_forward;
} else if (SENSOR_2 < THRESHOLD +2){
turn_right0;
} else {
turn_right1;
}
nOnline=0;
}
Wait(STEP);
}
OnRev(OUT_B); //反対方向を向く
OnRev(OUT_A);
OnFwd(OUT_C);
Wait(400);
Off(OUT_AC);
OnFwd(OUT_AC); //缶を置く位置まで進む
Wait(200);
OnFwd(OUT_B);
Off(OUT_AC);
Wait(100);
Off(OUT_B); //缶を離して後退する
OnRev(OUT_AC);
Wait(100);
OnRev(OUT_C); //反対方向を向く
OnFwd(OUT_A);
Wait(400);
counter++;
-缶を置き終わるとゴールへ向かう
while(true){ //ゴールまで通常のライントレース
if (SENSOR_2 < THRESHOLD -4){
turn_left1;
} else if (SENSOR_2 < THRESHOLD -3){
turn_left0;
} else if (SENSOR_2 < THRESHOLD +0){
go_forward;
} else if (SENSOR_2 < THRESHOLD +2){
turn_right0;
} else {
turn_right1;
}
Wait(STEP);
}
PlaySound(SOUND_CLICK);
}
}
*まとめ [#o78fb8f6]
**ロボット本体について [#ad75ad43]
-ハサミ部分の重量が予想以上に重く、ロボット本体のバランス...
**プログラムについて [#tcc7792e]
-括弧部分の文法ミスが多かったので、次回からはインデントを...
-部屋の明るさ、電池の残量、床の柔らかさなどで光センサが認...
-最後の缶を指定の位置に置くプログラムの作りが甘かったので...
終了行:
#contents
*ロボットの紹介 [#d2b4ef72]
-サンプルのロボットでは攻略するコースのような急なカーブは...
そこでモーターとモーターとの距離を縮めることによって小回...
今回のような急なカーブも曲がり切れるようにした。~
-缶を挟むギミックにはモーター付きの大きなハサミを使用した...
缶がロボットに触れたかどうかの判定をするためにバンパーを...
#ref(DSC_0148.jpg)
写真のハサミが開閉することによって缶をつかんだり離したり...
ハサミの先端には小さなタイヤを取り付け、缶がハサミから滑...
*コース攻略法 [#l42dc28d]
#ref(robotics-2013a-mission10.jpg)
-このコースでは時計回りコースを担当した。~
-缶をつかみ目的の場所に置くために図のようにコースを5分割...
プログラムもそれに合わせて5つに分けて作成した。
*プログラムの説明 [#sa2fe1d4]
#define THRESHOLD 42 //しきい値
#define HIPOWER 5 //速さの値(速)
#define LOWPOWER 1 //速さの値(遅)
#define set_power_H SetPower(OUT_AC,HIPOWER); //速い回転
#define set_power_L SetPower(OUT_AC,LOWPOWER); //遅い回転
#define go_forward set_power_H; OnFwd(OUT_AC); //前進
#define turn_left1 set_power_L; OnRev(OUT_A); OnFwd(OUT_...
#define turn_left0 set_power_L; Off(OUT_A); OnFwd(OUT_C)...
#define turn_right0 set_power_L; OnFwd(OUT_A); Off(OUT_C...
#define turn_right1 set_power_L; OnFwd(OUT_A); OnRev(OUT...
#define STEP 1 //黒を判断する間隔
#define nMAX 3 //交差点を判断する基準の値
#define short_break Off(OUT_AC); Wait(10); //小休止
#define cross_time 20 //交差点を渡る時間
#define cross_line go_forward set_power_H; OnFwd(OUT_AC)...
#define time1 1600 //決められたポイントまで動作する時間
#define time3 900
#define time5 900
task main() {
SetSensor(SENSOR_2, SENSOR_LIGHT);
SetSensor(SENSOR_1, SENSOR_TOUCH);
ClearTimer(0);
int counter=0;
int nOnline=0;
-ここから?の部分のコースの攻略。~
指定された時間まで通常のライントレースをする。~
また、途中でタッチセンサーに反応があればモーターによって...
if (SENSOR_1 == 0){ //?のコースの途中まで通常のライン...
OnFwd(OUT_B);
}
while(FastTimer(0) <= time1){
if (SENSOR_1 == 1){
OnRev(OUT_B);
}
if (SENSOR_2 < THRESHOLD -4){
turn_left1;
} else if (SENSOR_2 < THRESHOLD -3){
turn_left0;
} else if (SENSOR_2 < THRESHOLD +0){
go_forward;
} else if (SENSOR_2 < THRESHOLD +2){
turn_right0;
} else {
turn_right1;
}
Wait(STEP);
}
PlaySound(SOUND_CLICK);
-?の部分。~
交差点にに差し掛かるとそれを認識して曲がらずに直進する(...
このパート終了までに3つの交差点があるので、交差点を3つ...
while(counter < 3){ //交差点を3つ渡る
while(nOnline < nMAX){
if (SENSOR_2 < THRESHOLD -3){
turn_left1;
nOnline++;
} else {
if (SENSOR_2 < THRESHOLD -2){
turn_left0;
} else if (SENSOR_2 < THRESHOLD -0){
go_forward;
} else if (SENSOR_2 < THRESHOLD +2){
turn_right0;
} else {
turn_right1;
}
nOnline=0;
}
Wait(STEP);
}
short_break;
turn_right1; Wait(nMAX*STEP);
cross_line;
PlaySound(SOUND_UP);
nOnline=0;
counter++;
}
PlaySound(SOUND_CLICK);
-?の部分。~
円状の部分をロボットが回るおおまかな時間を計測して、プロ...
ClearTimer(0);
while(FastTimer(0) <= time3){ //通常のライントレース
if (SENSOR_2 < THRESHOLD -4){
turn_left1;
} else if (SENSOR_2 < THRESHOLD -3){
turn_left0;
} else if (SENSOR_2 < THRESHOLD +0){
go_forward;
} else if (SENSOR_2 < THRESHOLD +2){
turn_right0;
} else {
turn_right1;
}
Wait(STEP);
}
PlaySound(SOUND_CLICK);
-?の部分。~
交差点があり、ここだけは通常のライントレースでは突破でき...
一瞬だけ交差点を渡るプログラムに切り替えて攻略した。
counter=0;
while(counter < 1){ //交差点を一つ渡る
while(nOnline < nMAX){
if (SENSOR_2 < THRESHOLD -4){
turn_left1;
nOnline++;
} else {
if (SENSOR_2 < THRESHOLD -3){
turn_left0;
} else if (SENSOR_2 < THRESHOLD -0){
go_forward;
} else if (SENSOR_2 < THRESHOLD +2){
turn_right0;
} else {
turn_right1;
}
nOnline=0;
}
Wait(STEP);
}
short_break;
turn_right1; Wait(nMAX*STEP);
cross_line;
PlaySound(SOUND_UP);
nOnline=0;
counter++;
}
PlaySound(SOUND_CLICK);
-?の部分。~
前半部分は通常のライントレース。~
後半からは交差点(スタート地点)を認識すると決められた動...
缶を決められた位置に置くプログラム。~
ClearTimer(0);
while(FastTimer(0) <= time5){ //コース途中まで通常のラ...
if (SENSOR_2 < THRESHOLD -4){
turn_left1;
} else if (SENSOR_2 < THRESHOLD -3){
turn_left0;
} else if (SENSOR_2 < THRESHOLD +0){
go_forward;
} else if (SENSOR_2 < THRESHOLD +4){
turn_right0;
} else {
turn_right1;
}
Wait(STEP);
}
PlaySound(SOUND_CLICK);
counter=0;
while(counter < 1){ //スタートの位置を判断して次の命令に...
while(nOnline < nMAX){
if (SENSOR_2 < THRESHOLD -4){
turn_left1;
nOnline++;
} else {
if (SENSOR_2 < THRESHOLD -3){
turn_left0;
} else if (SENSOR_2 < THRESHOLD -0){
go_forward;
} else if (SENSOR_2 < THRESHOLD +2){
turn_right0;
} else {
turn_right1;
}
nOnline=0;
}
Wait(STEP);
}
OnRev(OUT_B); //反対方向を向く
OnRev(OUT_A);
OnFwd(OUT_C);
Wait(400);
Off(OUT_AC);
OnFwd(OUT_AC); //缶を置く位置まで進む
Wait(200);
OnFwd(OUT_B);
Off(OUT_AC);
Wait(100);
Off(OUT_B); //缶を離して後退する
OnRev(OUT_AC);
Wait(100);
OnRev(OUT_C); //反対方向を向く
OnFwd(OUT_A);
Wait(400);
counter++;
-缶を置き終わるとゴールへ向かう
while(true){ //ゴールまで通常のライントレース
if (SENSOR_2 < THRESHOLD -4){
turn_left1;
} else if (SENSOR_2 < THRESHOLD -3){
turn_left0;
} else if (SENSOR_2 < THRESHOLD +0){
go_forward;
} else if (SENSOR_2 < THRESHOLD +2){
turn_right0;
} else {
turn_right1;
}
Wait(STEP);
}
PlaySound(SOUND_CLICK);
}
}
*まとめ [#o78fb8f6]
**ロボット本体について [#ad75ad43]
-ハサミ部分の重量が予想以上に重く、ロボット本体のバランス...
**プログラムについて [#tcc7792e]
-括弧部分の文法ミスが多かったので、次回からはインデントを...
-部屋の明るさ、電池の残量、床の柔らかさなどで光センサが認...
-最後の缶を指定の位置に置くプログラムの作りが甘かったので...
ページ名: