メンバー | 役割 |
クーロン茶 | ロボット制作担当 |
ru- | ロボット制作・プログラム担当 |
おかじ | 主にロボット制作担当。その他プログラムも |
たいよう | プログラム制作、HP制作などの補助 |
滝沢クリステル | HP担当 |
音案 | ゴールに運ぶロボットのプログラム制作・HP担当 |
ルールについてはこちらを見てください↓
http://yakushi.shinshu-u.ac.jp/robotics/?2006a%2F%A5%ED%A5%DC%A5%B3%A5%F3#content_1_2
見ての通りスタート地点にはラインが無い、過去の経験から見てライントレースと言っても正確に直角に曲がったりまっすぐ進めるわけではない。そこで私たちはロボットを1台ではなく2台使うことにして、ラインの無いスタート地点で缶の受け渡しをすることに決めた。
缶をゴールに運ぶロボットはline countを使おうかと考えもしましたが缶を取るロボットよりも精密さは必要としないために使い慣れているプログラムを使いました。
缶を取るロボットも時間の都合などの事情があってライントレースを使わずに缶を運ぶことにしました。結局、当初の作戦は全く意味のないものになりました。
しかしロボットの大きさの関係上、その地点でしか受け渡しができないし、プログラムもそれが一番作りやすいと考えそのままの作戦で本番に臨みました。
缶を枠の真ん中にとらえて運ぶと言う仕組み、しかしこの枠だと少しでもプログラムに誤差があると隣の缶に引っかかってアームが降りきらないと言うことが起きるので本番は違うアームを使用することにした。
それでできたのがこれ、これならば多少のズレが生じても缶をつかんでくれる。
前面中央にタッチセンサーがありこれに反応したときにアームが閉じる このロボットが缶を受け取れればほぼ100%ゴールに入れられる。
うまくいけばこうなるはずだった。運搬車が缶を押し出して、ゴールに入れるロボットのセンサーに缶をあててそれで受け渡しをする。タッチセンサーが作動しなかったのはおそらく押し方が弱すぎたためだろう。
task main() { OnFwd(OUT_A+OUT_C); //前進 Wait(320); //3,2秒間行動 OnFwd(OUT_A);OnRev(OUT_C); //左旋回 Wait(175); //90度左回転 OnFwd(OUT_A+OUT_C); //前進 Wait(320); //3,2秒行動 OnFwd(OUT_A);OnRev(OUT_C); //左旋回 Wait(168); //90度左回転 OnFwd(OUT_A+OUT_C); //前進 Wait(190); //1,9秒行動 缶到着 Off(OUT_A+OUT_C); //モーター停止 Wait(50); //0,5秒待機 OnFwd(OUT_B); //アーム下げる Wait(110); //缶キャッチ Off(OUT_B); //アーム下げたまま待機 OnRev(OUT_A+OUT_C); //後退 Wait(210); //2,1秒行動(ここから缶を考慮して時間を行 きと変えている) Off(OUT_A+OUT_C); //モーター停止 OnFwd(OUT_A); OnRev(OUT_C); //右旋回 Wait(165); //90度右回転 OnFwd(OUT_A+OUT_C); //前進 Wait(345); //3,45秒行動 OnFwd(OUT_C); OnRev(OUT_A); //65度左旋回(缶にぶつからずショート カット) Wait(165); //65度左回転 OnFwd(OUT_A+OUT_C); //前進 Wait(200); //2秒行動 Off(OUT_A+OUT_C); //モーター停止 OnRev(OUT_B); //アーム上げる Wait(200); //缶を手放す Off(OUT_B); //モーター停止 OnRev(OUT_A+OUT_C); //後退 Wait(50); //缶の後ろに回る OnFwd(OUT_B); //アーム下げる Wait(200); //缶を押すために下げる Off(OUT_B); //モーター停止 OnFwd(OUT_A+OUT_C); //前進 Wait(300 ); //3秒間缶を押し、2機目に缶を渡す Off(OUT_A+OUT_C); //一時停止(缶を完全に渡すため) OnRev(OUT_A+OUT_C); //後退(2機目にぶつかるから) Wait(200); //2秒後退 Off(OUT_A+OUT_C); //モーター停止 OnRev(OUT_B); //次のテストに備えアームを上げる Wait(200); //2秒間上げる Off(OUT_B); } //モーター停止 ロボコンへ。
task main() { int line_count; SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1がライトセンサーであると宣言 SetSensor(SENSOR_2,SENSOR_TOUCH); //センサー2がタッチセンサーであると宣言 SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー3がライトセンサーであると宣言 line_count=0; //ラインカウントを0にする OnFwd(OUT_A+OUT_C); //前進 until((SENSOR_1 < 40) && (SENSOR_3 < 40)) //センサー1とセンサ−3の値が40以下になったら Off(OUT_A+OUT_C); //モーター停止 Wait(50); //0、5秒待機 line_count=line_count+1; //ラインカウント+1 OnFwd(OUT_A+OUT_C); //再び前進 until((SENSOR_1 < 40) && (SENSOR_3 < 40)) //センサー1とセンサ−3の値が40以下になったら line_count=line_count+1; //ラインカウント+1 until(line_count==2); //ラインカウントが2になったら OnFwd(OUT_A); //90度右旋回 OnRev(OUT_C); Wait(160); OnFwd(OUT_C); //再び前進 until((SENSOR_1 < 40) && (SENSOR_3 < 40)) //センサー1とセンサ−3の値が40以下になったら line_count=line_count+1; //ラインカウント+1 OnFwd(OUT_A+OUT_C); //前進 until((SENSOR_1 < 40) && (SENSOR_3 < 40)) //センサー1とセンサ−3の値が40以下になったら line_count=line_count+1; //ラインカウント+1 until(line_count==4); //ラインカウントが4になったら OnFwd(OUT_A); //90度右旋回 OnRev(OUT_C); Wait(160); OnFwd(OUT_C); //再び前進 until((SENSOR_1 < 40) && (SENSOR_3 < 40)) //センサー1とセンサ−3の値が40以下になったら line_count=line_count+1; //ラインカウント+1 until(line_count==5); //ラインカウントが5になったら OnFwd(OUT_A+OUT_C); //前進 Wait(50); //0、5秒待機 Off(OUT_A+OUT_C); //モーター停止 Wait(50); //0、5秒待機 OnFwd(OUT_B); //アームをおろす Wait(120); Off(OUT_B); Wait(100); //1秒待機 OnRev(OUT_A+OUT_C); //後退 until((SENSOR_1 < 40) && (SENSOR_3 < 40)) //センサー1とセンサ−3の値が40以下になったら line_count=line_count+1; //ラインカウント+1 OnRev(OUT_A+OUT_C); //前進 until((SENSOR_1 < 40) && (SENSOR_3 < 40)) //センサー1とセンサ−3の値が40以下になったら line_count=line_count+1; //ラインカウント+1 until(line_count==7); //ラインカウントが7になったら OnFwd(OUT_A); //90度右旋回 OnRev(OUT_C); Wait(160); OnFwd(OUT_C); //再び前進 until((SENSOR_1 < 40) && (SENSOR_3 < 40)) //センサー1とセンサ−3の値が40以下になったら line_count=line_count+1; //ラインカウント+1 OnFwd(OUT_A+OUT_C); //前進 until((SENSOR_1 < 40) && (SENSOR_3 < 40)) //センサー1とセンサ−3の値が40以下になったら line_count=line_count+1; //ラインカウント+1 until(line_count==9); //ラインカウントが9になったら OnFwd(OUT_C); //90度左旋回 OnRev(OUT_A); Wait(160); OnFwd(OUT_A); //再び前進 Wait(300); //3秒行動 Off(OUT_A+OUT_C); //モーター停止 Wait(100); //1秒待機 OnRev(OUT_B); //アームをあげる Wait(150); Off(OUT_B); Wait(100); //1秒待機 OnRev(OUT_A+OUT_C); //後退 Wait(100); //1秒行動 Off(OUT_A+OUT_C); //モーター停止 Wait(50); //0、5秒待機 OnFwd(OUT_B); //アームをおろす Wait(120); Off(OUT_B); Wait(100); //1秒待機 OnFwd(OUT_A+OUT_C); //前進 Wait(200); //2秒行動 Off(OUT_A+OUT_C); //モーター停止 Wait(50); //0、5秒待機 OnRev(OUT_B); //アームをあげる Wait(150); Off(OUT_B); }<line countを使用したプログラムについて>
task main() { SetSensor(SENSOR_2,SENSOR_TOUCH);//センサ−2がタッチセンサーであると宣言 while(true) { if(SENSOR_2==1)//もしセンサー2が押されたら { OnFwd(OUT_B);//アームを閉じて Wait(200); OnRev(OUT_A+OUT_C);//2.5秒後退 Wait(250); OnFwd(OUT_A);//1.3秒左回転 OnRev(OUT_C); Wait(130); Off(OUT_A+OUT_C); OnRev(OUT_A+OUT_C);//2.8秒後退 Wait(280); Off(OUT_A+OUT_C); OnRev(OUT_A);//1.5秒右回転 OnFwd(OUT_C); Wait(150); Off(OUT_A+OUT_C); OnRev(OUT_B);//アームを開く Wait(200); OnFwd(OUT_A+OUT_C); //2.5秒前進 Wait(250); Off(OUT_A+OUT_C);ここで缶はゴールに入る(予定)。
OnRev(OUT_A+OUT_C);//1秒後退 Wait(100); Off(OUT_A+OUT_C); OnFwd(OUT_B);//アームを閉じる Wait(200); Off(OUT_B); OnFwd(OUT_A);//1.3秒左回転 OnRev(OUT_C); Wait(130); Off(OUT_A+OUT_C); OnFwd(OUT_A+OUT_C);//2.9秒前進 Wait(290); Off(OUT_A+OUT_C); OnRev(OUT_A);//1.2秒右回転 OnFwd(OUT_C); Wait(120); Off(OUT_A+OUT_C); OnRev(OUT_B);//アームを開く Wait(100); Off(OUT_B); OnFwd(OUT_A+OUT_C);//2秒前進 Wait(200); Off(OUT_A+OUT_C); } } }本当はこのプログラムのあとに光センサーを使って正確にもとの位置に戻そうとするプログラムを作ったのですが、スタート直後に急に前進したりという誤作動を起こすために削除。