2006a/B1/課題2右

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

前方のロボットに接触したら反転して進むプログラム(担当 しじみ)

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);
    }
    }
 }
}  

全体を通して苦労した点

難易度の高いプログラムだったので最初の方にエラーがでまくった。。。
while(true)の使い方がわからないまま丸写しでプログラムに挑んだためプログラムに異常が出てもどこをどうすればいいかさっぱりわからなかった。
その後ifやwhileの意味をNQC入門熟読する事によってクリアーした。
しかし上以外の原因として;や}が抜けているなどの何とも間抜けな理由も多々あった…。
どちらのプログラムも上記以外では問題なくプログラム自体は組めた。
しかしだからといって時間がかからなかった訳ではなく戻るときや相手をよけるときの時間などは前回の課題同様何回も試行錯誤を繰り返す事によって完成した。
よけるときの時間に細心の注意を払った。
さらに先ほどのプログラムでもいえるがタッチセンサーのプログラムをいれるとなぜかライントレースが
正しくできないときがしばしばありプログラミングに莫大な時間を要求した。
トレースする線の濃さに差があったため最初うまくライントレースしてくれなかった。
最初はプログラムを変更する事によって解決しようと思ったが実は線の濃さほ変えるだけでいいという事に気づいたためその後はすぐに解決した。

全体を通して工夫した点

最初のラインとレースの図の字が太すぎたため全くラインとレースとして機能しなかった…。
しかしその問題は新しい紙で絶妙な太さの線を作った事によって解決した。
タッチセンサーを反応しやすくするためロボにバンパーを多くつけて反応しやすくした。~
ロボットに安定度をつけるためにロボットをコンパクトにしつつ、(半分趣味で)タイヤのボリュームを多くした。
追い越す瞬間のプログラミングのとき三回角度を変更する事によって安全に追い越す事ができるようになった。

感想と次回野目標

今回右の班と左の班で合同に作業を行ったが、作業を細かく分担できた点は良かった。右の班と左の班でコミュニケーションが多くなった点も良かった。
しかし、そのためロボットしか作らない人や、ホームページしか更新してない人など作業に偏りが出てしまったため今度はみんながいろんな作業に手を出せるようにしたい。

ロボット図(担当 しじみ)

師匠

コメント

  • コメント欄を付け加えさせていただきました。プログラムではない文章に対して、先頭にスペースを入れてレイアウトするのは、あまり好ましくありません。 -- ゆき(TA)? 2006-06-16 (金) 16:22:11
  • どんな試行錯誤がなされたのかをもう少し詳しく書いてみましょう。 -- まいける(TA) 2006-06-24 (土) 13:18:51


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