[[2015a/Member]] *テーマ [#y7b72851] 今回のロボットのテーマは「確実にライントレースをすること」「ボールをしっかりつかんでゴールまで運ぶ。」この二つを意識して今回の課題を進めていきたいと思います。 **関数の定義 [#qebc5698] 今回のプログラミングではライントレースを確実にするためにかなりスピードを抑えてみました。おかげでおじいちゃんみたいなかなり遅いスピードでしたがかなり精度の高いライントレースができました。 #define BLACK 36 #define WHITE 48 #define SPEED 18 #define go_forward OnRev(OUT_BC,SPEED); #define turn_left OnRev(OUT_B,SPEED);Off(OUT_C); #define turn_right OnFwd(OUT_B,SPEED2);OnRev(OUT_C,SPEED2); #define STEP 1 //センサーのデータの取得頻度を1[ms]に設定 #define SPEED2 15 #define SPEED3 25 #define grab OnFwd(OUT_A,SPEED3);Wait(1200);Off(OUT_A); #define shoot turn_left;Wait(800);go_forward;Wait(300);OnRev(OUT_A,SPEED3);Wait(1000);Off(OUT_A); **ボールをキャッチ&シュートの構造とプログラミング [#q7ba514d] 今回私が作った中で最もよかった点がボールをつかむための機構です。両方から挟み込みながらボールをすくいあげることでボールをキープすることを可能にしました。参考にしたのはNXCの説明書についているゴルフクラブのようなものを使ってボールを打ち出す機構です。片方側である回転を行えばその逆側では逆回転を行う性質があるのでその性質を生かしてモーター一つで二つの方向を使うことでボールを&size(40){挟む};ことができました &ref(./17061.jpg,30%); &ref(./th3MHHYTJ0.jpg,30%); &ref(./15497.jpg,30%); *全体のプログラミング [#lb070a2c] これまでの定義づけやボールに関することを生かしつつ下記のようなプログラミングを作りました。 task main(){ SetSensorLight(S3); int n=0; //黒の上にいる時間を計測するための変数 int flg1=0; //交差点通過前=0 交差点通過後=1 int flg2=0; //ゴール判定用のフラグ int flg3=0; //ボールキャッチ前=0 ボールキャッチ後=1 long t0=CurrentTick(); while(flg2==0){ if(CurrentTick()-t0>28500 && flg3==0){ //ボールキャッチ grab; flg3=1; }else if(SENSOR_3 < BLACK){ //黒の上なら turn_left; n++; if(n>1500 && CurrentTick()-t0>28500 && flg1==0){ //交差点の処理 Off(OUT_BC); n=0; //黒の上にいるカウンターのリセット flg1=1; //交差点通過フラグをたてる。ここでフラグをたてたら交差点の処理は行われない go_forward; Wait(1000); }else if(n>2400 && flg1==1){ flg2=1; //ゴール判定用のフラグをたてる } }else if(SENSOR_3 < WHITE){ //グレーなら turn_left; n=0; //黒の上にいるカウンターのリセット }else{ //それ以外(白)なら turn_right; n=0; //黒の上にいるカウンターのリセット } Wait(STEP); //ここでデータの値が1[ms]になっている } shoot; } *今回の反省点&良かった点 [#q5a37a02] やはり最も問題になったのがセンサーの位置とタイヤの位置が遠いということでした。位置が遠いのでわずかですがずれが生じてしまったのでしっかりとセンサーの位置を考えながらロボットを作っていきたいと思いました。今回、自分が一番よくできたと思う点はボールをつかむ部分がよくできたなと思います。後、プログラミングを同じグループの人にほぼほぼ教えてもらいながらだったので自分の理解が足りないところが多かったので練習問題をこなして理解できるようにしました。