***[[学習ノート Hypodytes rubripinnis>2005/A5/学習ノート Hypodytes rubripinnis]] [#p6425e03] ***課題3:ラインをトレースするロボット[[課題3右>2005/A5/課題3右]] [#s9f82292] *ラインをトレースするプログラム『鬼ごっこ』 [#ua688a78] 作成者:Hypodytes rubripinnis **ラインをトレースしながら前進し(追いかけ)、前後のタッチセンサーにぶつかったら(捕まえたら)反転し、またトレースしながら前進するプログラムです。 [#he7f897c] #define go_straight OnFwd(OUT_A+OUT_C); //前進 #define turn_right SetPower(OUT_C,6);OnFwd(OUT_A);OnRev(OUT_C); //モーターパワーC=6,右旋回 #define turn_left SetPower(OUT_A,6);OnFwd(OUT_C);OnRev(OUT_A); //モーターパワーA=6,左旋回 task main () { SetSensor(SENSOR_1, SENSOR_LIGHT); //センサー1:光センサー SetSensor(SENSOR_2, SENSOR_TOUCH); //センサー2:タッチセンサー SetSensor(SENSOR_3, SENSOR_LIGHT); //センサー3:光センサー while (true) { if (SENSOR_2>=1) { //センサー2がONなら Off(OUT_A+OUT_C);Wait(100); //1秒停止 turn_right;Wait(65); //180°右旋回 } if (SENSOR_1<40) {turn_left;} //センサー1が黒なら左旋回 if (SENSOR_3<40) {turn_right;} //センサー3が黒なら右旋回 if ((SENSOR_1>40)&&(SENSOR_3>40)) {go_straight;} //センサー1,3が白なら前進 if ((SENSOR_1<40)&&(SENSOR_3<40)) { //センサー1,3が黒なら Off(OUT_A+OUT_C);Wait(100); //1秒停止 go_straight;Wait(15); //前進 } } } ''反省'' -普通にラインをトレースするだけではつまらないので、前後にタッチセンサーを付けて触れると反転して進むようにしました。 -コースのメインイメージは教習所で、クランクや一旦停止、縦列駐車(のつもり)を入れ、さらに松本をイメージして道幅を狭くし、難易度を上げました。 -センサーの取り付け位置は、本体の回転軸に近い方がいいと思いましたが、逆に誤作動するのである程度距離を置きました。(赤矢印) -クランクが最大の難関で、センサー同士を離し、低速で進めるとうまくいきますが、道幅が狭いためセンサーを近づけるわけにもいかず、遅くては話になりません。これを克服するため旋回する時に、旋回する側のモーターのトルクを6に落とし、位置がずれるのを防ぎ、旋回速度を上げました。 &ref(2005/A5/学習ノート Marbled Rockfish/ラインをトレースするロボット『鬼ごっこ』/robo3-2.JPG,80%); &ref(2005/A5/学習ノート Marbled Rockfish/ラインをトレースするロボット『鬼ごっこ』/robo3コース.JPG,30%); #comment