[[2006a/C2]] #hr CENTER:&size(25){課題2:黒い線に沿って動くロボット }; #hr CENTER:製作者:佐藤 堀 (五十音順) RIGHT:カウンタ&counter; RIGHT:[[ロボティクス入門ゼミ]] RIGHT:[[2006a/C2]] ------------ 目次 #contents ------- *この課題について [#n09e55e3] ------------- -この課題ではスピードと確実性をできる限り両立させたマシンとプログラムを作製しなければならない。 -コースのショートカットをしないようにする。 -主に[[NQC入門]]の[[ここ>NQC入門/5. センサを使う]]を参考にプログラムの開発を行う。 ----------- *この課題の解決への方針 予想される問題点 [#m118daf0] -この課題では、正確性と迅速性といった相反する性質をマシンに与えることが目標である。しかし、マシンの速度を上げると正確性が落ち、速度を落とせば正確性が上昇するが、迅速性が無くなる。ということが予想される。 - ------------ *マシンの紹介 [#ya896662] ***マシンの名前 [#saa248bf] 命名:BE▲GO -マシンがトレイスをしている感じを見る人により強く印象つけるために、マシンを小型化した。 -周回コースを2台のロボットが走行することが想定されるそうなので、ほかのマシンに想像を絶するくらい勢いよく、衝突というより激突されても、びくともしないように %%%重量感のあるマシン%%%に仕上げた。 -リアバンパーを取り付けたため、ほかのマシンにかなり勢いよく衝突されても、自機のタイヤと他機のタッチセンサー郡が絡まないようにした。 -また前方にもタイヤの保護帯を取り付けることにより、自機のタイヤと他機が絡みついたり、引っかかったりしないようにした。 -タッチセンサー郡を小型化することで、マシン全体を小さく、また正方形に近い形することが出来た。これにより、前方のマシンと衝突した場合でも、 %%%反転のための動きで、再び他機と衝突することを防ぐために自機を後退させる必要が無くなり、無駄なアクションを減らすことが出来る。%%% ---------------- **前方のロボットに接触したら反転して進む [#y7381ced] 前半後半に課題を分けさせてもらいますと、前半となりますこの課題。とりあえず、ライントレースをするプログラムにタッチセンサーに反応があった場合、反転することを命ずる部分を追加した。 ----------- ***プログラムの紹介 [#l69cf354] ------------------ モーターA 車体左側の動力担当 順回転で前進 モーターC 車体右側の動力担当 順回転で前進 センサー1 光センサー 車体左側の監視を担当 センサー3 光センサー 車体右側の監視を担当 サンサー2 タッチセンサー マシン前方の中央に設置 #define T 40 //TはTHRESHOLD(閾値)の頭文字 #define TIME 160 //マシンが反転するのにかかる時間、課題1と同様に直前に測定する。 task main() { SetSensor(SENSOR_1, SENSOR_LIGHT);//1a //センサー1(左)が光センサーであることを宣言 SetSensor(SENSOR_3, SENSOR_LIGHT);//3c //センサー3(右)も光センサーであることを宣言 SetSensor(SENSOR_2,SENSOR_TOUCH); //センサー2(中央)がタッチセンサーであることを宣言 while(true){ f((SENSOR_1>T)&&(SENSOR_3>T))//1&3w //センサー1(左)と2 (右)が白を感知した場合 { OnFwd(OUT_A+OUT_C);} 問題なし。ひたすら前進する if((SENSOR_1>T)&&(SENSOR_3<T)) //1w 3b //センサー1(左)が白 センサー3(右)が黒を感知した場合 (マシンが左にずれた場合) {OnRev(OUT_C); OnFwd(OUT_A);} 右へ急旋回し、軌道の修正を図る if((SENSOR_1<T)&&(SENSOR_3>T))//1b 3w //センサー1(左)が黒 センサー3(右)が白を感知した場合 (マシンが右にずれた場合) {OnRev(OUT_A); OnFwd(OUT_C);} //左へ急旋回し、軌道の修正を図る if((SENSOR_1<T)&&(SENSOR_3<T))//1b 3b //センサー1(左)と2(右)が黒を感知してしまった場合 {OnRev(OUT_A);OnFwd(OUT_C);} とりあえず回ってみる if(SENSOR_2==1) //タッチセンサーに反応があった場合 {OnRev(OUT_A);OnFwd(OUT_C);Wait(TIME);} //180°回転する 。 } } --------------------- **前方のロボットに接触したらそのロボットを右側から追い抜いて(あるいは避けて通り)、再びライン上に戻って進む [#j0585136] ---------------- ***プログラムの紹介と非常に丁寧で、見る者を戦慄させるくらい分かりやすい解説 [#fdff0abc] 期待してますよ!がんばってね! --------------- ---------------- RIGHT:[[ロボティクス入門ゼミ]] RIGHT:[[2006a/C2]] -------------------