2006a/B1

練習課題2

壁にぶつかったら方向転換して走るロボットのプログラム

黒い線に沿って動くロボット

-6/9
今日は久しぶりに3人揃っての作業(^-^*)
光センサーを使って、黒い線に沿って動くロボットを作成しました。
荒木君の提案でコースは「M」に…
しかし、途中までは上手くいくものの「M」の溝?の部分で変な方向に…Σ(-。-*)o
只今プログラム試行錯誤中…がんばるぞー!!(がんばれ大ちゃん!);

試作プログラム(ライントレースのみ)

#define THRESHOLD 35~
#define  RUN_TIME 150~
task main  ()~
{~
SetSensor(SENSOR_1,SENSOR_LIGHT);~
ClearTimer(0);~
while (Timer(0)<RUN_TIME) {~
if(SENSOR_1<40){~
OnFwd(OUT_A);~
Off(OUT_C);~
}else{~
Off(OUT_A);~
OnFwd(OUT_C);~
}~




}~
Off(OUT_A+OUT_C);~
}~

この時点での反省点

  • とりあえずタッチセンサーとあわせる前にライントレースを完璧にしようという事で組んだプログラム。NQC入門道理にプログラミングしたところ右カーブに関して完璧!!だったが。。。。左カーブに突入したとたんライン読んでくれずマシンはぐるぐる円を描かくような行動を始める。。。。。しかも原因は未解明のまま。。。。そのためシングルセンサーでのラインとレースはあきらめてマシンを解体し直してダブルセンサーにした。その後又一からラインとレースのプログラムを組み直したのであった。。。まだまだ前途多難である。。。

前方のロボットに接触したら反転して進むプログラム

task main()~ [#n0f0d028]
SetSensor(SENSOR_1, SENSOR_LIGHT); 
SetSensor(SENSOR_3, SENSOR_LIGHT);
while(true)
 {
   if(SENSOR_1<40;  //センサ−1が黒のライン上に乗ったら
    {
 OnFwd(OUT_C);   //左折する    
 OnRev(OUT_A);
    }
   if(SENSOR_3<40) //センサ−3が黒のラインに乗ったら
    {
  OnFwd(OUT_A);   //右折する
  OnRev(OUT_C);
    }
   if((SENSOR_1>40)&&(SENSOR_3>40))  //もしどちらのセンサーも黒のライン上に乗ってなかったら
    {
    OnFwd(OUT_A+OUT_C);   //前進する
   if(SENSOR_2==1)     //もしセンサー2がぶつかったら
     {
      OnFwd(OUT_A) ;OnRev(OUT_C);  //反転する
      Wait(180);
      OnFwd(OUT_A+OUT_C);      //前進する
     }
    }
 }
}

その後右の班と合同プログラミング作成を行いなんとか上のプログラムを完成させました。
そのためプログラム内容は右の班と全く同じになりました。

前方のロボットに接触したらそのロボットを右側から追い抜いて(あるいは避けて通り)、再びライン上に戻って進むプログラム

task main()
{
SetSensor(SENSOR_1, SENSOR_LIGHT);  //左の光センサー
SetSensor(SENSOR_3, SENSOR_LIGHT);  //右の光センサー 
while(true)
 {
   if(SENSOR_1<40)    //もし左のセンサーがライン上に乗ったら
    {
 OnFwd(OUT_C);      //右折する
 OnRev(OUT_A);  
    }
   if(SENSOR_3<40)    //もし右のセンサ−がライン上に乗ったら
    {
  OnFwd(OUT_A);      //左折する
  OnRev(OUT_C);
    }
   if((SENSOR_1>40)&&(SENSOR_3>40))  //もしどちらのセンサーもライン上に乗らなかったら
    {
    OnFwd(OUT_A+OUT_C);  //前進する
   if(SENSOR_2==1)    //もしタッチセンサーがぶつかったら
    {
      OnRev(OUT_A+OUT_C);  //バックする
      Wait(40);
      OnFwd(OUT_A) ;OnRev(OUT_C);  //右折する
      Wait(60);
      OnFwd(OUT_A+OUT_C);      //前進する
      Wait(120);
      OnRev(OUT_A);OnFwd(OUT_C);   //左折する 
      Wait(60);
      OnFwd(OUT_A+OUT_C);  //前進する
      Wait(120);
      OnRev(OUT_A);OnFwd(OUT_C);   //左折する
      Wait(60);
    }

   }
 }
}

努力した点や工夫した点

  • ライントレースのプログラミングに力を入れた。どう入れたかというと当日くるのが遅かったうちらの班は「ほかの班の参考にすればいいじゃん」という考えも渦巻いている中ちゃんと自分たちの力のみで完成させた事。特に曲がったときにどういうプログラムを入力すれば思い道理に動くかという転移は特に力を入れて動画がないのでお見せできなかったがカーブに関しては当初かくかくでぶれながら動いてたのに今では相当滑らかに動く事が可能になった。
  • 上にも書いたがシングルセンサーでのラインとレースはできなかったためにダブルセンサーにしてやり直したこと。
  • 最初バンパーの接触がよすぎてマシンが少し揺れただけで反転してしまったためバンパーとマシンの間に輪ゴムを挟んで接触をよくした。
  • バンパーが斜めからぶつかると反応しなかったのでバンパーを横にワイドにして広い部分で反王できるようになった事。これによってきついカーブ中でぶつかってもきれいに反応できるようになった。
  • 紙を書く際にラインを太くしすぎたためダブルセンサーの上をまたぐ形になってしまった。それはもう一回紙を書き直す事によって問題解決!!

反省点および次の授業への課題

  • 合同で行ったとはいえほとんど右の班のしじみ君に頼ってしまったこと。これではわざわざ班を二つにした意味がないので次回の課題では他の人の協力を多少借りるような事があったとしても帆とんとどの作業を自分たちでできるようになりたい。
  • 最初タッチセンサーのコードの接触が悪くて全くタッチセンサーが反応してくれなかった事。そのため何回試運転をしても相手のマシンは回転してくれているのに自分の班のマシンは回転しないため気まずい雰囲気に。。。その後原因が判明したためコードを交換したらなんとか成功して買い決意しました。
  • 今回こっちの班でプログラムを前回携わった人が全くいなかったためプログラムを基礎から学び直さなければいけなかった。そのため普通の人より遥かに時間がかかった上に今回のプログラムの難易度の高さに挫折しかけた。しかし隣の班の人がプログラミングに協力してくれたためなんとかプログラムを完成させた。この授業は毎回プログラムが難しくなっていくので次の授業に対して不安がのこった。
  • シングルセンサーにした時に謎の原因でカーブに入ったとたんにラインをトレースしないというアクシデントに見舞われたがその原因について深く考え改善しようとはせずにすぐにほかの方法(シングルセンサーからダブルセンサーに変更)にしてしまった事。今回はこの方法がうまくいったがこれからさらに複雑になったときにしっかり問題を解決しなければいけない場面も出てくるので問題に対してはほったらかしにせずになんでそうなったかについて最後まで調べていきたい
  • 反転する際のプログラミングの時間計算をおろそかにしてしまったこと。ぶつかったらバックするタイプと違いこっちのタイプは時間を計算しなければいけない事を忘れてしまっていて本番直前に慌てて修正をしました。結果論からいえばなんとか成功しましたがこんな偶然はなかなかないと思うので授業に対してはしっかり計画をもって行動したい
  • 上の工夫点貳のっっているがマシンの解説をしているにもかかわらず写真がないこと。これはホームページをまとめるときに初めて気づいた事で今度の課題作成の際には写真を多く使って見る側にわかりやすく説明できるホームページを作りたい

コメントよろしくお願いします

  • 以前に比べてかなり充実しましたね [smile] 今度は写真期待しています。 -- まいける(TA) 2006-07-04 (火) 19:29:44
  • ちょっと誤字が多いのが気になります・・・ -- ゆき(TA)? 2006-07-07 (金) 14:57:55


添付ファイル: file060616_1545~01001.jpg 104件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-07-07 (金) 14:57:55