*目次 [#cd996728] #contents *課題の説明 [#e7d1f95d] 半径1m以内にある空き缶を探し、25cmの距離からボールを空き缶に当てるロボットを作成せよ。~ ただし最初に空き缶が25cm以内の距離にある場合は、30cmまで離れてボールを当てよ。 *ロボットの説明 [#m8e08e9b] **本体 [#k95eb888] &ref(./写真 2 (1).JPG,20%); これが今回私たちのチームが制作したロボットである。~ アームでボールを囲み、空き缶の前まで運ぶ。 **アーム [#tf32c8b8] ***アーム1 [#l46722a4] &ref(./image.jpeg,13%); 本体の下部にあり、ボールが外に出ないようにする役割をもつ。~ ***アーム2 [#i6257fa7] &ref(./写真 4.JPG,15%); 本体の上部にある。~ ボールを囲み、空き缶の手前まで運ぶためのもの。~ 空き缶にボールを当てるときに開く。 *コンセプト [#xa432ce3] &ref(./NX.png,50%); まず超音波センサーで周囲360°をサーチし、最短距離にあるものの場所を記録しておく。~ サーチ終了後最短距離にあるものの方向を向き、距離に応じて移動する。~ 最後にシュートして終了する。 *プログラム [#k483a0ef] プログラムは以下の通りである。~ 今回は配布資料と課題2を参考に、少し手を加えた。 ***マクロ [#ebc1f78f] #define speed 50 #define speed_slow 30 #define down OnFwd(OUT_A,40);Wait(500);Off(OUT_A);Wait(300);//アーム2を下げる #define up OnRev(OUT_A,40);Wait(500);Off(OUT_A);Wait(300); //アーム2を上げる #define goal OnRev(OUT_BC,50);Wait(500);Off(OUT_BC);Wait(500);\ up;OnFwd(OUT_BC,80);Wait(300);Off(OUT_BC); //ボールを発射する ***サブルーチン・関数 [#b9609457] const float diameter = 5.45;//タイヤの直径 const float track = 12.35; //タイヤ間の距離 const float pi = 3.1415;//π void fwdDist(float d)//引数dの分だけ前進 { long angle; angle = d/(diameter*pi)*360.0;//d進むために必要な数angleを計算 RotateMotorEx(OUT_BC,speed_slow,angle,0,true,true);//左右のタイヤを同期させてより正確に前進 } int searchDirection(long ang)//最も近い物体を探す { long angle,tacho_min=0; int d_min; d_min=300;//仮の最小値を設定 angle = (track/diameter)*ang; //引数からモーターの回転角度を計算 ResetTachoCount(OUT_BC); //角度のカウントをリセット while(MotorTachoCount(OUT_B)<=angle)//angの範囲内での最小値の探索 { RotateMotorEx(OUT_BC,speed_slow,1,-100,true,true);//1°左旋回 if(SensorUS(S1)<d_min)//それまでの最小値より近いなら { d_min=SensorUS(S1);//最小値を更新 tacho_min=MotorTachoCount(OUT_B);//最小値を記録した位置を記憶しておく } } RotateMotorEx(OUT_BC,speed_slow,angle-tacho_min,100,true,true);//最も近い物体の方を向く return d_min;//最小値を返す } ***メイン [#g843a410] task main() { SetSensorLowspeed(S1);//超音波センサ int d=searchDirection(360); if(d>25)//物体が25cmより離れた距離にある場合 { fwdDist(d-25.0);//25cm手前まで移動; } if(d<=25)//物体が25cm以内の距離にある場合 { fwdDist(d-30.0);//30cm手前まで移動; } goal; } *結果 [#z5f77ff6] 無事に空き缶にボールを当てることができた。 *苦労したところ・反省点 [#r62b91e7] **苦労したこと [#m5964f10] 配布資料に書いていないものが使われていたため、サンプルプログラムの理解に苦労した。~ 今回はサンプルプログラムが配布されたため、プログラミングにはそこまで苦労はなかった。~ またロボットについても課題2のものを流用しているため、特に苦労はなかった。 **反省点 [#o162d167] ロボットの重心がかなり前にあるのだが、時間に追われて改善できなかった。~ プログラミングについては、サンプルプログラムをベースにしているためほとんど個性が出せなかった。