目次
詳しい説明は2014a/Mission1を参照
私はスタート→ゴールの順路をたどった。
mame
dai
シンプルに作りあげたので容易に取り外し&取り付けが可能。
車体の軸に近づけるように地面に垂直にライトが当たるように工夫した。
クレーン車のようにすくい上げる。
青く囲んだのがアームです。
↑つかんだ直後の状態
シュートをする場合はアームを強めに逆回転させてボールを打ちます。
黒い線に乗る→ 線の右側トレース→ 動き始めてから8秒経ったところでボールをつかむ→ 動き始めてから29秒経ったところでボールをシュート
定義
#define THRESHOLD 39//しきい値 #define SPEED_H 43//最も早い速度 #define SPEED_L 30//最も遅い速度 #define OnRL(speedR,speedL);OnFwd(OUT_B,speedR);OnFwd(OUT_C,speedL); //右・左車輪のスピード #define go_forward OnRL(SPEED_H, SPEED_H); //前進のスピード #define turn_left1 OnRL(SPEED_L, -SPEED_L); //左旋回 #define turn_left0 OnRL(SPEED_H, 0); //左に曲がる #define turn_right0 OnRL(0, SPEED_H); //右に曲がる #define turn_right1 OnRL(-SPEED_L,SPEED_L); //右に旋回 #define STEP 1 //白と黒の境界をセンサが読む時間(1/1000秒) #define nMAX 300 //通常のカーブとして許容できる繰り返しの最大値 #define short_break Off(OUT_BC); Wait(1000); //小休止 #define CROSS_TIME 100 //交差点通過にかかる時間 #define cross_line OnRL(SPEED_L,SPEED_L);Wait(CROSS_TIME);short_break; //交差点を渡る #define Catch Off(OUT_BC); OnFwd(OUT_A,40);Wait(500);Off(OUT_A) //アームを前に回し、ボールを取る #define Shot Off(OUT_BC);OnRev(OUT_A,70);Wait(500);Off(OUT_A) //アームを後ろに回し、ボールを打つ
task main() { SetSensorLight(S1); //光センサーをセット SetSensorLowspeed(S4); //超音波センサーをセット int nOnline=0; //黒い線になった回数 long t0 = CurrentTick(); //時間を計算する。
スタート地点にはコースがないため、少し進んでコースに乗せる
OnFwd(OUT_BC,40); Wait(500);//白い枠から出るために少し進む
while (CurrentTick() <= 29000) { //動き始めてから29秒以内の時の場合 while (nOnline < nMAX) { //カウンターの回数がnMAXを越えないとき
ここでシュートとキャッチをする時間を定める
if(CurrentTick()- t0 == 8000){Catch} //動き始めてから8秒の時にボールをつかむ if(CurrentTick()- t0 == 29000){Shot} //動き始めてから29秒の時にボールを打つ
右側をトレースする。
光センサーが黒と判断したときにカウントを増やすカウンターを使い、カウンターがnMAXを越えないときは直角カーブをし、nMAXを越えたときに交差点と判断し、通過する。
if (SENSOR_1 < THRESHOLD -14) { //黒の場合 turn_left1; //左に旋回 Online++; //カウンターを増やす } else { if (SENSOR_1 < THRESHOLD-8) { //やや黒の場合 turn_left0; //左に曲がる } else if (SENSOR_1 < THRESHOLD-3) { //やや白の場合 go_forward; //直進 } else if (SENSOR_1 < THRESHOLD +8) { //白の場合 turn_right0; //右に曲がる } else { turn_right1; //右に旋回 } nOnline=0; //カウントをリセットする } Wait(STEP); //(1/1000秒待機) } short_break; //小休止 turn_right1; Wait(nMAX*STEP); //進行方向修正 cross_line; //交差点を渡る nOnline=0; //カウントをリセットする } }
プログラミングは初めてだったので難しかった。しきい値が安定しにくかった。成功率がとても低い。
車体の前半分が重すぎてバランスがとれないこともあった。場所や条件により交差点を認知しない場合がある。
赤外線センサーを用いたが、車体が長すぎてセンサーとボールが反応しない。
時間を計るのではなく交差点の数を数え、その数に応じてボールをつかむなどのプログラムを作れば成功率を上げられたと思う。
授業外においてとても時間がかかってしまったので細かい作業も効率よく行えると良かったと思う。 電池の残量によって結果が変わってしまうこともあった。
超音波センサーを取り付けたが、機体と玉の距離の関係上、反応しないことが多かった。
・ライトセンサーを車体の軸に近づけるように工夫することでプログラム通りにライントレースをすることができた。
・機体自体の取り付け&取り外しが容易なのですぐに作業に入ることができた。
・しきい値を細かく調整することでスムーズにライントレースをすることができた。
・アームを回転させてキャッチ&シュートをする案は確実性が増し、非常に良かったと思う。