異種混合の缶のタワーを、整理するロボットを制作した。
NXTは縦方向の動きを可能にするパーツがなかったため、缶を持ち上げることが出来ず、全て1段積みでのミッション参加となった
下は今回のロボットの写真である
課題3

遭遇した問題

今回の工夫

NXTは縦方向に力を加えることができないので、缶のタワーを持ち運ぶところから困難が起きた。
一段目を別の枠内に、二段目を元の枠内に、三段目を一段目と同じ枠内に置くのだが、缶を引きずると、段差でタワーが崩れてしまうことがあった。
自分たちのグループは、下の写真のように、タワーの処理を押し出すことで行っていたのだが、缶を押し出した後、その状態のまま移動することで、上の缶は押し出し棒に引っかかり、引きずることなく缶を持ち運べるようになった。
押し出し機構

足回り(親機)

今回のロボットの移動は、正確さを求められるため、距離、方向転換のどちらも角度指定でモーターを回して動かした。
直進はほぼ正確に動かすことができた。
しかし、回転が曲者だった。
同じ関数を使用しているのに、動作の前後で回る角度が異なるという事態が発生してしまった。
原因は、最初と最後で缶の重さが異なり、駆動輪に影響を及ぼしたと考えられる
補正のプログラムを入れ、なんとか動かしたが、これでは困るので、改善方法を考えたい。

缶の操作(子機)

子機による缶の操作は、ガイドの開閉、缶を押す、引くの4つである。
子機側の困難は、缶を押す/引くときに、押し出しが足りなければ缶はリリースされず、押し出しが大きすぎても、今度は上の缶が押し出し棒に引っかかってしまうことだった

考察

プログラムの最初と最後で回転角が異なる点についてだが、これは駆動輪にかかる重量を大きくすることで、缶の相対的な重量を減らすことで改善できると思う。

また、既存のパーツを変化させずに、使い方を変えるだけで、缶を持ち上げたまま運ぶことができたのは、機構が簡単、シンプルなものだったからだともいえよう
このように、頭を使って機械を応用するのは、将来必ず役立つと思う。

まとめ

結局、二つのタワーを処理することはできなかった。
ロボコン当日は、家庭の用事で出ることが出来なかったが、練習では、八割がた成功するようになった。
3種類のロボット制作を通じて、プログラミングの基礎と、ロボットの制作を学ぶことができたと思う。
将来使うかどうかは判らないが、この授業のように一度でも学ぶことがあれば、ロボット制作の心得が身につくと思う

プログラム

親機
足回り 右 B 左 A

#define CONN 1 // slave num
#define CM (820/35) // rotate tacho / forward CM

void FWD(int x)
{
	RotateMotorEx(OUT_AB, 60, x * CM, 0, true, true);
}

void turnR(int x)
{
	RotateMotorEx(OUT_AB, 60, x * 215 / 100, 100, true, true);
}

void turnL(int x)
{
	RotateMotorEx(OUT_AB, 60, x * 215 / 100, 100, true, true);
}

void turnL90()
{
	RotateMotorEx(OUT_AB, 60, -125, 100, true, true);
}

void turnR90()
{
	RotateMotorEx(OUT_AB, 60, 125, -100, true, true);
}

void turnR45()
{
	RotateMotorEx(OUT_AB, 60, 70, -100, true, true);
}



task main()
{
	until (BluetoothStatus(CONN) == NO_ERR);

	RemoteStartProgram(CONN, "canrelease.rxe");

	FWD(20);
	Wait(100);
	turnR90();
	Wait(100);
	FWD(23);
	Wait(100);

	RemoteStartProgram(CONN, "cancatch.rxe");//缶を掴む

	Wait(3000);
	FWD(30);
	Wait(100);

	RemoteStartProgram(CONN, "canpush.rxe");//1段目の缶を開放

	Wait(2000);
	FWD(-10);
	turnR90();
	Wait(100);
	turnR90();
	Wait(100);


	RemoteStartProgram(CONN, "canpull.rxe");

	Wait(2000);

	RemoteStartProgram(CONN, "canpush.rxe");//2段めの缶を開放

	Wait(2000);

	
	Wait(100);
	turnR90();
	Wait(100);
	turnR90();
	Wait(100);
	turnR90();
	Wait(100);
	FWD(10);

	RemoteStartProgram(CONN, "canpull.rxe");

	Wait(2000);

	RemoteStartProgram(CONN, "canpush.rxe");

	Wait(2000);

}

子機
缶を押すプログラム

canpush.nxc

task main()
{RotateMotor(OUT_B, 30,-60);}

缶を押す機構を引くプログラム

canpull.nxc

task main()
{RotateMotor(OUT_B, 30,60);}

缶を掴むプログラム

cancatch.nxc

task main ()
{RotateMotor(OUT_A, 30, 175);}//缶キャッチ

缶を掴む機構を開放するプログラム

canrelease.nxc

task main()
{RotateMotor(OUT_A, 30, -173);//缶開放
}

添付ファイル: file1534575052846.jpg 142件 [詳細] file1534513131391.jpg 181件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-08-18 (土) 17:25:47