2013a/Member/Toki/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*ロボットの紹介 [#obe56021]
+最初にボールを取りに行きパスをするロボット
-後ろから見たロボット(全体的に前に重さがあったのでライン...
#ref(./DSC_0013.jpg,10%,画像の説明)
-横から見たロボット1(後ろの水色のパーツでボールをパスでき...
#ref(./DSC_0012.jpg,10%,画像の説明)
-横から見たロボット2(後ろの水色のパーツ以外でライントレー...
#ref(./DSC_0011.jpg,10%,画像の説明)
-後ろのタイヤの部分(タイヤを固定するとラインとレースの際...
#ref(./DSC_0010.jpg,10%,画像の説明)
-ロボットの前の方(水色のものはライトセンサー)
#ref(./DSC_0009.jpg,10%,画像の説明)
-ボールを運ぶ・取る・渡す部分(見づらいがライトセンサーの...
#ref(./DSC_0008.jpg,10%,画像の説明)
+シュートをするロボット(ほぼつくりは一緒)
-ボールを運ぶ・取る・渡す部分(一つ目のロボットに比べてシ...
#ref(./_36974.jpg,30%,画像の説明)
-横からのロボット(タイヤの部分が1つ目のロボットが違う)
#ref(./_36972.jpg,30%,画像の説明)
-タイヤの部分(こっちはタイヤが二つで安定させている・軽い)
#ref(./_36968.jpg,30%,画像の説明)
*コースの攻略方法 [#abd3b534]
#ref(./robocon2013a.png,50%,画像の説明)
-コースの攻略するために利用したもの
+ライトセンサーによるライントレース
+タイマーで時間を区切りパスなどの動作を挟む
+カウンターで交差点の通過
*プログラムの説明 [#hd4ddfb8]
+工夫したとこ
-サブルーチンを使用した
-タイマーを使用し動作をきめた
ライントレース用のサブルーチンにサウンドを作りどの、ライ...
+最初にシュートを打つロボット
問題点・・・・もうひとつのロボットからのパスのタイミング...
#define THRESHOLD 42 // しきい値(黒白判断するために利用...
#define HIPOWER 7 // ハイパワー(直進時に使用)
#define LOWPOWER 2 // ローパワー(直進時以外に使用)
#define set_power_H SetPower(OUT_AC,HIPOWER);
#define set_power_L SetPower(OUT_AC,LOWPOWER);
#define set_power_N SetPower(OUT_B,LOWPOWER);
#define go_fwd set_power_H; OnFwd(OUT_AC); // 直進
#define turn_left1 set_power_L ;\ // 左折(曲がりやすい)
OnFwd(OUT_C);OnRev(OUT_A);
#define turn_left0 set_power_L ;\ // 左折(曲がりにくい)
OnFwd(OUT_C);Off(OUT_A);
#define turn_right0 set_power_L ;\ // 右折(曲がりやすい)
OnFwd(OUT_A);Off(OUT_C);
#define turn_right1 set_power_L ;\ // 右折(曲がりにくい)
OnFwd(OUT_A);OnRev(OUT_C);
#define STEP 1
#define nMAX 3 // カウンターの最大値
#define short_break Off(OUT_AC); Wait(100);
#define CROSS_TIME 300 // 交差点をわたる時間
#define cross_line set_power_L;\ // 交差点を渡る動作
OnFwd(OUT_A);OnRev(OUT_C);\
Wait(CROSS_TIME);short_break;
/* 黒を続けてnMAX回繰り返さない&タイマーが6秒を超えるま...
sub followline_l ()
{
int nOnline=0; // カウンターをリセット
int MOVETIME;
MOVETIME=0; // MOVETIMEに0を代入
SetSensor(SENSOR_2,SENSOR_LIGHT);
PlaySound(SOUND_UP); // 音を鳴らす(どのサブルーチンを...
MOVETIME=MOVETIME+600; // MOVETIMEに600を代入
while(nOnline < nMAX && FastTimer(0)<=MOVETIME){
if(SENSOR_2< THRESHOLD -14) {
turn_left1;
nOnline++; // カウンタに1プラス
}else{
if(SENSOR_2< THRESHOLD -10){
turn_left0;
}else if(SENSOR_2< THRESHOLD -7){
go_fwd;
}else if(SENSOR_2< THRESHOLD -1){
turn_right0;
}else{
turn_right1;
}
nOnline=0; // カウンタをリセット
}
Wait(STEP*10);
}
}
/* 黒を続けてnMAX回繰り返さない&タイマーが6秒を超えるま...
sub followline_r ()
{
int nOnline=0; // カウンタをリセット
int MOVETIME;
MOVETIME=0; // MOVETIMEをリセット
SetSensor(SENSOR_2,SENSOR_LIGHT);
MOVETIME=MOVETIME+600; // MOVETIMEに600を代入
PlaySound(SOUND_DOWN); // 音を鳴らす
while(nOnline < nMAX && FastTimer(0)<=MOVETIME){
if(SENSOR_2< THRESHOLD -14) {
turn_right1;
nOnline++; // カウンタに1プラス
}else{
if(SENSOR_2< THRESHOLD -10){
turn_right0;
}else if(SENSOR_2< THRESHOLD -7){
go_fwd;
}else if(SENSOR_2< THRESHOLD -1){
turn_left0;
}else{
turn_left1;
}
nOnline=0; // カウンタをリセット
}
Wait(STEP*10);
}
}
/* タイマーが6秒を超えるまで通常のライントレースをする(...
sub followline_l1 ()
{
int MOVETIME;
MOVETIME=0; // MOVETIMEをリセット
SetSensor(SENSOR_2,SENSOR_LIGHT);
MOVETIME=MOVETIME+450; // MOVETIMEに450を代入
PlaySound(SOUND_LOW_BEEP); // 音を鳴らす
while(FastTimer(0)<=MOVETIME){
if(SENSOR_2< THRESHOLD -14) {
turn_left1;
}else{
if(SENSOR_2< THRESHOLD -10){
turn_left0;
}else if(SENSOR_2< THRESHOLD -7){
go_fwd;
}else if(SENSOR_2< THRESHOLD -1){
turn_right0;
}else{
turn_right1;
}
Wait(STEP*10);
}
}
}
/* タイマーが6秒を超えるまで通常のライントレースをする(...
sub followline_r1 ()
{
int MOVETIME;
MOVETIME=0; // MOVETIMEをリセット
SetSensor(SENSOR_2,SENSOR_LIGHT);
MOVETIME=MOVETIME+150; // MOVETIMEに150を代入
PlaySound(SOUND_CLICK); // 音を鳴らす
while(FastTimer(0)<=MOVETIME){
if(SENSOR_2< THRESHOLD -14) {
turn_right1;
}else{
if(SENSOR_2< THRESHOLD -10){
turn_right0;
}else if(SENSOR_2< THRESHOLD -7){
go_fwd;
}else if(SENSOR_2< THRESHOLD +1){
turn_left0;
}else{
turn_left1;
}
Wait(STEP*10);
}
}
}
/* ボールをとる */
sub catch_1 ()
{
turn_right1;Wait(100);
Off(OUT_AC);Wait(50);
go_fwd;Wait(50);
Off(OUT_AC);Wait(50);
OnFwd(OUT_B);Wait(15);
Off(OUT_B);Wait(10);
turn_left1;Wait(100);
Off(OUT_AC);Wait(50);
}
/* ボールをパスする */
sub throw_1 ()
{
OnFwd(OUT_B);Wait(10);
Off(OUT_B);Wait(10);
}
/* パスを受ける */
sub get_1()
{
OnFwd(OUT_B);Wait(10);
Off(OUT_B);Wait(300);
OnRev(OUT_B);Wait(40);Off(OUT_B);Wait(10);
}
task main ()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
ClearTimer(0);
int nOnline;
int MOVETIME;
turn_left1;Wait(180);
Off(OUT_AC);Wait(10);
ClearTimer(0); // タイマーリセット
while(FastTimer(0)<=150){
followline_r1();
}
Off(OUT_AC);
Wait(3500);
turn_left1;Wait(80);
Off(OUT_AC);Wait(100);
get_1();
turn_left1;Wait(50);
Off(OUT_AC);Wait(800);
throw_1();
turn_left1;Wait(80);
Off(OUT_AC);Wait(10);
ClearTimer(0); // タイマーリセット
while(FastTimer(0)<=450){
followline_l1();
}
Off(OUT_AC);
Wait(50);
ClearTimer(0); // タイマーリセット
turn_right1;Wait(120);Off(OUT_AC);Wait(10);
get_1();
turn_left1;Wait(130);Off(OUT_AC);Wait(10);
ClearTimer(0); // タイマーリセット
while(FastTimer(0)<=600){
followline_l();
}
Off(OUT_AC);
Wait(50);
turn_left1;Wait(30);Off(OUT_AC);Wait(10);
throw_1();
turn_right1;Wait(100);Off(OUT_AC);Wait(10);
ClearTimer(0); // タイマーリセット
while(FastTimer(0)<=600){
followline_l();
}
Off(OUT_AC);
Wait(50);
ClearTimer(0); // タイマーリセット
catch_1();
}
+最初に球を取りに行くロボット
問題点・・・・・最初の球をとれるの確率がひくい+一本目の...
#define THRESHOLD 39 // しきい値
#define HIPOWER 7 // ハイパワー
#define LOWPOWER 2 // ローパワー
#define set_power_H SetPower(OUT_AC,HIPOWER);
#define set_power_L SetPower(OUT_AC,LOWPOWER);
#define set_power_N SetPower(OUT_B,LOWPOWER);
#define go_fwd set_power_H; OnFwd(OUT_AC); // 直進
#define throw set_power_H; OnFwd(OUT_B); // ボールをはなす
#define turn_left1 set_power_L ;\ // 左折(曲がりやすい)
OnFwd(OUT_C);OnRev(OUT_A);
#define turn_left0 set_power_L ;\ // 左折(曲がりにくい)
OnFwd(OUT_C);Off(OUT_A);
#define turn_right0 set_power_L ;\ // 右折(曲がりにくい)
OnFwd(OUT_A);Off(OUT_C);
#define turn_right1 set_power_L ;\ // 右折(曲がりやすい)
OnFwd(OUT_A);OnRev(OUT_C);
#define STEP 1
#define nMAX 200 // カウンタの最大値
#define short_break Off(OUT_AC); Wait(100);
#define CROSS_TIME 300 // 交差点を渡る時間
#define cross_line set_power_L;\
OnFwd(OUT_A);OnRev(OUT_C);\
Wait(CROSS_TIME);short_break;
/* 黒を続けてnMAX回繰り返さない&タイマーが5秒を超えるま...
sub followline_l ()
{
int nOnline=0; // タイマーをリセット
int MOVETIME;
MOVETIME=0; // MOVETIMEをリセット
SetSensor(SENSOR_2,SENSOR_LIGHT);
PlaySound(SOUND_UP); // 音を鳴らす
MOVETIME=MOVETIME+500; // MOVETIMEに500を代入
while(nOnline < nMAX && FastTimer(0)<=MOVETIME){
if(SENSOR_2< THRESHOLD -14) {
turn_left1;
nOnline++; // カウンタに1プラス
}else{
if(SENSOR_2< THRESHOLD -10){
turn_left0;
}else if(SENSOR_2< THRESHOLD -7){
go_fwd;
}else if(SENSOR_2< THRESHOLD -1){
turn_right0;
}else{
turn_right1;
}
nOnline=0; // カウンタのリセット
}
Wait(STEP*10);
}
}
/* 黒を続けてnMAX回繰り返さない&タイマーが5秒を超えるま...
sub followline_r ()
{
int nOnline=0; // カウンタのリセット
int MOVETIME;
MOVETIME=0; // MOVETIMEのリセット
SetSensor(SENSOR_2,SENSOR_LIGHT);
MOVETIME=MOVETIME+500; // MOVETIMEに500を代入
PlaySound(SOUND_DOWN); // 音を鳴らす
while(nOnline < nMAX && FastTimer(0)<=MOVETIME){
if(SENSOR_2< THRESHOLD -14) {
turn_right1;
nOnline++; // カウンタに1プラス
}else{
if(SENSOR_2< THRESHOLD -10){
turn_right0;
}else if(SENSOR_2< THRESHOLD -7){
go_fwd;
}else if(SENSOR_2< THRESHOLD -1){
turn_left0;
}else{
turn_left1;
}
nOnline=0; // カウンタをリセット
}
Wait(STEP*10);
}
}
/* タイマーが5秒を超えるまで通常のライントレースをする(...
sub followline_l1 ()
{
int MOVETIME;
MOVETIME=0; // MOVETIMEのリセット
SetSensor(SENSOR_2,SENSOR_LIGHT);
MOVETIME=MOVETIME+500; MOVETIMEに500を代入
PlaySound(SOUND_LOW_BEEP); // 音を鳴らす
while(FastTimer(0)<=MOVETIME){
if(SENSOR_2< THRESHOLD -14) {
turn_left1;
}else{
if(SENSOR_2< THRESHOLD -10){
turn_left0;
}else if(SENSOR_2< THRESHOLD -7){
go_fwd;
}else if(SENSOR_2< THRESHOLD -1){
turn_right0;
}else{
turn_right1;
}
Wait(STEP*10);
}
}
}
/* ボールをとる */
sub catch_1 ()
{
turn_right1;Wait(125);
Off(OUT_AC);Wait(50);
go_fwd;Wait(20);
Off(OUT_AC);Wait(10);
OnFwd(OUT_B);Wait(11);
Off(OUT_B);Wait(10);
go_fwd;Wait(170);
Off(OUT_AC);Wait(1);
OnRev(OUT_B);Wait(10);
Off(OUT_B);Wait(50);
turn_left1;Wait(20);
Off(OUT_AC);Wait(2);
}
/* ボールをパスする */
sub throw_1 ()
{
throw;Wait(50);
Off(OUT_B);Wait(10);
}
/* パスをうけとる */
sub get_1 ()
{
OnFwd(OUT_B);Wait(10);
Off(OUT_B);Wait(600);
OnRev(OUT_B);Wait(50);
Off(OUT_B);Wait(50);
}
task main ()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
ClearTimer(0);
int nOnline; // カウンタリセット
int MOVETIME;
while(FastTimer(0)<=500){
followline_l();
}
Off(OUT_AC);
Wait(1);
ClearTimer(0); // タイマーのリセット
while(FastTimer(0)<=500){
followline_l();
}
Off(OUT_AC);
Wait(1);
catch_1();
ClearTimer(0); // タイマーのリセット
while(FastTimer(0)<=500){
followline_l();
}
Off(OUT_AC);
Wait(1);
ClearTimer(0); // タイマーのリセット
turn_right1;Wait(10);
while(FastTimer(0)<=300){
followline_l1();
}
Off(OUT_AC);Wait(1);
ClearTimer(0); // タイマーのリセット
turn_left1;
Wait(30);
turn_right1;Wait(30);
while(FastTimer(0)<=500){
followline_r();
}
Off(OUT_AC);
Wait(1);
ClearTimer(0); // タイマーのリセット
while(FastTimer(0)<=500){
followline_r();
}
Off(OUT_AC);
Wait(1);
ClearTimer(0); // タイマーのリセット
turn_left1;Wait(200);
Off(OUT_AC);Wait(50);
throw_1();
turn_right1;Wait(80);
Off(OUT_AC);Wait(10);
while(FastTimer(0)<=500){
followline_r();
}
Off(OUT_AC);
Wait(1);
ClearTimer(0); // タイマーのリセット
while(FastTimer(0)<=500){
followline_r();
}
Off(OUT_AC);
Wait(1);
PlaySound(SOUND_CLICK); // 音を鳴らす
ClearTimer(0); // タイマーのリセット
turn_left1;Wait(180);
Off(OUT_AC);Wait(50);
get_1();
turn_right1;Wait(60);
Off(OUT_AC);Wait(600);
throw_1();
Off(OUT_B);Wait(50);
Off(OUT_AC);Wait(50);
}
*まとめ [#ac33e858]
-時間ですべての動作をコントロールしていたので、電池の量に...
-私達のロボットは、球を取ることができてもうまくパスを出す...
-ロボコンでも下から2番めの順位で残念だった。この課題のた...
-
*ゼミの感想 [#j25b4ece]
-このゼミはとても難しい。とくに課題の時、ロボットをまず作...
-これから、こういったプログラム等に関わる人には、いい勉強...
-ロボットを作成したり解体したりする際、もっと綺麗にパーツ...
終了行:
*ロボットの紹介 [#obe56021]
+最初にボールを取りに行きパスをするロボット
-後ろから見たロボット(全体的に前に重さがあったのでライン...
#ref(./DSC_0013.jpg,10%,画像の説明)
-横から見たロボット1(後ろの水色のパーツでボールをパスでき...
#ref(./DSC_0012.jpg,10%,画像の説明)
-横から見たロボット2(後ろの水色のパーツ以外でライントレー...
#ref(./DSC_0011.jpg,10%,画像の説明)
-後ろのタイヤの部分(タイヤを固定するとラインとレースの際...
#ref(./DSC_0010.jpg,10%,画像の説明)
-ロボットの前の方(水色のものはライトセンサー)
#ref(./DSC_0009.jpg,10%,画像の説明)
-ボールを運ぶ・取る・渡す部分(見づらいがライトセンサーの...
#ref(./DSC_0008.jpg,10%,画像の説明)
+シュートをするロボット(ほぼつくりは一緒)
-ボールを運ぶ・取る・渡す部分(一つ目のロボットに比べてシ...
#ref(./_36974.jpg,30%,画像の説明)
-横からのロボット(タイヤの部分が1つ目のロボットが違う)
#ref(./_36972.jpg,30%,画像の説明)
-タイヤの部分(こっちはタイヤが二つで安定させている・軽い)
#ref(./_36968.jpg,30%,画像の説明)
*コースの攻略方法 [#abd3b534]
#ref(./robocon2013a.png,50%,画像の説明)
-コースの攻略するために利用したもの
+ライトセンサーによるライントレース
+タイマーで時間を区切りパスなどの動作を挟む
+カウンターで交差点の通過
*プログラムの説明 [#hd4ddfb8]
+工夫したとこ
-サブルーチンを使用した
-タイマーを使用し動作をきめた
ライントレース用のサブルーチンにサウンドを作りどの、ライ...
+最初にシュートを打つロボット
問題点・・・・もうひとつのロボットからのパスのタイミング...
#define THRESHOLD 42 // しきい値(黒白判断するために利用...
#define HIPOWER 7 // ハイパワー(直進時に使用)
#define LOWPOWER 2 // ローパワー(直進時以外に使用)
#define set_power_H SetPower(OUT_AC,HIPOWER);
#define set_power_L SetPower(OUT_AC,LOWPOWER);
#define set_power_N SetPower(OUT_B,LOWPOWER);
#define go_fwd set_power_H; OnFwd(OUT_AC); // 直進
#define turn_left1 set_power_L ;\ // 左折(曲がりやすい)
OnFwd(OUT_C);OnRev(OUT_A);
#define turn_left0 set_power_L ;\ // 左折(曲がりにくい)
OnFwd(OUT_C);Off(OUT_A);
#define turn_right0 set_power_L ;\ // 右折(曲がりやすい)
OnFwd(OUT_A);Off(OUT_C);
#define turn_right1 set_power_L ;\ // 右折(曲がりにくい)
OnFwd(OUT_A);OnRev(OUT_C);
#define STEP 1
#define nMAX 3 // カウンターの最大値
#define short_break Off(OUT_AC); Wait(100);
#define CROSS_TIME 300 // 交差点をわたる時間
#define cross_line set_power_L;\ // 交差点を渡る動作
OnFwd(OUT_A);OnRev(OUT_C);\
Wait(CROSS_TIME);short_break;
/* 黒を続けてnMAX回繰り返さない&タイマーが6秒を超えるま...
sub followline_l ()
{
int nOnline=0; // カウンターをリセット
int MOVETIME;
MOVETIME=0; // MOVETIMEに0を代入
SetSensor(SENSOR_2,SENSOR_LIGHT);
PlaySound(SOUND_UP); // 音を鳴らす(どのサブルーチンを...
MOVETIME=MOVETIME+600; // MOVETIMEに600を代入
while(nOnline < nMAX && FastTimer(0)<=MOVETIME){
if(SENSOR_2< THRESHOLD -14) {
turn_left1;
nOnline++; // カウンタに1プラス
}else{
if(SENSOR_2< THRESHOLD -10){
turn_left0;
}else if(SENSOR_2< THRESHOLD -7){
go_fwd;
}else if(SENSOR_2< THRESHOLD -1){
turn_right0;
}else{
turn_right1;
}
nOnline=0; // カウンタをリセット
}
Wait(STEP*10);
}
}
/* 黒を続けてnMAX回繰り返さない&タイマーが6秒を超えるま...
sub followline_r ()
{
int nOnline=0; // カウンタをリセット
int MOVETIME;
MOVETIME=0; // MOVETIMEをリセット
SetSensor(SENSOR_2,SENSOR_LIGHT);
MOVETIME=MOVETIME+600; // MOVETIMEに600を代入
PlaySound(SOUND_DOWN); // 音を鳴らす
while(nOnline < nMAX && FastTimer(0)<=MOVETIME){
if(SENSOR_2< THRESHOLD -14) {
turn_right1;
nOnline++; // カウンタに1プラス
}else{
if(SENSOR_2< THRESHOLD -10){
turn_right0;
}else if(SENSOR_2< THRESHOLD -7){
go_fwd;
}else if(SENSOR_2< THRESHOLD -1){
turn_left0;
}else{
turn_left1;
}
nOnline=0; // カウンタをリセット
}
Wait(STEP*10);
}
}
/* タイマーが6秒を超えるまで通常のライントレースをする(...
sub followline_l1 ()
{
int MOVETIME;
MOVETIME=0; // MOVETIMEをリセット
SetSensor(SENSOR_2,SENSOR_LIGHT);
MOVETIME=MOVETIME+450; // MOVETIMEに450を代入
PlaySound(SOUND_LOW_BEEP); // 音を鳴らす
while(FastTimer(0)<=MOVETIME){
if(SENSOR_2< THRESHOLD -14) {
turn_left1;
}else{
if(SENSOR_2< THRESHOLD -10){
turn_left0;
}else if(SENSOR_2< THRESHOLD -7){
go_fwd;
}else if(SENSOR_2< THRESHOLD -1){
turn_right0;
}else{
turn_right1;
}
Wait(STEP*10);
}
}
}
/* タイマーが6秒を超えるまで通常のライントレースをする(...
sub followline_r1 ()
{
int MOVETIME;
MOVETIME=0; // MOVETIMEをリセット
SetSensor(SENSOR_2,SENSOR_LIGHT);
MOVETIME=MOVETIME+150; // MOVETIMEに150を代入
PlaySound(SOUND_CLICK); // 音を鳴らす
while(FastTimer(0)<=MOVETIME){
if(SENSOR_2< THRESHOLD -14) {
turn_right1;
}else{
if(SENSOR_2< THRESHOLD -10){
turn_right0;
}else if(SENSOR_2< THRESHOLD -7){
go_fwd;
}else if(SENSOR_2< THRESHOLD +1){
turn_left0;
}else{
turn_left1;
}
Wait(STEP*10);
}
}
}
/* ボールをとる */
sub catch_1 ()
{
turn_right1;Wait(100);
Off(OUT_AC);Wait(50);
go_fwd;Wait(50);
Off(OUT_AC);Wait(50);
OnFwd(OUT_B);Wait(15);
Off(OUT_B);Wait(10);
turn_left1;Wait(100);
Off(OUT_AC);Wait(50);
}
/* ボールをパスする */
sub throw_1 ()
{
OnFwd(OUT_B);Wait(10);
Off(OUT_B);Wait(10);
}
/* パスを受ける */
sub get_1()
{
OnFwd(OUT_B);Wait(10);
Off(OUT_B);Wait(300);
OnRev(OUT_B);Wait(40);Off(OUT_B);Wait(10);
}
task main ()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
ClearTimer(0);
int nOnline;
int MOVETIME;
turn_left1;Wait(180);
Off(OUT_AC);Wait(10);
ClearTimer(0); // タイマーリセット
while(FastTimer(0)<=150){
followline_r1();
}
Off(OUT_AC);
Wait(3500);
turn_left1;Wait(80);
Off(OUT_AC);Wait(100);
get_1();
turn_left1;Wait(50);
Off(OUT_AC);Wait(800);
throw_1();
turn_left1;Wait(80);
Off(OUT_AC);Wait(10);
ClearTimer(0); // タイマーリセット
while(FastTimer(0)<=450){
followline_l1();
}
Off(OUT_AC);
Wait(50);
ClearTimer(0); // タイマーリセット
turn_right1;Wait(120);Off(OUT_AC);Wait(10);
get_1();
turn_left1;Wait(130);Off(OUT_AC);Wait(10);
ClearTimer(0); // タイマーリセット
while(FastTimer(0)<=600){
followline_l();
}
Off(OUT_AC);
Wait(50);
turn_left1;Wait(30);Off(OUT_AC);Wait(10);
throw_1();
turn_right1;Wait(100);Off(OUT_AC);Wait(10);
ClearTimer(0); // タイマーリセット
while(FastTimer(0)<=600){
followline_l();
}
Off(OUT_AC);
Wait(50);
ClearTimer(0); // タイマーリセット
catch_1();
}
+最初に球を取りに行くロボット
問題点・・・・・最初の球をとれるの確率がひくい+一本目の...
#define THRESHOLD 39 // しきい値
#define HIPOWER 7 // ハイパワー
#define LOWPOWER 2 // ローパワー
#define set_power_H SetPower(OUT_AC,HIPOWER);
#define set_power_L SetPower(OUT_AC,LOWPOWER);
#define set_power_N SetPower(OUT_B,LOWPOWER);
#define go_fwd set_power_H; OnFwd(OUT_AC); // 直進
#define throw set_power_H; OnFwd(OUT_B); // ボールをはなす
#define turn_left1 set_power_L ;\ // 左折(曲がりやすい)
OnFwd(OUT_C);OnRev(OUT_A);
#define turn_left0 set_power_L ;\ // 左折(曲がりにくい)
OnFwd(OUT_C);Off(OUT_A);
#define turn_right0 set_power_L ;\ // 右折(曲がりにくい)
OnFwd(OUT_A);Off(OUT_C);
#define turn_right1 set_power_L ;\ // 右折(曲がりやすい)
OnFwd(OUT_A);OnRev(OUT_C);
#define STEP 1
#define nMAX 200 // カウンタの最大値
#define short_break Off(OUT_AC); Wait(100);
#define CROSS_TIME 300 // 交差点を渡る時間
#define cross_line set_power_L;\
OnFwd(OUT_A);OnRev(OUT_C);\
Wait(CROSS_TIME);short_break;
/* 黒を続けてnMAX回繰り返さない&タイマーが5秒を超えるま...
sub followline_l ()
{
int nOnline=0; // タイマーをリセット
int MOVETIME;
MOVETIME=0; // MOVETIMEをリセット
SetSensor(SENSOR_2,SENSOR_LIGHT);
PlaySound(SOUND_UP); // 音を鳴らす
MOVETIME=MOVETIME+500; // MOVETIMEに500を代入
while(nOnline < nMAX && FastTimer(0)<=MOVETIME){
if(SENSOR_2< THRESHOLD -14) {
turn_left1;
nOnline++; // カウンタに1プラス
}else{
if(SENSOR_2< THRESHOLD -10){
turn_left0;
}else if(SENSOR_2< THRESHOLD -7){
go_fwd;
}else if(SENSOR_2< THRESHOLD -1){
turn_right0;
}else{
turn_right1;
}
nOnline=0; // カウンタのリセット
}
Wait(STEP*10);
}
}
/* 黒を続けてnMAX回繰り返さない&タイマーが5秒を超えるま...
sub followline_r ()
{
int nOnline=0; // カウンタのリセット
int MOVETIME;
MOVETIME=0; // MOVETIMEのリセット
SetSensor(SENSOR_2,SENSOR_LIGHT);
MOVETIME=MOVETIME+500; // MOVETIMEに500を代入
PlaySound(SOUND_DOWN); // 音を鳴らす
while(nOnline < nMAX && FastTimer(0)<=MOVETIME){
if(SENSOR_2< THRESHOLD -14) {
turn_right1;
nOnline++; // カウンタに1プラス
}else{
if(SENSOR_2< THRESHOLD -10){
turn_right0;
}else if(SENSOR_2< THRESHOLD -7){
go_fwd;
}else if(SENSOR_2< THRESHOLD -1){
turn_left0;
}else{
turn_left1;
}
nOnline=0; // カウンタをリセット
}
Wait(STEP*10);
}
}
/* タイマーが5秒を超えるまで通常のライントレースをする(...
sub followline_l1 ()
{
int MOVETIME;
MOVETIME=0; // MOVETIMEのリセット
SetSensor(SENSOR_2,SENSOR_LIGHT);
MOVETIME=MOVETIME+500; MOVETIMEに500を代入
PlaySound(SOUND_LOW_BEEP); // 音を鳴らす
while(FastTimer(0)<=MOVETIME){
if(SENSOR_2< THRESHOLD -14) {
turn_left1;
}else{
if(SENSOR_2< THRESHOLD -10){
turn_left0;
}else if(SENSOR_2< THRESHOLD -7){
go_fwd;
}else if(SENSOR_2< THRESHOLD -1){
turn_right0;
}else{
turn_right1;
}
Wait(STEP*10);
}
}
}
/* ボールをとる */
sub catch_1 ()
{
turn_right1;Wait(125);
Off(OUT_AC);Wait(50);
go_fwd;Wait(20);
Off(OUT_AC);Wait(10);
OnFwd(OUT_B);Wait(11);
Off(OUT_B);Wait(10);
go_fwd;Wait(170);
Off(OUT_AC);Wait(1);
OnRev(OUT_B);Wait(10);
Off(OUT_B);Wait(50);
turn_left1;Wait(20);
Off(OUT_AC);Wait(2);
}
/* ボールをパスする */
sub throw_1 ()
{
throw;Wait(50);
Off(OUT_B);Wait(10);
}
/* パスをうけとる */
sub get_1 ()
{
OnFwd(OUT_B);Wait(10);
Off(OUT_B);Wait(600);
OnRev(OUT_B);Wait(50);
Off(OUT_B);Wait(50);
}
task main ()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
ClearTimer(0);
int nOnline; // カウンタリセット
int MOVETIME;
while(FastTimer(0)<=500){
followline_l();
}
Off(OUT_AC);
Wait(1);
ClearTimer(0); // タイマーのリセット
while(FastTimer(0)<=500){
followline_l();
}
Off(OUT_AC);
Wait(1);
catch_1();
ClearTimer(0); // タイマーのリセット
while(FastTimer(0)<=500){
followline_l();
}
Off(OUT_AC);
Wait(1);
ClearTimer(0); // タイマーのリセット
turn_right1;Wait(10);
while(FastTimer(0)<=300){
followline_l1();
}
Off(OUT_AC);Wait(1);
ClearTimer(0); // タイマーのリセット
turn_left1;
Wait(30);
turn_right1;Wait(30);
while(FastTimer(0)<=500){
followline_r();
}
Off(OUT_AC);
Wait(1);
ClearTimer(0); // タイマーのリセット
while(FastTimer(0)<=500){
followline_r();
}
Off(OUT_AC);
Wait(1);
ClearTimer(0); // タイマーのリセット
turn_left1;Wait(200);
Off(OUT_AC);Wait(50);
throw_1();
turn_right1;Wait(80);
Off(OUT_AC);Wait(10);
while(FastTimer(0)<=500){
followline_r();
}
Off(OUT_AC);
Wait(1);
ClearTimer(0); // タイマーのリセット
while(FastTimer(0)<=500){
followline_r();
}
Off(OUT_AC);
Wait(1);
PlaySound(SOUND_CLICK); // 音を鳴らす
ClearTimer(0); // タイマーのリセット
turn_left1;Wait(180);
Off(OUT_AC);Wait(50);
get_1();
turn_right1;Wait(60);
Off(OUT_AC);Wait(600);
throw_1();
Off(OUT_B);Wait(50);
Off(OUT_AC);Wait(50);
}
*まとめ [#ac33e858]
-時間ですべての動作をコントロールしていたので、電池の量に...
-私達のロボットは、球を取ることができてもうまくパスを出す...
-ロボコンでも下から2番めの順位で残念だった。この課題のた...
-
*ゼミの感想 [#j25b4ece]
-このゼミはとても難しい。とくに課題の時、ロボットをまず作...
-これから、こういったプログラム等に関わる人には、いい勉強...
-ロボットを作成したり解体したりする際、もっと綺麗にパーツ...
ページ名: