[[2015a/MemberOnly]] 〜課題3の目次〜 #contents *課題3の内容 [#u76a1c0b] 半径1m以内にある空き缶を探して、25cmの距離からボールを転がしてその空き缶に当てるロボットを製作しなさい。 詳しくはhttp://yakushi.shinshu-u.ac.jp/robotics/?2015a%2FMission3を参照。 *製作したロボットの概要 [#qa6cf6bd] **ロボットの概観 [#sf59905c] #ref(2015081315522900.jpg) ↑横から見たロボット #ref(2015081315525600.jpg) ↑前から見たロボット #ref(2015081315531000.jpg) ↑後ろから見たロボット **ロボットについて [#sc0ad2be] ***使用したモータ [#y1a49a3d] -車輪(モータB.C) -アーム(モータA) ***ロボットについて [#eb0d6c2a] アームが下がることでシュートが可能になっている。 *プログラムの説明 [#y21ca60f] /* 空き缶を探して、空き缶の手前まで進むプログラム */ #define SPEED 50 #define SPEED_SLOW 30 const float diameter = 5.5; // タイヤの直径(cm) const float track = 9.5; // タイヤのトレッド幅(cm) const float pi = 3.1415; // 円周率 void fwdDist(float d) // 距離 d cm 前進 { long angle; angle = d/(diameter*pi)*360.0; RotateMotorEx(OUT_BC, SPEED_SLOW, angle, 0, true, true); } void turnAng(long ang) // 角度ang度の時計回りの旋回 { long angle; angle = track/diameter * ang; RotateMotorEx(OUT_BC, SPEED_SLOW, angle, 100, true, true); } int searchDirection(long ang) // 現在の方向を中心にang度の範囲で探し // 障害物までの距離を返す { long angle,tacho_min=0,tacho_corr ; int d_min; d_min=300; //仮の最小値 angle = (track/diameter)*ang; // 旋回角度からタイヤの回転を計算 turnAng(ang/2); // 指定された角度の半分を旋回 ResetTachoCount(OUT_BC); // 角度計測をリセット OnFwdSync(OUT_BC,SPEED_SLOW,-100); //反時計回りに旋回 while(MotorTachoCount(OUT_B)<=angle){ if(SensorUS(S1)<d_min){ d_min=Sensor(S1); //仮の最小値を更新 tacho_min=MotorTachoCount(OUT_B); } } OnFwdSyncEx(OUT_BC,SPEED_SLOW,100,RESET_NONE); until(MotorTachoCount(OUT_B)<=tacho_min||SensorUS(S1)<=d_min); Wait(14); //微調整 Off(OUT_BC);Wait(500); return d_min; } sub shoot() { OnFwd(OUT_BC,50); Wait(500); Off(OUT_BC); } task main() { SetSensorLowspeed(S1); //缶の方向を探した後、近づいて10cm手前で停止 int d = searchDirection(360); if (d > 25) { fwdDist(d-25.0); } shoot(); } **問題点 [#nb58e35e] 缶を見つけ出すことができずに、ロボットが360度回転し続けてしまった。 もっとヒントのプログラムを理解できればよかった。 *ロボット・プログラムの製作時間 [#t7487bde] -ロボットの製作時間・・・約2時間 -プログラムの製作時間・・約1時間 -ホームページの製作時間・約1時間 *授業を通しての反省点 [#v57d9ed4] 課題3はヒントであるプログラムの理解が足りなかったため、ミッションを成功させることができなかった。 授業の反省として、もっと資料の練習問題などでプログラムを使いこなせるようになっていれば、 スムーズに課題をこなせていたと思う。 実際に練習問題を使い、自分で書いたプログラムでロボットが動くことを確認してから課題に取り組めればよかった。 積み重ねが大切であると感じた。 小さな積み重ねが大切であると感じた。