***[[学習ノート 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


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS