目次 [#l572f633]

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

各チームで作成したコースを3周するロボットを製作せよ。交差点のうちの一つには500mlの空の紙パックをおき、次のような動作するプログラムを作成せよ。(他のメンバーと重ならないように一人一つのプログラムを作成する)

  1. 紙パックを迂回する、あるいは紙パックをもとの位置に戻したのちコースに戻って進む (交差点を通過後、紙パックが元の位置にあればよい)
  2. 紙パックを次の交差点まで運んで行き、その交差点に紙パックを残してさらに黒い線に沿って進む

コースの紹介

コース2.jpg

Simple is best!ということでコースはなるべく簡単にしました。

完成したロボット

今回は各プログラムにつきパーツをかえてロボットをつくりました。

ノーマル

ノーマル.jpg

恵のロボット

恵のロボット1.jpg

牛乳パックはこのようにモーターBを使ってロボットの腕で抱きつく(?)みたいにつかみます。

恵のロボット2.jpg

堀内のロボット

堀内のロボット.jpg

ロボット作成において工夫した点

ロボットの本体は、小回りが利くようになるべく小さく、かつ頑丈に創りました。

バンパーは、テコの原理を用いて、なるべく低くしました。 by堀内(課題2の1)

牛乳パックが軽すぎて、タッチセンサーの制度を決めるのが難しかったのですが、そこはあえて牛乳パックには反応しないようにタッチセンサーを鈍くして、他のロボットとぶつかったときだけ反応するようにしました。 by恵(課題2の2)

プログラムの説明

恵のプログラム

#define GO OnFwd(OUT_A+OUT_C);			//前に進む
#define LEFT OnRev(OUT_A); OnFwd(OUT_C);		//左に曲がる
#define RIGHT OnRev(OUT_C); OnFwd(OUT_A);		//右に曲がる
#define RUN_TIME 8000			         	    //走る時間

task main ()
{
	SetSensor(SENSOR_1,SENSOR_LIGHT);
        SetSensor(SENSOR_2,SENSOR_TOUCH);
	SetSensor(SENSOR_1,SENSOR_LIGHT);		  //センサーの設定

	ClearTimer(0);					  //タイマーの時間をクリアする

	int BORDER;
	BORDER = 0;					  //交差点の名前と、番号の設定

while (FastTimer(0)<=RUN_TIME)			  //80秒になるまで
{
	if (SENSOR2=1)					  //センサー2(タッチセンサー)が反応すれば
	{
		Off(OUT_A+OUT_C); 
		Wait(500);				  //まず止まって5秒待つ
}
if (BORDER==1||BORDER==5||BORDER==9)	   //1,5,9番目の交差点を通ると
{
	OnFwd(OUT_B);	
	Wait(80);
	Off(OUT_B);				  //モーターBを使い牛乳パックをつかむ
}
if (BORDER==2||BORDER==6||BORDER==10)    //2,6,10番目の交差点を通ると
{
	GO;
	Wait(100);				  //若干前へ進み
	LEFT;
	Wait(130);				  //180度回り
	OnRev(OUT_B); 
	Wait(80);  				  //モーターBで掴んでいた牛乳パックを離す
	RIGHT;
	Wait(130);				  //また180度回りまた黒い線を追う
}
	if ( SENSOR_1 > 40 && SENSOR_3 > 40 )		//センサー1とセンサー3が両方白なら
	{
		GO					//前へ進む
	}
	if ( SENSOR_1 < 40 && SENSOR_3 > 40 )		//センサー1が黒、センサー3が白なら
	{
	LEFT					//左に曲がる
	}
	if ( SENSOR_1 > 40 && SENSOR_3 < 40 )		//センサー1が白、センサー3が黒なら
	{
		RIGHT					//右に曲がる
	}
	if ( SENSOR_1 < 40 && SENSOR_3 < 40 )		//センサー1とセンサー3が両方黒なら
	{
		BORDER==BORDER+1;			//BORDERに1を足して
		GO					//前へ進む
	}
}
Off(OUT_A+OUT_B+OUT_C);				  //全てのモーターを止めて終了
}

堀内のプログラム

#define  turn_left OnFwd(OUT_C);OnRev(OUT_A);Wait(90);Off(OUT_A+OUT_C);  //左に回る
#define  turn_right OnFwd(OUT_A);OnRev(OUT_C);Wait(70);Off(OUT_A+OUT_C); //右に回る 

task main ()
{
   
   SetSensor ( SENSOR_1, SENSOR_LIGHT );
   SetSensor ( SENSOR_2, SENSOR_TOUCH );
   SetSensor ( SENSOR_3, SENSOR_LIGHT );
    int flag=0;   
   
   while(flag<12){   //交差点を12回通過する
                  
         
           if (( SENSOR_1 > 40) && (SENSOR_3 > 40 ))
               {
                   OnFwd(OUT_A+OUT_C);    
               }        //センサー1とセンサー3が白のとき直進する    
           if(( SENSOR_1 < 40) && (SENSOR_3 > 40 ))
               {    
                   OnRev(OUT_A);
                   OnFwd(OUT_C);        
               }    //センサー1が黒でセンサー3が白のとき左に回る
            if(( SENSOR_1 > 40) && (SENSOR_3 < 40 ))
               {
                   OnRev(OUT_C);
                   OnFwd(OUT_A);
               }    //センサー1が白でセンサー3が黒のとき右に回る
            if(( SENSOR_1 < 40) && (SENSOR_3 < 40 ))
               {
                   OnFwd(OUT_A+OUT_C);
                   flag++;
               }    //両方のセンサーが黒のときflagに1をたして直進する
             if (SENSOR_2==1)  //タッチセンサーに触れた場合
                                  {
                                         
                 OnRev(OUT_A+OUT_C);Wait(80);Off(OUT_A+OUT_C);   //後ろに下がる
                 turn_right;   
               OnFwd(OUT_A+OUT_C);Wait(120);Off(OUT_A+OUT_C);   //前に進む
                 turn_left;
               OnFwd(OUT_A+OUT_C);Wait(120);Off(OUT_A+OUT_C);   //前に進む                     
                                           
                                  }         
   
   }
   Off(OUT_A+OUT_C);         //終了
   }
     
    
    

感想、反省点

んー、なんか、ロボットの制作するのが意外と時間を食ったし、プログラムも若干、苦労しました;; でも自分的には、けっこうできた方だと思います。by恵

プログラムが自分にとってはとても難しかったです。 by堀内

コメントお願いします

  • プログラムのセンサーの閾値にしている数字は、定数にしておくとメンテナンス性が高まります。また、ifでセンサーの反応を判別しているところを、センサーが白か黒か(もしくは触っていないか触っているか)について、「無反応なら0を、反応なら1を返す関数」にしてみると、もっとスリム化できるかもしれません。 -- こさか? 2009-07-02 (木) 22:11:04
  • ロボットのほうもいろいろ工夫していて良いと思います。ただ、説明が少し足りないかと思います。Bのモーターは何をしているのか、どのように紙パックをつかむのか、コースを明確にしてください。 -- FI? 2009-07-03 (金) 02:24:26
  • 恵さんのプログラムは、牛乳パックがおいてある交差点を変えても動作するのでしょうか…? -- こさか? 2009-07-10 (金) 12:34:04
  • 書くべきことはかけています。ただ、牛乳パックを置いてある場所が決まっていないと運べないのでは少し汎用性が低いかもしれません。タッチセンサと光センサをうまく組み合わせて、交差点を決めなくても運べるようにした方が良いかと思います。 -- FI? 2009-07-26 (日) 18:33:52


添付ファイル: fileコース2.jpg 304件 [詳細] file恵のロボット2.jpg 265件 [詳細] file恵のロボット1.jpg 269件 [詳細] fileコース.jpg 170件 [詳細] file堀内のロボット.jpg 307件 [詳細] fileノーマル.jpg 266件 [詳細] file恵のロボット.jpg 155件 [詳細] file光センサー.jpg 166件 [詳細] fileタッチセンサー.jpg 151件 [詳細] file足.jpg 158件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-07-26 (日) 18:35:00 (3678d)