2013a/Member/Jun/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*ロボットの紹介とコース攻略 [#j5cdf78b]
#ref(2013a/Member/Jun/Mission2/robocon2013a_3.png,50%)
↑コース
-課題1と同様タイマーを使い細かく時間を区切り、時間の調節をしやすいようにプログラムした
-ロボット1…はじめにボールを缶に当てるロボット
#ref(2013a/Member/Jun/Mission2/_36974_2_1.jpg,50%)
#ref(2013a/Member/Jun/Mission2/_36972_2_2.jpg,50%)
#ref(2013a/Member/Jun/Mission2/_36968_2_3.jpg,50%)
+ロボット2からボールをもらう位置に移動
+向きを調節し待機
+ボールを受け、向きを調節しパス
+ライントレースしボールを受け、またライントレース
+缶の前までライントレースしたらシュート
+後半はロボット2の前半と同様に動く
-ロボット2…はじめにボールを拾うロボット
#ref(2013a/Member/Jun/Mission2/DSC_0009_1_1.jpg,10%)
#ref(2013a/Member/Jun/Mission2/DSC_0011_1_2.jpg,10%)
#ref(2013a/Member/Jun/Mission2/DSC_0013_1_3.jpg,10%)
+ライントレースを繰り返し、ボールの前まで進む
+アームを上げボールをキャッチ
+再びライントレース
+パス、ライントレース、受けを繰り返す
+待機
+後半はロボット1と同様に動く
*プログラム説明 [#h70bcb3f]
-ロボット1
#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 arm_fwd set_power_N; OnFwd(OUT_B);Wait(30);Off(OUT_B); //アームを上げる
#define arm_bwd set_power_N; OnRev(OUT_B);Wait(30);Off(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 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;
sub followline_l () //左側のライントレース
{
int nOnline=0;
int MOVETIME;
MOVETIME=0;
SetSensor(SENSOR_2,SENSOR_LIGHT);
PlaySound(SOUND_UP);
MOVETIME=MOVETIME+600;
while(nOnline < nMAX && FastTimer(0)<=MOVETIME){
if(SENSOR_2< THRESHOLD -14) {
turn_left1;
nOnline++;
}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);
}
}
sub followline_r () //右側のライントレース
{
int nOnline=0;
int MOVETIME;
MOVETIME=0;
SetSensor(SENSOR_2,SENSOR_LIGHT);
MOVETIME=MOVETIME+600;
PlaySound(SOUND_DOWN);
while(nOnline < nMAX && FastTimer(0)<=MOVETIME){
if(SENSOR_2< THRESHOLD -14) {
turn_right1;
nOnline++;
}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);
}
}
sub followline_l1 () //もうひとつの左側のライントレース
{
int MOVETIME;
MOVETIME=0;
SetSensor(SENSOR_2,SENSOR_LIGHT);
MOVETIME=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);
}
}
}
sub followline_r1 () //もうひとつの右側のライントレース
{
int MOVETIME;
MOVETIME=0;
SetSensor(SENSOR_2,SENSOR_LIGHT);
MOVETIME=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();
}
-ロボット2
#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 arm_fwd set_power_N; OnFwd(OUT_B);Wait(30);Off(OUT_B); //アームを上げる
#define arm_bwd set_power_N; OnRev(OUT_B);Wait(30);Off(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;
sub followline_l () //左側をライントレース
{
int nOnline=0;
int MOVETIME;
MOVETIME=0;
SetSensor(SENSOR_2,SENSOR_LIGHT);
PlaySound(SOUND_UP);
MOVETIME=MOVETIME+500;
while(nOnline < nMAX && FastTimer(0)<=MOVETIME){
if(SENSOR_2< THRESHOLD -14) {
turn_left1;
nOnline++;
}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);
}
}
sub followline_r () //右側をライントレース
{
int nOnline=0;
int MOVETIME;
MOVETIME=0;
SetSensor(SENSOR_2,SENSOR_LIGHT);
MOVETIME=MOVETIME+500;
PlaySound(SOUND_DOWN);
while(nOnline < nMAX && FastTimer(0)<=MOVETIME){
if(SENSOR_2< THRESHOLD -14) {
turn_right1;
nOnline++;
}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);
}
}
sub followline_l1 () //もうひとつの左側のライントレース
{
int MOVETIME;
MOVETIME=0;
SetSensor(SENSOR_2,SENSOR_LIGHT);
MOVETIME=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);
}
*まとめ [#qc268b16]
-ライントレースをすべて時間で区切って操作していたため、調節することが大変だった。また、電池の残量にも気をつけなければならないので、非常に苦労した。
-時間が少しでもずれると2台のロボットの動きもすべてずれるので、安定してパスするということができなかった。
-結果的に私たちのチームは下から2番目の順位と残念ではあったが、みんなで協力した結果なのでしょうがない。
-このロボティクス入門ゼミは非常に難しい講義のように思えた。そして、多くのことを学ぶことができたので、これからの大学生活にいかしていきたい。
終了行:
*ロボットの紹介とコース攻略 [#j5cdf78b]
#ref(2013a/Member/Jun/Mission2/robocon2013a_3.png,50%)
↑コース
-課題1と同様タイマーを使い細かく時間を区切り、時間の調節をしやすいようにプログラムした
-ロボット1…はじめにボールを缶に当てるロボット
#ref(2013a/Member/Jun/Mission2/_36974_2_1.jpg,50%)
#ref(2013a/Member/Jun/Mission2/_36972_2_2.jpg,50%)
#ref(2013a/Member/Jun/Mission2/_36968_2_3.jpg,50%)
+ロボット2からボールをもらう位置に移動
+向きを調節し待機
+ボールを受け、向きを調節しパス
+ライントレースしボールを受け、またライントレース
+缶の前までライントレースしたらシュート
+後半はロボット2の前半と同様に動く
-ロボット2…はじめにボールを拾うロボット
#ref(2013a/Member/Jun/Mission2/DSC_0009_1_1.jpg,10%)
#ref(2013a/Member/Jun/Mission2/DSC_0011_1_2.jpg,10%)
#ref(2013a/Member/Jun/Mission2/DSC_0013_1_3.jpg,10%)
+ライントレースを繰り返し、ボールの前まで進む
+アームを上げボールをキャッチ
+再びライントレース
+パス、ライントレース、受けを繰り返す
+待機
+後半はロボット1と同様に動く
*プログラム説明 [#h70bcb3f]
-ロボット1
#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 arm_fwd set_power_N; OnFwd(OUT_B);Wait(30);Off(OUT_B); //アームを上げる
#define arm_bwd set_power_N; OnRev(OUT_B);Wait(30);Off(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 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;
sub followline_l () //左側のライントレース
{
int nOnline=0;
int MOVETIME;
MOVETIME=0;
SetSensor(SENSOR_2,SENSOR_LIGHT);
PlaySound(SOUND_UP);
MOVETIME=MOVETIME+600;
while(nOnline < nMAX && FastTimer(0)<=MOVETIME){
if(SENSOR_2< THRESHOLD -14) {
turn_left1;
nOnline++;
}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);
}
}
sub followline_r () //右側のライントレース
{
int nOnline=0;
int MOVETIME;
MOVETIME=0;
SetSensor(SENSOR_2,SENSOR_LIGHT);
MOVETIME=MOVETIME+600;
PlaySound(SOUND_DOWN);
while(nOnline < nMAX && FastTimer(0)<=MOVETIME){
if(SENSOR_2< THRESHOLD -14) {
turn_right1;
nOnline++;
}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);
}
}
sub followline_l1 () //もうひとつの左側のライントレース
{
int MOVETIME;
MOVETIME=0;
SetSensor(SENSOR_2,SENSOR_LIGHT);
MOVETIME=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);
}
}
}
sub followline_r1 () //もうひとつの右側のライントレース
{
int MOVETIME;
MOVETIME=0;
SetSensor(SENSOR_2,SENSOR_LIGHT);
MOVETIME=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();
}
-ロボット2
#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 arm_fwd set_power_N; OnFwd(OUT_B);Wait(30);Off(OUT_B); //アームを上げる
#define arm_bwd set_power_N; OnRev(OUT_B);Wait(30);Off(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;
sub followline_l () //左側をライントレース
{
int nOnline=0;
int MOVETIME;
MOVETIME=0;
SetSensor(SENSOR_2,SENSOR_LIGHT);
PlaySound(SOUND_UP);
MOVETIME=MOVETIME+500;
while(nOnline < nMAX && FastTimer(0)<=MOVETIME){
if(SENSOR_2< THRESHOLD -14) {
turn_left1;
nOnline++;
}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);
}
}
sub followline_r () //右側をライントレース
{
int nOnline=0;
int MOVETIME;
MOVETIME=0;
SetSensor(SENSOR_2,SENSOR_LIGHT);
MOVETIME=MOVETIME+500;
PlaySound(SOUND_DOWN);
while(nOnline < nMAX && FastTimer(0)<=MOVETIME){
if(SENSOR_2< THRESHOLD -14) {
turn_right1;
nOnline++;
}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);
}
}
sub followline_l1 () //もうひとつの左側のライントレース
{
int MOVETIME;
MOVETIME=0;
SetSensor(SENSOR_2,SENSOR_LIGHT);
MOVETIME=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);
}
*まとめ [#qc268b16]
-ライントレースをすべて時間で区切って操作していたため、調節することが大変だった。また、電池の残量にも気をつけなければならないので、非常に苦労した。
-時間が少しでもずれると2台のロボットの動きもすべてずれるので、安定してパスするということができなかった。
-結果的に私たちのチームは下から2番目の順位と残念ではあったが、みんなで協力した結果なのでしょうがない。
-このロボティクス入門ゼミは非常に難しい講義のように思えた。そして、多くのことを学ぶことができたので、これからの大学生活にいかしていきたい。
ページ名: