課題について

課題3はコース上にあるカンをGOALの領域に積み上げるというものである。

course.png

図のピンクの丸にカンが置かれており、それをGOALまで運んで積んでいく。
詳しくは課題3を参照してください。

方針

僕たちの班はカンを積む側とカンを集めてGOALまで運ぶ側の2体に分けてやることにした。

積む側

-積む側は最初にロータリーからスタートして、T地点のカンを掴んで待機しておく。
-bluetoothの信号が来たら、カンを積む。
-積まれたカンの一番下を掴んで持ち上げて待機
以下◆↓を繰り返し。

集める側

-カンを集めてGOAL地点に届ける。
-積む側に信号を送る。
以下 ↓△魴り返し。

機体について

積む側

stack_arm.jpg

カンを掴むアームは上図のようなものを制作した。
モーターの回転で掴んで放す動作ができる。
アームを上下させることでカンを積む動作が可能になる


stack.jpg

上のアームを上下に動かせるようにした最終的な機体がこれ。
四角形を変形させるようにしてアームを上下させている。
カンを積ときにアームを水平ンに保つため、この機構を採用した。
モータでアームを上下させるが、そのままでは回らなかったため、ギアをかませて回転させている。
アームを下に下げ切ったときに前につんのめってしまったため、タイヤの前につっかえを取り付けた

集める側

collect.jpg

サンプルの機体をベースにして制作した。
ライントレースをながらカンをあつめるので機体前方に光センサを取り付けた。
カンを保持しながら進むため、アームを取り付けた。また、倒れないようにアームに幅を持たせた。

プログラムについて

僕は積む方のプログラムを担当した。
集める方のプログラムはmattuを参照してください。
プログラム全文はこちらを参照してください

変数宣言

//A・・・足回り  B・・・アーム上下  C・・・アーム
#define CONN 0
#define INBOX MAILBOX3
#define ang_up 340				//持ち上げ用角度
#define ang_put 80				//カン置く角度
#define ANGLE 50				//掴む用角度
#define POWER 30				//正転
#define POWER_LEGS 40			        //足回り用
#define POWER_RE -30			        //逆転

一番上にどの動作にどのモータを割り当てるかを書いています。
コメント文で説明できていると思うので説明は省略する。

サブルーチンについて

sub go_f(int l){		//指定距離前進
	float Ang=l*2.0463;				//回転角度計算
	RotateMotor(OUT_A,POWER_LEGS,Ang);	        //前進
	Off(OUT_A);
}

これについては課題1を参照してください。

sub hold(){					//カンを掴む
	go_f(100);					//前進してカンの位置を合わせる
	RotateMotor(OUT_C,POWER_RE,ANGLE);	    //カン掴む
}

sub stack(){					//カンを積む
	go_f(170);					//前進してカンの位置を合わせる
	go_f(-10);					//カンから離れて位置調整
	RotateMotor(OUT_B,POWER_RE,ang_put);		//カンを置く(積む)
}

これらはコメント文で説明できていると思うので省略

sub down_arm(){						//アームを下げる
	OnFwd(OUT_B,POWER_RE);
	Wait(1100);						
	Off(OUT_B);
}

アームを下げる関数。
アームを下に1100ミリ秒下げる。ここは角度よりも時間で制御したほうが確実に下がるため、時間で制御している。

メインタスク

task main(){
	int msg=0;
	until(BluetoothStatus(CONN)==NO_ERR);              //bluetoothが確立するまで待機
	go_f(-50);                                                      //アームを下げるための位置調整
	down_arm(); 							//アームを下げてカンを掴む準備
	while(1){
		hold();							//カン掴む
		OnFwd(OUT_C,POWER_RE);				    //保持し続ける
		RotateMotor(OUT_B,50,ang_up);		        //持ち上げる
		go_f(-150);						//位置調整

		ReceiveRemoteNumber(MAILBOX3,true,msg);			//集める側からの信号が来るまで待機
		while(msg!=2){
			ReceiveRemoteNumber(MAILBOX3,true,msg);
			Wait(10);
		}

		stack();						//2の信号が来たら積む
		Off(OUT_C);						//カンを保持する力を抜く
		RotateMotor(OUT_C,POWER,ANGLE);		//カン離す
		go_f(-100);						//位置調整
		down_arm(); 						//アームを下げて次の準備
	}
}

結果

実際の発表では集める側のプログラムが間に合わなかったため、積むことをあきらめてカンをGOALの領域に運ぶことになってしまった。 プログラムは課題△離廛蹈哀薀爐R地点で左折し、T地点までカンを持っていくように変えただけなので説明は割愛する。

結果はカンを二つGOALまで運んだので、基本点を6点獲得した。

反省・感想

結果的には間に合わせることができなかったが、カンを積む機構やbluetoothでの通信などの所を完成させることができたため、悔いは残るが大きな不満はない。
時間が合わず、4人で集まって作業することができなかったことやメンバー間での連携が上手く行けていなかったことが大きいと思う。
最後で先生が言っていたように不備のないロボットを作ることは難しく、どこかしら不具合が出てきてしまった。簡単なものでも確実に動作させるのは難しいことだと感じた。
今後はロボットを制作することはおそらくないだろうが、今回のようにある課題をこなすプログラムなりを作る機会は多くあると思うので、このゼミで培ったことや感じたことを生かしていきたいと思う。


添付ファイル: filecollect.jpg 87件 [詳細] fileobj.png 39件 [詳細] filecourse.png 82件 [詳細] filestack.jpg 83件 [詳細] filestack_arm.jpg 72件 [詳細]

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