インストの「top secret」を参考にして、白いホイールを(2個以上)連射するロボットを作成し、以下の動きをするようにプログラムを作成せよ。 (重複しないように一人一つ以上のプログラムを作成すること)
1.全方向から懐中電灯の方向を探しだし、懐中電灯を狙ってブロックを投げる。方向を定めたのち、懐中電灯の30cm以内に近づかない範囲で必要な距離を移動してもよい。懐中電灯は動かさないが、いろいろな距離や方向にある懐中電灯に対応できるロボットにすること。
2.懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば一定の距離(懐中電灯から30cm以上離れた距離)まで近づいて懐中電灯を狙ってブロックを投げる。
3.懐中電灯を動かしたとき懐中電灯に向かって進み、見失った時には再び全方向から懐中電灯を探しだす。7秒以上追尾できたら懐中電灯に向かってブロックを投げる。
懐中電灯の代わりに携帯のライトなどを利用してもよい。モータ、光センサ、タッチセンサはそれぞれ2個まで使用可。ただし、平面的な方向だけでなく懐中電灯の高さまで含めた方向を探す場合にはモータを3個使用してもよい。
僕らが今回作るのはオトナのオ・モ・チャ(はあと
ゆうたろう
NISHI
目次
今回、ディファレンシャルギア(作動装置)を用いた台車を使用する。
今回、白ホイールをとばすだけでなく連射機能も兼ね備えた投射機の作成が課題である。よって、投げる方式よりも打ち出す方式の方が良いと考えた。
理由は2つあり、まず投げる方式だと連射できるようにするためにはモーター1個では困難であり、2個使う必要性が発生するため。さらに、モーターを2個搭載するとマシンがおもくなってしまうことである。
以上のことから、投射機は打ち出す方式が理想的であると判断した。A2Lのパクリじゃないって!
〜問題点〜
ホイールは4個搭載できるが4個だと弾の軌道が3、4発目あたりから安定しなくなる。だが、3個搭載だと軌道が安定する。よって、3個搭載が基本になってしまった。4個搭載できるのに・・・
改良できれば良かったが、時間がなかった。だからA2Lのパクりじゃないって!
今回、台車に使用するモーターは1個でありマシンが重すぎると動かなくなってしまう恐れがある。強度を優先すればマシンは重くなってしまう、マシンの軽さを優先すると強度がなくなる。強度と重量のバランスを考慮にいれて投射機を作成した。
おい、A2Lの劣化版とか言った奴出てこい
#define RUN_TIME 100 //プログラムの稼働時間を1秒に設定 task main() { SetPower(OUT_C,6); //アームのパワーを6に設定 int light_max=0; int t_max=0; SetSensor(SENSOR_1,SENSOR_LIGHT); //光センサー1を設定 OnRev(OUT_A); ClearTimer(0); //クリアタイマーをセット while(Timer(0) <= RUN_TIME) { if(SENSOR_1 > light_max) //光が最大の方向があったら { OnFwd(OUT_A); Wait(20); Off(OUT_A); //打ち出す方向へむく light_max=SENSOR_1; t_max=Timer(0); } OnRev(OUT_C); Wait(22); Off(OUT_C); //ホイールを打ち出す } }
回って投げる!それだけ!!
このプログラムでint t_maxの必要性が感じられない
#define LW 45 //光量の最低値を50に設定 #define LS 65 //最大値を70に設定 #define Th OnRev(OUT_C); Wait(17); Off(OUT_C); //弾を発射 task main(){ SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); while(true){ if((SENSOR_1>LW)&&(SENSOR_3>LW)){ //ライトが前にあるなら OnFwd(OUT_A);Wait(34); //前進する OnRev(OUT_A);Wait(30);} else if((SENSOR_1>LW)&&(SENSOR_3<LW)){ //右に移動したら OnFwd(OUT_A);} //右折する else if((SENSOR_1<LW)&&(SENSOR_3>LW)){ //左に移動したら OnRev(OUT_A);} //左折する else if((SENSOR_1>LS)&&(SENSOR_3>LS)){ //ある程度近づいたら Off(OUT_A);Wait(400); //ライトが動かないことを確認 until((SENSOR_1>LS)&&(SENSOR_3>LS)){ //動いていなければ Th} break;} //弾を発射する } Off(OUT_A+OUT_C); }
自分は、プログラム2の方を担当した。
前期の人のプログラムやそれに対する先生方のコメントを参考に作成してみた。
今回、マシンの投射機に連射機能を持たせなければならず、結構苦労した。プログラムは過去の人のものを参考にして作った。あと投射システムをA2Lからパクッてません。あれ家で作ってきたんだから。偶然だって!偶然!!大体、A2Lが俺をパクッたんだ。どこまでも卑怯なA2Lめ、いつか滅ぼしてやる
今回、ロボ・プログラム共に何かを参考にしてばかりでオリジナリティがほぼないのが少々罪悪感。
ただ、基は早くできても問題点の解決は自分でしなければいけなかったのでそれが難儀だった(そんなに変わってないけどね〜)。