2012b

目次

ロボット

紹介・特徴

分解し組み直すことでできなかったため、初期を基本に組み上げた。

robo01.jpg

このようにベースが最初のロボットである。

robo02.jpg

. .

robo03.jpg

アーム部分はボールが零れないようにレゴを使い固定した。 また、ボールを押し出す際に押し出せるようにアーム内部にレゴを組み込んだ。(写真はうまく撮ることができなかった)この部分を用いることでボールを押し出し、ゴールを決めることに成功した。

そして、側面はこのようになっている。

robo04.jpg

.

.

robo05.jpg

全体として、小型化に失敗してしまったが、初期のものより多少は小さくなっていると思う。

反省

次回のために

課題内容

※先生のページのコピーです。

図のようなコースを各自で作成した上で、次のような動作をするロボットを作成せよ。

課題1のコース

課題達成のために

交差点の数を数え、ある回数でシュートするプログラム。 そして交差点を通過するためのプログラムを作るべきと感じたが、作成することができなかった。そのため時間指定により動くロボットを作った。 黒い線の右を通るか、左を通るかを切り替えることで交差点に悩まないようにした。

プログラム

プログラム内容

上に書いたようなプログラムを作ろうとしたが失敗したため、時間指定により動くプログラムを作った。

  1. 黒い線上の場合は右に曲がり、白い線上の場合は左に曲がるプログラム。
  2. 黒い線上の場合は左に曲がり、黒い線上の場合は右に曲がるプログラム。 このふたつを時間によって使い分けゴールまでライントレースを行った。 これにより、交差点等で悩むことがない。
    robo06.jpg

プログラムのイメージ画像

robot.1.jpg この図のようなやり方でライントレースを行う。

robot3.jpg 動かした例としてはこのようになる。

そして、ゴール前まで運ぶと

robot2.jpg

という動きに切り替わる。

この動きを説明すると

  1. まず、(1)のような動きでゴールの方向を向く。
  2. 向いたらロボットを停止させ、ボールを落ち着ける。
  3. アームをあげて、押し出す姿勢を作る。
  4. そして、(2)のように動く。この動きは100%で行い、ボールを強く押し出す。
  5. 最後に枠外へ出るためにバックする。

作成したプログラム

#define right01 OnFwd(OUT_C,40);OnRev(OUT_B,20);//右に前進
#define left01 OnFwd(OUT_B,40);OnRev(OUT_C,20);//左に前進
#define THRESHOLD 45//閾値を設定
#define STEP 10//一回の判定で動く時間
#define left00 OnFwd(OUT_B,30);OnFwd(OUT_C,-30);Wait(1200);//ボール回収時の左折
#define mae00 OnFwd(OUT_BC,20);Wait(600);//ボール回収時の前進
#define right00 OnFwd(OUT_C,30);OnFwd(OUT_B,-30);Wait(400);//ボール回収時の右折
#define short_break00 Off(OUT_BC); Wait(1000);//一時停止
#define mae01 OnFwd(OUT_BC,20);Wait(400);//ボール回収時の前進
#define short_break01 Off(OUT_BC); Wait(500);//発射時の一時停止
	
 task main()
{
	/*ボールを回収するプログラム*/
	left00;
	mae00;
	short_break00;
	OnFwd(OUT_A,20);Wait(300);Off(OUT_A);
	mae01;
	right00;
	SetSensorLight(S3);//光センサーを起動
	
	short_break01
	/*タイマーをセットし起動*/
	long time1,timeA;
	/*タイマーの初期化*/
	time1 = 0;
	timeA = 0;
	time1 = CurrentTick();
	/*指定時間の間黒線上なら左、白線上なら右へ曲がるプログラムで移動*/
	while(5000 >= timeA)
	{	//5秒間繰り返す
		timeA = CurrentTick()-time1;
		if(SENSOR_3 < THRESHOLD)
		{
			left01;
		}else
		{
		right01;
		}
	Wait(STEP);
	}
	/*ここで黒線上なら右、白線上なら左へ曲がるプログラムに切り替える*/
	short_break01
	OnFwd(OUT_C,30);Wait(300);//切り替えが失敗しないようにプログラムの切り替え前に右側に振り切る
	long time2,timeB; //二つ目のタイマーを作成
	/*タイマーの初期化*/
	time2 = 0;
	timeB = 0;
	time2 = CurrentTick(); //タイマーを起動
	while(9000 >= timeB)
	{ //9秒間繰り返す
		timeB = CurrentTick()-time2;
		if(SENSOR_3 < THRESHOLD)
		{
			right01;
		}else
		{
		left01;
		}
	Wait(STEP);
	}
		
	/*ここで再び最初のプログラムに切り替える*/
	short_break01;
	OnFwd(OUT_B,30);Wait(300); //切り替えが失敗しないように左に振り切る
	long time3,timeC; //三つ目のタイマーを作成
	/*タイマーの初期化*/
	time3 = 0;
	timeC = 0;	
	time3 = CurrentTick(); //タイマーを起動
	while(26000 >= timeC)
	{ //26秒間繰り返す
	timeC = CurrentTick()-time3;
	if(SENSOR_3 < THRESHOLD)
		{
		left01;
		}else
		{
		right01;
		}
	Wait(STEP);
	}
	
	/*ゴールをするためのプログラム*/
	short_break01;
	right00;
	Off(OUT_BC);Wait(600);//ここでボールのゆれをとめる
	OnFwd(OUT_A,-30);Wait(500);Off(OUT_A);
	OnFwd(OUT_BC,100);Wait(300);Off(OUT_BC);
	OnFwd(OUT_BC,-100);Wait(400);Off(OUT_BC);
}

反省

今後のために

全体をとおして

反省・感想

ロボットに関する知識も、プログラムに関する知識も足りないと痛感した。 期末までにはこの2つの知識をなんとしても得ることで、満足のいくものを創りあげたい。 また、自分の動かしたいもの、作りたいもの、イメージしていたものとの違いをとても感じている。この違いをなくせるようにしていきたいと思う。 そして、過去の先輩やネットから多くの情報を得られるので、それをコピーし、動かすことで知識を自分のものにしていきたい。


添付ファイル: filerobot3.jpg 422件 [詳細] filerobo06.jpg 478件 [詳細] filerobot2.jpg 366件 [詳細] filerobo05.jpg 417件 [詳細] filerobo04.jpg 469件 [詳細] filerobo03.jpg 363件 [詳細] filerobo02.jpg 468件 [詳細] filerobot.1.jpg 467件 [詳細] filerobo01.jpg 497件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-12-26 (水) 16:47:39