もくじ
各チームで作成したコースを1周するロボットを製作せよ。交差点以外のコース上に350mlの空の空き缶を2個以上おき、空き缶にぶつかった時には次のような動作するプログラムを作成せよ。(他のメンバーと重ならないように一人一つのプログラムを作成する)
1. 空き缶をコース上に戻して再びコースに戻って進む 2. 空き缶を次の交差点まで運んで行き、その交差点に空き缶を残してさらにコースに沿って進む 3. 奇数回目に空き缶に遭遇したら、その場で反転して進み、偶数回目に遭遇したら、空き缶を押しのけて進む
ただし、
* 速さと正確さを追求すること * コースを1周したら自動的に止まること * 交差点では一時停止すること
広範囲に受け止めることができるバンパーを製作しました
センサーの接触加減の調節が大変でした
光センサーは挟み込みを採用することで正確さをあげました 右の写真は改良によりセンサーの間を狭くしました
車体は小回りがきくようになるべくコンパクトにまとめました
軸車輪をつけることにより本体と回転の動作に安定性が増しました
ここからは改良Ver.の説明です
タッチセンサーはアームからバンパーにかえました
缶を支えるアームは長く幅を意識してつくりました
#define THRESHOLD 40 //闘値を40に設定 #define go_back(t) OnRev(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C); //後退 #define t_left(t) OnRev(OUT_A);OnFwd(OUT_C);Wait(t);Off(OUT_A+OUT_C); //左旋回
task main(){ SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_2,SENSOR_TOUCH); SetSensor(SENSOR_3,SENSOR_LIGHT); int move_time=0; while(move_time <5);{ if((SENSOR_1>THRESHOLD)&&(SENSOR_3>THRESHOLD)){ //光センサが2個とも白なら、直進 OnFwd(OUT_A+OUT_C); } if (SENSOR_1>THRESHOLD){ //左だけ白なら、右にターン OnFwd(OUT_A); OnRev(OUT_C); } if (SENSOR_3>THRESHOLD){ //右だけ白なら、左にターン OnFwd(OUT_C); OnRev(OUT_A); } if ((SENSOR_1<THRESHOLD)&&(SENSOR_3<THRESHOLD)){ //両方線上にあるとき、1秒止まり前進する Off(OUT_A+OUT_C); Wait(100); OnFwd(OUT_A+OUT_C); move_time++; } if (SENSOR_2 == 1){ //タッチセンサーが押された場合 t_left(90); //左に180度旋回 go_back(100); //1秒下がり、空き缶を離す t_left(90); //左に180度旋回 Off(OUT_A+OUT_C); } } }
交差点まで障害物を運ぶ #define turn_ba OnFwd(OUT_C);OnRev(OUT_A);Wait(61);Off(OUT_A+OUT_C); //90°回転 #define turn OnFwd(OUT_A);OnRev(OUT_C);Wait(61);Off(OUT_A+OUT_C); //90°回転 #define go OnFwd(OUT_A+OUT_C); //直進 #define ba OnRev(OUT_A+OUT_C); //後退 #define THRESHOLD 40 //闘値を40に設定
task main () { SetSensor(SENSOR_1,SENSOR_LIGHT); //光センサーを1にセット SetSensor(SENSOR_2,SENSOR_TOUCH); //タッチセンサーを2にセット SetSensor(SENSOR_3,SENSOR_LIGHT); //光センサーを3にセット
start line_trace; while (true) { start line_trace; //ライントレースを始める } } task line_trace() {go; while (true) { if((SENSOR_1<THRESHOLD)&&( SENSOR_3<THRESHOLD))//センサ−1と3が黒線上にきたら1.0秒まってから直進する {Off(OUT_A+OUT_C);Wait(100);turn;go;Wait(100);ba;Wait(100);turn_ba;go;Wait(100);} if(SENSOR_1<THRESHOLD)//センサー1が黒線上にきたら {OnFwd(OUT_C);OnRev(OUT_A);//左へ曲がる } if(SENSOR_3<THRESHOLD)//センサー3が黒線上にきたら {OnFwd(OUT_A);OnRev(OUT_C);}//右へ曲がる if((SENSOR_1>THRESHOLD)&&( SENSOR_3>THRESHOLD)) {go;} } }
カーブをスムーズに曲がるために後輪をひとつにした。 チームでの連携が上手くいかなかったためライントレースができずほとんどぶっつけ本番状態だった。
長々と書くのも大変だったので、とにかく簡単にまとめてみました。空き缶を線の上に戻すために180度ロボを回転させなくてはいけなかったがその調整が大変で苦労した。
なるべく簡単にまとめるようにしました。闘値が左右で微妙に違ったので何度か調整したけど結局両方一緒でうまくいきました。交差点では必ず障害物をどける作業を行ってしまいます。
改良前のアームでは空き缶を掴むには広すぎて旋回時に外に出てしまったり、旋回後に線の上に上手く戻せなかったためアームの幅を狭め確実に収まるようにした。 その結果失敗はなくなった。
時間的余裕はあったが、前回に比べプログラムが結構難しくて大変だった。
慣れないプログラムの作業だったので時間が足りませんでした。
コメントをどうぞ!!