目次
半分アメリカ人
空き缶を持ち上げるにあたって、アームが空き缶をつかみ、アームがそれを持ち上げて、空き缶の真下にもう一つの空き缶が来るようにロボットが移動して空き缶を置くが重ねるときは上段の空き缶は下段の空き缶と同じ角度でないと崩れるので、空き缶をエレベーターのように一切傾けないで垂直に持ち上げる。 そこで、エレベーター・アームは100円ショップのミシン糸を利用してケーブル代わりにした。キットに附属されていた輪ゴムをつなげて持ち上げることはできるが、輪ゴムが切れるリスクを避けたかったので「キットに附属しているもの以外の部品を使わない」ルールを破った。結果的にエレベーター・アームの上下はスムーズに動かすことができたが、エレベーター・アームは地面に対して平行に動いたり、ひねることがあるのでエレベーター・アームの後部にケーブル(糸)を二ヶ所に通して、エレベーター・アームの無駄な動きをなくした。(写真一枚目参照)
エレベーター・アームのケーブルを巻き上げる際は、確実に、そしてギアがスリップしないように、ギアダウンして固定した。(写真二枚目参照)
このロボットには超音波センサーが搭載されていない。それには理由が二つあり、
2台のロボットで空き缶を収集し、ゴールに空き缶をなるべく高く積み上げる
基本ルール
基本得点の計算方法 (片道)
技術点の計算方法
得点の目安:
定型文 † #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つのモータの回転を同期させることができより正確に前進させることができる ↑ 動作1 †
reset; go; Wait (1500); reset; H_left; right; Wait(300);
動作1を行うために以上のプログラムを行う この動作で勢い余って缶を倒してしまうことが多く速度の調整が大変であった ↑ 動作2 †
back; Wait (2500); left; Wait (400); go; Wait (7000); Off(OUT_AC);
動作2を行うために以上のプログラムを行う 缶を一列にはさみながら前進する動きはサーボモータのおかげでかなり正確にできた ↑ 動作3 †
back; Wait (2500); left; Wait (400); go; Wait (7000); Off(OUT_AC); Wait (6000);
これは車体部分のプログラムである
Wait (13000); tukamu; ageru; Wait (6000); hanasu; sageru;
これはクレーン部分のプログラムである 以上2つのプログラムを同時に実行させて缶を積み上げる まずはクレーンが缶を掴み持ち上げ、車体が前進する。 さらに同じ動作をもう一回する
今回の目標は一列にした缶を3段積むことだったが、その目標は達成できなかった。最大の敗因は、2つのNXTをうまく連携させれなかったことだ。結果的にはプログラミングにかける時間が足りなかった。今後はプロジェクトマネージメントをしっかりと意識して、課題をこなしていきたい。