- 追加された行はこの色です。
- 削除された行はこの色です。
課題
決められたコースを走り、決められたゴールにボールをゴールする。
ロボットの説明
#ref(2015a/Member/Ryota35/Mission2/robo1.jpg,20%,ロボ1)
#ref(2015a/Member/Ryota35/Mission2/_S__30285834.jpg,30%,ロボ2)
タイヤを二つにすることで左右の幅を狭くすることで旋回半径がより小さくなる
タッチセンサーによるバンパーとアームで囲い込むようにしてボールを逃さないようにした。またセンサーに取り付けられた腕を長くすることによりボールが軽く反応しにくいという問題を解決した
光センサーは旋回軸に近く地面に近いところに設置すことにより感度を上げた。
プログラミング
task main(){
SetSensor(SENSOR_2,SENSOR_LIGHT);
SetSensor(SENSOR_2,SENSOR_LIGHT);
SetSensor(SENSOR_1,SENSOR_TOUCH);
SetSensor(SENSOR_1,SENSOR_TOUCH);
int i = 0;
int i = 0;
int j = 0;
int j = 0;
int T = 0;
int T = 0;
ClearTimer(1);
ClearTimer(1);
while(1){
while(1){
if(SENSOR_1 == 1){
if(SENSOR_1 == 1){ //タッチセンサーの識別
i++;
i++;
ClearTimer(0);
ClearTimer(0);
}
}
if(i == 1){
if(i == 1){
OnFwd(OUT_B);
OnFwd(OUT_B); //ボール捕獲
Wait(50);
Wait(50);
Off(OUT_B);
Off(OUT_B);
i++;
i++;
ClearTimer(0);
ClearTimer(0);
}
}
if(SENSOR_2 > 50 && SENSOR_2 <55){
if(SENSOR_2 > 50 && SENSOR_2 <55){ 以下ライントレース
OnRev(OUT_A);
OnRev(OUT_A);
Off(OUT_C);
Off(OUT_C);
ClearTimer(0);
ClearTimer(0);
}if(SENSOR_2 >56){
}if(SENSOR_2 >56){
int t = FastTimer(0);
int t = FastTimer(0); //白色を認識する時間
int T = FastTimer(1);
int T = FastTimer(1);
if((T > 1000 && T < 1800) || (T > 2500 && T <3300)){
if((T > 1000 && T < 1800) || (T > 2500 && T <3300)){//三叉路及び交差点があるであろう時間帯
if(t >20){
PlaySound(SOUND_UP);
if(t >20) //三叉路及び交差点
Off(OUT_AC);
Wait(200);
PlaySound(SOUND_UP);
ClearTimer(0);
Off(OUT_AC);
}else{
Wait(200);
OnRev(OUT_A);
ClearTimer(0);
OnFwd(OUT_C);
}else{
}
OnRev(OUT_A);
}
OnFwd(OUT_C);
if(T > 3700){
}
if(t > 20){
}
PlaySound(SOUND_UP);
if(T > 3700){ //最後のT字路
Off(OUT_AC);
if(t > 20){
OnFwd(OUT_B);
PlaySound(SOUND_UP);
Wait(50);
Off(OUT_AC);
Off(OUT_B);
OnFwd(OUT_B);
OnRev(OUT_AC);
Wait(50);
Wait(100);
Off(OUT_B);
Off(OUT_AC);
OnRev(OUT_AC);
Wait(1000);
Wait(100);
ClearTimer(0);
Off(OUT_AC);
}else{
Wait(1000);
OnRev(OUT_A);
ClearTimer(0);
OnFwd(OUT_C);
}else{
}
OnRev(OUT_A);
}else{
OnRev(OUT_A);
OnFwd(OUT_C);
OnFwd(OUT_C);
}
}
}else{
}
OnRev(OUT_A);
else if(SENSOR_2 < 49 && SENSOR_2 >45){
OnFwd(OUT_C);
OnFwd(OUT_A);
}
OnRev(OUT_C);
}
ClearTimer(0);
else if(SENSOR_2 < 49 && SENSOR_2 >45){
}
OnFwd(OUT_A);
else if(SENSOR_2 < 40){
OnRev(OUT_C);
OnRev(OUT_AC);
ClearTimer(0);
ClearTimer(0);
}
}
else if(SENSOR_2 < 40){
else{
OnRev(OUT_AC);
OnRev(OUT_C);
ClearTimer(0);
}
Off(OUT_A);
else{
ClearTimer(0);
OnRev(OUT_C);
}
Off(OUT_A);
}
ClearTimer(0);
}
}
}
工夫した点
三叉路及び交差点では極端に白色を認識する時間が長くなるため苦戦した。急カーブのところで反応したり、三叉路及び交差点を識別できずにうまく動かなかった。そのためタイマーを用いてロボットが三叉路及び交差点の近くにいるであろう時間帯のみで三叉路及び交差点の識別を有効にしたらうまく行った。
変数iを用いることによってボールを捕獲したらタッチセンサーが反応してもアームを動作察せないプログラムを制作した。
問題と改善(上記以外のことで)
・シュートの動作をさせるため、どこでシュート動作になるかというのに苦戦した。
・赤外線のセンサーをより性能をよくするため地面になるべく近いところにしようとしたが、それにより地面と擦ったことがあった。