*ロボット [#ha238ab6]
今回のロボットは光を感知して光の方に進んでいくロボットです。前の方に光感知センサーをつけて実行しました。回転している間で光が最大になった点をどのように記録するのかということを考えることが面白いと思います。
*プログラミング [#xccd0564]
今回のポイントは光の最大値を感知した記録してその分戻ることで光源のある場所に向かえるようにしたことです。課題2に比べると圧倒的に簡単でした。

 #define right OnFwd(OUT_C);OnRev(OUT_A);
 #define right OnFwd(OUT_A);OnRev(OUT_C);
今回の定義は右曲がりと左曲がりだけで十分でした。

 task main()
 {
   SetSensor(SENSOR_2,SENSOR_LIGHT);

   int runtime=700 //一周する時間
   int lightpower = 10 //仮の最大値
   int move_time = 0 //仮の最大値を与える時間

   ClearTimer(0);
   right; //時計回りに旋回
   while(FastTimer(0)<move_time){
   if(SENSOR_0 > lightpower)
     move_time=SENSOR_0;
     move_time=Fasttimer
   }
 }
 Off(OUT_AC);
 Wait(100);
 left;
 Wait(runtime-move_time);
 Off(OUT_AC);
 OnRev(OUT_B);Wait(25);Off(OUT_B); //アームを開く
 OnFwd(OUT_AC);Wait(80);Off(OUT_AC); //前進

もし、センサーがlightpowerより大きな値を観測した場合はmove_timeをリセットします。そして最終的に最大だった光を観測した場所への時間逆に回転させます。
*感想 [#yd34e2ca]
今回は割とプログラミングの方法がわかってきたせいか意外と簡単にできました。ロボットのプログラミングで面白いと思った点は普段僕たち人間が何気なくしていることをプログラミング表すことでロボットは動くんだということです。僕たちが光源の場所を特定するためには一瞬で見つけているように感じます。しかし、実際は見た中で最大値を探してそれらを瞬時に判断しているのです。それをロボットのプログラミングで表すにはどうしたらいいのか、ということを考えるのはとても新鮮な感覚でたのしかったです。


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