2016a/Member

課題3

index1.jpeg.png

 課題2で用いたコースを使い、プログラミングロボットにC地点とD地点に3つずつ置いてある紙コップをQ地点の円の中に運び、すべて終わった時のタイムと重ねた紙コップの個数を競う。

機体概要

全体像

aaa

 クワガタのようなアームをしている。アーム前方にゴムタイヤを装着しており、紙コップが落ちないようにしている。また、1つの紙コップを持ち上げて、2つ目の紙コップに1回おろしてから重ねて再び持ち運ぶことができる。さらに下方に取り付けた紫色のパーツで、紙コップがずれないで重ねられるような工夫がしてある。

aaa

 上図のように機体はアーム、電源、車体の3つに分かれている。車輪はライントレースで細かく移動するために小さいものとなっている。

アームのシステム

aaa

 左から大、小、中サイズの3つの歯車があり、動力のはたらきで一番右端の中サイズの歯車が開閉動作の限界まで来ると、その歯車は動かなくなる。そして間に挟まれた小サイズの歯車のみが動き、上下に動くように変化する工夫がなされている。

センサーについて

.薀ぅ鵐肇譟璽考僂慮センサー

▲灰奪廚一定の高さに持ち上がって次の動作をするタッチセンサー

A阿忙罐灰奪廚あると認識する光センサー

の3つを考えていたが、本番で紙コップ1個運ぶという方針に変更してしまったため、ライントレース用の光センサーのみの使用となった。このため、未使用のプログラム(後述)が出てしまっている。

プログラム概要

実際に使用

●ライントレースの中央値

	#define Middle 45

●センサー、パワーの初期設定

	sub setting();
	{	
		SetSensor(SENSOR_1,SENSOR_LIGHT); //ライントレース用
		SetSensor(SENSOR_2,SENSOR_TOUCH); //モータBの停止用
		SetSensor(SENSOR_3,SENSOR_LIGHT); //紙コップ確認用	
		SetPower(OUT_AC,4);        //タイヤ用
		SetPower(OUT_B,7);        //アームの上下、開閉用
	}

●スタートのA地点の四角枠から脱出する動作

	sub STARTING_OPERATION()
	{
		while(SENSOR_1<Middle)
		{
			OnRev(OUT_AC);
		}
		while(SENSOR_1>Middle)
		{
			OnRev(OUT_AC);
		}
		OnRev(OUT_AC);
		Wait(50);
		Off(OUT_C);
		OnRev(OUT_A);
		Wait(40);
		while(SENSOR_1<Middle)
		{
			OnRev(OUT_AC);
		}
		Off(OUT_AC);
	}

●回転動作

(※180°回転して、次に黒線を認識したら停止する)

(※ロボットの長さを考えて、光センサーが回転の前後で同じ位置でスタートするように機体を少し進ませる)

	sub TURN_180();
	{
		OnFwd(OUT_AC);
		Wait(80);
		Off(OUT_AC);
		OnRev(OUT_A);
		Wait(130);
		while(SENSOR_1>40)
		{
			OnFwd(OUT_C);
			OnRev(OUT_A);
		}
		Off(OUT_AC);
	}

●アームを下げる動作

	sub down();
	{
		OnRev(OUT_B);
		Wait(200);
	}

未使用

●紙コップの認識 (※コップの前に来るまで前進)

	sub copjugde()
	{
		while(SENSOR_3 < 46)
		OnRev(OUT_AC);
		Off(OUT_AC);
		Wait(100);
	}

●紙コップの保持

(※上に持ち上げてキープする。ライントレースと並行動作するためtaskで定義)

	task keep()
	{
		while(1)
		{
		OnRev(OUT_B);
		Wait(1);
		OnFwd(OUT_B);
		Wait(1);
		}
	}

実際の動作

(※紙コップ1つだけを運ぶプログラム) (※それぞれの動作をプログラム順に説明する。)

	task main()
	{
	
	仝鮑硬世らD地点へ向かう
		setting();
		STARTING_OPERATION();
		repeat(2)
		{
			TRACE();
			zensin();
		}
	
	誤差修正
		TRACE();
		OnRev(OUT_C);
		Wait(25);
		TRACE();
	
	D地点に到着
		OnRev(OUT_A);
		Wait(95);
		Off(OUT_AC);
	
	ぅ灰奪廚弔む
		OnFwd(OUT_B); 
		Wait(250);
		start keep;
	
	180°回転
		TURN_180(); 
	
	Γ僂諒向を向く
     		OnFwd(OUT_A); 
		OnRev(OUT_C);
		Wait(200);
		Off(OUT_AC);
	
	Э覆
		OnRev(OUT_AC);
		Wait(100);
		Off(OUT_AC);
	
	┘札鵐機嫉箸辰匿覆
		while(SENSOR_1 > Middle-4)
		OnRev(OUT_AC);
		stop keep;
	
	放す
		Off(OUT_AC);
		down();
	}
	sub setting()
	{	
		SetSensor(SENSOR_1,SENSOR_LIGHT);//ライントレース用			
		SetSensor(SENSOR_2,SENSOR_TOUCH);//モータB止める用
		SetSensor(SENSOR_3,SENSOR_LIGHT);//紙コップを確認する用	
		SetPower(OUT_AC,4);//タイヤ
		SetPower(OUT_B,7);//アームの上下、開き
	}
	sub zensin()
	{
		OnRev(OUT_A);
		Wait(106);
		Off(OUT_A);
	}
	
	※未使用
	sub copjugde()
	{
		while(SENSOR_3 < 46)
		OnRev(OUT_AC);
		Off(OUT_AC);
		Wait(100);
	}
			
	紙コップの保持
	task keep()
	{
		while(1)
		{
			OnRev(OUT_B);
			Wait(1);
			OnFwd(OUT_B);
			Wait(1);
		}
	
	ライントレース用メソッド
	sub TRACE()
	{
	ClearTimer(0);
	while(FastTimer(0)<=42){
		if(SENSOR_1>Middle+4)//白 左旋回
		{
			OnFwd(OUT_C);
			OnRev(OUT_A);
			ClearTimer(0);
		}
		else if(SENSOR_1>Middle+2)//やや白 左折
		{
			Off(OUT_C);
			OnRev(OUT_A);
			ClearTimer(0);
		}
		else if(SENSOR_1>Middle)//直進
		{
			OnRev(OUT_AC);
			ClearTimer(0);
		}
		else if(SENSOR_1>Middle-2)//やや黒 右折
		{
			Off(OUT_A);
			OnRev(OUT_C);
		}
		else //黒 右旋回
		{
			OnFwd(OUT_A);
			OnRev(OUT_C);
		}	
	}
	
	トレース終了、交差点認識
	Off(OUT_AC);
	PlaySound(SOUND_FAST_UP);
	}  
	sub down()
	{
		OnRev(OUT_B);
		Wait(200);
	}
	sub STARTING_OPERATION()
	{
		while(SENSOR_1<Middle)
		{
			OnRev(OUT_AC);
		}
		while(SENSOR_1>Middle)
		{
			OnRev(OUT_AC);
		}
		OnRev(OUT_AC);
		Wait(50);
		Off(OUT_C);
		OnRev(OUT_A);
		Wait(40);
		while(SENSOR_1<Middle)
		{
			OnRev(OUT_AC);
		}
		Off(OUT_AC);
	}
	sub TURN_180()
	{
		OnFwd(OUT_AC);
		Wait(80);
		Off(OUT_AC);
		OnRev(OUT_A);
		Wait(130);
		while(SENSOR_1>40)
		{
			OnFwd(OUT_C);
			OnRev(OUT_A);
		}
		Off(OUT_AC);
	}

今回の課題の反省点と感想

2つの班を組み合わせて計6人で作業をし、結構はかどりやすいと思っていましたが、途中で紙コップをつかむアームを大きく変更したり、センサーが余計に反応して改善したりと時間がかかりすぎてしまい、発表の時もほぼ失敗という結果に終わってしまいました。自分の班は結構精密なロボットでしたが、他の班は結構簡素な感じで、なおかつ、ちゃんと紙コップを持ち運ぶことができていたので、もっとシンプルな思考が求められていたのかも、と考えました。(その方が時間がかからず、成功率も上がると思ったからです。)

ゼミ全体をふまえての感想

初めはシンプルなプログラムでロボットを動かして顔を描き、楽しみながら活動できましたが、今度はセンサーを使い、細かい微調整をしたり、ロボットの改善といった作業でとても忙しくなり、大変でした。自分でも油断していたととても反省しています。しかし、班の中で休み時間の時に作業したり教えあったりと、協力ある行動が多くあたので、そこは自分でも高く評価したいと思いました。自分は工学部なので、ゼミでやったプログラミングが今後重要になってくる事からすれば、今回このゼミを受けていて本当によかったと思います。


添付ファイル: fileindex9.jpeg.jpg 104件 [詳細] fileindex5.jpeg.jpg 114件 [詳細] fileindex4.jpeg.jpg 52件 [詳細] fileindex3.jpeg.jpg 47件 [詳細] fileindex7.jpeg.jpg 105件 [詳細] fileindex2.jpeg.png.jpg 46件 [詳細] fileindex2.jpeg.jpg 56件 [詳細] fileindex2.jpg 57件 [詳細] fileindex1.jpeg.png 105件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-08-12 (金) 23:09:26