ラインに沿って動くロボット

基本構造

最初は光センサーを二つ使って作りました。しかしそれでは急なカーブが曲がりきれませんでした。そこでいろいろ改良してみましましたが、なかなかうまくいかなかったので、これを機に光センサー1つのロボットに作り替えました。

光センサーが2つのときはラインを挟むようにして2つ付けました。プログラムは左のセンサーが黒いライン上にのると左に曲がる。右のセンサーが黒いライン上にのると右に曲がるというプログラムにしていました。しかしそれではライン上に乗ると戻ろうとするのですが、戻りきれないという状況でした。                     制作者:キンニクマン

最終装備

  • 光センサー    1つ
  • シングルバンパー
  • 四輪タイヤ

という基本構造にしました。

ロボットの写真
ロボットの写真

プログラム1 ぶつかったら逆走するロボット

task main(){
 SetSensor(SENSOR_2,SENSOR_LIGHT); 光センサー
 SetSensor(SENSOR_1,SENSOR_TOUCH); タッチセンサー
 
 while(true){
   if(SENSOR_1 ==1){            ぶつかったら
                            OnRev(OUT_A+OUT_C);
                            Wait(80);  バックして
                            OnFwd(OUT_A); 後ろを向く
                            OnRev(OUT_C);
                            Wait(250);
                            }          
         if(SENSOR_2<40){    道から外れたら
                      Off(OUT_A+OUT_C); 止まって
                      OnFwd(OUT_A);   回転する
                      OnRev(OUT_C);
                      }
                      else         ライン上では
                      {
                      Off(OUT_A+OUT_C);  止まって
                      OnFwd(OUT_C);   
                      OnRev(OUT_A);   回転(逆回り)
                      }
                     }
                    } 

走行方法

ライン外では左に旋回し、ライン上になると右に旋回するとい うプログラム。動きとしてはかなりがたがたしていますが、かなり確実にラインに沿って移動してくれます。

担当者

光センサーはプログラムも設計もキンニクマンが担当しました。 タッチセンサーはプログラムも設計もSENOBYが担当しました。

プログラム2 ぶつかったら避けて再びライントレースをするロボット

task main(){
 SetSensor(SENSOR_2,SENSOR_LIGHT); 光センサー
 SetSensor(SENSOR_1,SENSOR_TOUCH); タッチセンサー
 
 while(true){
if(SENSOR_1 ==1){            ぶつかったら
                OnRev(OUT_A+OUT_C);    バックして
                 Wait(120);         
                 OnFwd(OUT_A);  方向転換(ちょっと回転)
                 OnRev(OUT_C);
                 Wait(60);
                 OnFwd(OUT_A+OUT_C);     1台分くらい前進                       

         Wait(120);

                 OnFwd(OUT_C);          また回転して
                 OnRev(OUT_A);
                 Wait(80);
                 OnFwd(OUT_A+OUT_C);   前進して
                 Wait(120);         コースに戻る                                          
                 OnFwd(OUT_A);   再びラインとレース
                            }          
         if(SENSOR_2<40){        ライン上では
                      Off(OUT_A+OUT_C);  
                      OnFwd(OUT_A);    回転
                      OnRev(OUT_C);
                      }
                      else
                      {
                      Off(OUT_A+OUT_C);  ライン外では
                      OnFwd(OUT_C);   逆回転
                      OnRev(OUT_A);
                      }
                     }
                    } 
逆走タイプからプログラムを変えただけなので、基本的には上記    
とほとんど同じです。

走行方法

ライン外では左に旋回し、ライン上になると右に旋回するというプログラム。動きとしてはかなりがたがたしていますが、かなり確実にラインに沿って移動してくれます。

担当者

上記のプログラムを参考にSENOBYが担当しました。

コース設計について

コースは左グループ/右グループ兼用ということでした。左グループは2人で作業し、右グループは4人で作業していたため、右グループに製作をお願いしました。

全体を通して苦労したこと

みんな忙しい時期なうえ、時間がなかなか合わず、みんなで集まって作業することができなかったので、今日は○○が作業する日というような形で進めていきました。しかしそうすると、どこがどのプログラムなのか、持ち運び中に壊れたがどこに何がつけてあったのかわからなくなったりして、時間がかかりました。  プログラム的にはやはり光センサー2つで急なカーブを曲がることでした。結果的にはタイヤの接続部分がどこか壊れており、途中でがたがたし、それが原因で曲がれないということでした。 しかしそれに気づかずプログラム上の問題と考えていたため、インターネットでスピードを遅くするプログラムを調べて使うなどしました。結果的にそれらはうまくいきませんでしたが、if/whileなどのほかにもいろいろなテクニックがあるということがわかり、勉強になりました。

工夫した点

タイヤが故障していても、急なカーブが曲がれるように(現在も直ってません) 1.できるだけバックをつかわはない 2.より敏感に反応できるプログラム(センサーを1つにして、左に動くという命令と右に動くという単純な命令)にしたこと 初めはタイヤの故障かと思っていたが分解してタイヤなしで動かしたり、違うタイヤをつけるなどした結果、たぶんエンジンが壊れているということがわかりました。原因は不明ですが、タイヤを回す棒の部分がきちんと回転しないといった状態です。

  • もう少し簡潔・明快に説明できるとさらに良いですね。 -- ゆき(TA)? 2006-06-30 (金) 15:39:29

反省

エンジンの故障をカバーできるプログラミングをすること。 次回は回転が必要なので前輪がないということはそのぶん、回転にかかる時間がかかるため、少し作動時間を長くとらなければならない。

  • 光センサー2つをどのように付けたのか、タイヤのどこがどのように壊れていたから、具体的にどんな動きをしたのか、そのあたりをもう少し書いてみるといいでしょう。 -- まいける(TA) 2006-07-01 (土) 12:10:57
  • エンジンが壊れているとは、壊れていたというか設計ミスだと思うのですがどうでしょうか? あと「エンジン」という表現はちょっと違う気がするのですが・・・ -- まいける(TA) 2006-08-06 (日) 18:24:23


添付ファイル: fileDSC00112.JPG 195件 [詳細] fileDSC00145.jpg 202件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-08-06 (日) 18:24:23 (4766d)