[[2014a/MemberOnly/進行状況]]
目次
#contents
*メンバー紹介 [#zc529555]
須賀健太(sugaken)
坂川航平(sakar)
松本善和(yokkun)

* 課題の説明 [#a26960c6]
図のようなコースを各自で作成した上で、次のような動作をするロボットを作成せよ。 (下の図において、黒い線の太さは20mmで、線の中央までの距離がcm表示されている)。

1.スタート地点から出発し、黒い線をトレースしていく。

2.一つ目の十字の交差点と二つめの十字の交差点の間に置かれたピンポン玉をつかむ。

3.さらに黒線をトレースしていきゴール地点を目指す。

4.ゴールに向けてピンポン玉をシュートする。

ただしT字路では、直進、右折、左折を正しく判断させること。また二人または三人一組で同じロボットを使用し、ロボット本体は共通のものを使うとする。

&ref(2014a/Member/sugaken/Mission1/2014a-mission1.png);


* ロボット本体 [#xf1a24b1]
&ref(2014a/Member/sugaken/Mission1/IMG_0345[1].JPG,30%);
** ドライブベース [#ucd7af01]
私たちが使用したロボットは、八の字のライントレースをしたときに使った4輪の基本的な形をしたロボットです。アームを取り付けることが初期のままだと困難だったので、光センサーを本体に近づけて設置しました。本体に近づけたことでトレースの誤差を小さくできているとおもいます。
私たちが使用したドライブベースは、八の字のライントレースをしたときに使った4輪の基本的な形のドライブベースです。アームを取り付けることが初期のままだと困難だったので、光センサーを本体に近づけて設置しました。本体に近づけたことでトレースの誤差を小さくできているとおもいます
** アーム [#afe90714]
はじめはモーターを一つ追加して前後に動く力をアームの上げ下げに利用するような構造にしていましたが、アームを動かすよりも前にライントレースをすることがうまくできていなかったので、アームはクワガタのツノような形をしたものに変更しました。
はじめはモーターを一つ追加して前後に動く力をアームの上げ下げに利用してかごのような物を上からかぶせるような構造にしていましたが、アームがどうこうの前にライントレースをすることがうまくできていなかったのでとりあえず先にライントレースができるようにプログラムを考えていたらアームを自動で動かすような構造を考える時間がなくなってしまい、アームはとりあえずクワガタの角のようなものを取り付けたものになってしまいました。
* プログラム [#af3f957e]
黒線上を直進するようにしました、そのことでだいぶプログラムを短くすることができたと思います。また、スタートからシュートをする位置までの時間をあらかじめはかっておいてタイマーにセットしておき時間になったらシュート動作に入るようなプログラムにしました。
#define BLACK 40  //閾値
#define turn_right OnFwd(OUT_A);OnRev(OUT_C);  //右折
#define turn_left OnFwd(OUT_C);OnRev(OUT_A);  //左折
#define search_time 50  //右回りに回ってラインを探す。
#define MOVE_TIME 2000  //スタートからシュートする場所までにかかる時間。
task main()
{
  if (SENSOR_1 < BLACK) {
   OnFwd(OUT_AC);}  //黒線上なら直進
   else if (SENSOR_1 > BLACK) {
    turn_right;  //白のところになったら、右に回って黒線を探す。
    ClearTimer(0);
    while (FastTimer(0) <= search_time){  //ある程度右回りに探してなかったら止まる。  
      if (SENSOR_1 < BLACK) {
      Wait(15);
       Off(OUT_AC);
   }
}
  turn_left;
  until (SENSOR_1 < BLACK);  //右回りして見つからなかったら、左回りをして黒線を探す。
  Float(OUT_AC);}

  ClearTimer(1);
  while (FastTimer(1) <= MOVE_TIME) {  //シュート位置までの時間を測っておいて時間がきたら直
  OnFwd(OUT_AC);              進後に停車した勢いでシュートする。 
  while (FastTimer(1) <= MOVE_TIME) {  //シュート位置までの時間を測っておいて時間がきた
  OnFwd(OUT_AC);              ら直進後に停車した勢いでシュートする。 
  Wait(200);
  Off(OUT_AC);}
}
* まとめ  [#t95da382]
黒線の上を直進させるようにすることで、プログラムをかなり短くすることができた。しかし、まだまだ閾値の設定がうまく行かずライントレースが必ず成功するわけでわない、そのためスタートからシュート位置につくまでの時間が定まらずスタートからシュートを決めるまで行く事がなかなかできなかった。
黒線の上を直進させるようにすることで、プログラムをかなり短くすることができた。しかし、まだまだ閾値の設定がうまく行かずライントレースが必ず成功するわけでわない、そのためスタートからシュート位置につくまでの時間が定まらずスタートからシュートを決めるまで行く事がなかなかできなかったし、最初に考えていた自動アームもできなかった。
タイヤどうしの距離が離れていたために小回りがきかなっかったことやアームをあまり考えもせずに作ってしまったことが、原因だと思います。
今回は期限までに完璧に仕上げることができなっかので次回の課題はより成功率が高くなるようなプログラムやロボットをつくっていきたい。


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS