目次
ミッション遂行のためのロボット作成(詳細は下記掲載)自分はB→A http://yakushi.shinshu-u.ac.jp/robotics/?2015a%2FMission2
最初の段階では車体が大きかったので細かいところが動けずラインを追えないことがあった。そこで小回りを利かせるために車体を小さくしタイヤも小さくすることで問題を解消した。。また、後ろのタイヤを にすることでさらに動きやすくなった。
モーターの力がそのまま伝わってしまうとアームが勢いよく回りすぎてしまうのでギア比を調節することでアームが早く上下しすぎてしまうのを抑えた。また、ピンポン玉を持ち上げて運ぶことで安定してゴールまで運ぶことを可能にした。アーム部分はピンポン玉の大きさに合うよう調節した。
光センサーがあまりに上だと正確な値を読み取るのが難しく判断も遅くなった。そこでなるべく地面に近づけるため本体の前部分の地面すれすれにつけた。
#define THRESHOLD 47 //しきい値の基準 #define HIPOWER 5 #define LOWPOWER 3 #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 go_back setpower_H;OnRev(OUT_AC);Wait(t); //後進 #define turn_left1 set_power_L;OnFwd(OUT_C); OnRev(OUT_A); //ゆっくりと左旋回 #define turn_left0 set_power_L;OnFwd(OUT_C); //ゆっくりと左に曲がる #define turn_right0 set_power_L;OnFwd(OUT_A); //ゆっくりと右に曲がる #define turn_right1 set_power_L;OnFwd(OUT_A); OnRev(OUT_C);//ゆっくりと右旋回 #define STEP 1 //1度の判断でロボットを動かす時間 #define nMAX 9 //連続して旋回できる最大値 #define mMAX 300 //連続して旋回できる最大値 #define short_break Off(OUT_AC); Wait(1000); //ロボットを止めておく #define CROSS_TIME 100 //交差点を渡る時間 #define cross_line OnFwd(OUT_AC);Wait(CROSS_TIME);short_break //交差点を渡る #define ClearTimer(0); #define up OnRev(OUT_B);Wait(60); //アームを上にあげる #define down OnFwd(OUT_B);Wait(60); //アームを下に下げる #define shoot OnFwd(OUT_AC);Wait(60);Off(OUT_AC); //シュートする
task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); ClearTimer(0); while (FastTimer(0)<560) //この時間の間ライントレースをする。また、交差点は認識しない。 {if (SENSOR_1 < THRESHOLD-4) { turn_left1; //この範囲のとき左に旋回する } else { if (SENSOR_1 < THRESHOLD-1) { turn_left0; //この範囲のとき左に曲がる } else if (SENSOR_1 < THRESHOLD+1) { go_forward; //この範囲の時前進する } else if (SENSOR_1 < THRESHOLD+4) { turn_right0; //この範囲の時右に曲がる } else{ turn_right1;} //この範囲の時右に旋回する } Wait(STEP); } short_break;
SetSensor(SENSOR_1,SENSOR_LIGHT); int nOnline=0; ClearTimer(0); while (FastTimer(0)<2000) { //ここから交差点を渡るプログラム while (nOnline < nMAX) { if (SENSOR_1 < THRESHOLD-7) { turn_left1; //この範囲のとき左に旋回する nOnline++; } else { if (SENSOR_1 < THRESHOLD-3) { turn_left0; //この範囲のとき左に曲がる } else if (SENSOR_1 < THRESHOLD+3) { go_forward; //この範囲のとき前進する } else if (SENSOR_1 < THRESHOLD+7) { turn_right0; } else { turn_right1; //この範囲のとき右に旋回する } nOnline=0; } Wait(STEP); } short_break; turn_right1; Wait(nMAX*STEP); cross_line; nOnline=0; ClearTimer(0); while (FastTimer(0)<50){down;} //この時間の間にアームをおろす ClearTimer(0); while (FastTimer(0)<3000) SetSensor(SENSOR_1,SENSOR_LIGHT); ClearTimer(0);
while (FastTimer(0)<1500) //この時間の間またライントレースを行う {if (SENSOR_1 < THRESHOLD-4) { turn_left1; //左旋回 } else { if (SENSOR_1 < THRESHOLD-1) { turn_left0; //左に左折 } else if (SENSOR_1 < THRESHOLD+1) { go_forward; //前進 } else if (SENSOR_1 < THRESHOLD+4) { turn_right0; //右に右折 } else{ turn_right1;} //右旋回 } Wait(STEP); } short_break;
ClearTimer(0); while (FastTimer(0)<80){ Off(OUT_AC);Wait(400); up; shoot;} //この時間の間アームを上げシュートを放つ } }
今回はロボット製作よりもプログラミングが本当に大変だった。班のメンバーでもロボットの形はみんな似たような形を作ろうとしていたので割とすぐに出来上がった。しかしプログラミングは前回に比べかなり難しいものが出てきてどこで何を使えばいいのかが全然わからず苦労した。交差点のプログラミングを理解し、実際にロボットを動かすまでに6時間強かかり、ボールのシュートや時間計測などにもかなりの時間がかかり相当きつかった。