このロボットは缶を運ぶものと缶を積み上げるものの2つのロボットから成る
すなわち1つのロボットは2つのタイヤを動かしもう一つはクレーン部分を動かす
クレーン部分は掴む部分とそこにくくりつかれているいとを巻き上げクレーンを上下させる部分からなる
下図の赤い丸で囲まれた3個の缶を積み上げる
まずはロボット下部にある長い棒で上図の赤い丸で囲まれた缶を
ロボットが回転しながら
一列に並べる(動作1)
次にロボットが一旦下がり方向を切り替え
一列に並べた缶をロボット下部にある棒二本で一列に並べながら前進する(動作2)
ゴール付近で缶を積み上げる(動作3)
以上3つの動作で缶を積み上げる
#define THRESHOLD 45 #define SPEED_H 50 /* 速いスピード */ #define SPEED_L 40 /* 遅いスピード */ #define reset ResetTachoCount(OUT_AC); #define go OnFwdSync(OUT_AC,SPEED_H,0);/* 直進 */ #define back OnFwdSync(OUT_AC,-SPEED_H,0); /* 後進 */ #define left OnFwdSync(OUT_AC,SPEED_L,100);/* 左旋回 */ #define H_left RotateMotorEx(OUT_AC,50,220,100,true,false); /* 半左回転 */ #define H_right RotateMotorEx(OUT_AC,50,180,-100,true,false);/* 半右回転 */ #define right OnFwdSync(OUT_AC,SPEED_L,-100); #define reset ResetTachoCount(OUT_AC);
以上は車体部分の定型文である
#define tukamu OnFwd(OUT_C,50);Wait(2000); #define hanasu OnRev(OUT_C,50);Wait(2000); #define ageru RotateMotor(OUT_B,-40,1380); #define sageru RotateMotor(OUT_B,40,1380);
以上はクレーン部分の定型文である
今回はNXTに付属されているサーボモータをフルに活用している
サーボモータを使えば2つのモータの回転を同期させることができより正確に前進させることができる
reset; go; Wait (1500); reset; H_left; right; Wait(300);
動作1を行うために以上のプログラムを行う
この動作で勢い余って缶を倒してしまうことが多く速度の調整が大変であった
back; Wait (2500); left; Wait (400); go; Wait (7000); Off(OUT_AC);
動作2を行うために以上のプログラムを行う
缶を一列にはさみながら前進する動きはサーボモータのおかげでかなり正確にできた
back; Wait (2500); left; Wait (400); go; Wait (7000); Off(OUT_AC); Wait (6000);
これは車体部分のプログラムである
Wait (13000); tukamu; ageru; Wait (6000); hanasu; sageru;
これはクレーン部分のプログラムである
以上2つのプログラムを同時に実行させて缶を積み上げる
まずはクレーンが缶を掴み持ち上げ、車体が前進する。
さらに同じ動作をもう一回する
今回もうまくいかなかった主な原因は2台のロボットの通信がうまくいかなかったことである
MASTERとSLAVEの関係を作るまでは出来たが何度やっても通信してくれなかった
前回が失敗に終わっただけに今回の結果は残念でならない