*課題1 [#l12ad1b8] **目標 [#i64331fb] #ref(2012b/Member/maji/Mission1/field.jpg,100%,フィールド) ピンポン球を持って黒い線の上を走り、上部のゴールの手前まで運びシュートする。 **ロボットの概要 [#d53a15b0] ***全体像 [#t4943c43] #ref(2012b/Member/maji/Mission1/all.jpg,20%,全体像) -カーブでポールと接触しないように横は短く、縦は長くした -コントローラの部分を後部に縦に取り付けて、前部に機能を集約させた -ピンポン球をどうやって持ち、シュートをするか考えた結果この形になった(下記で説明) ***ドライブベース [#e2e70d64] #ref(2012b/Member/maji/Mission1/dodai.jpg,100%,土台) -前部のアームの部分が不安定なので、土台はがっちりと安定したのになった -基礎土台で作っているうちに何度も変わった #ref(2012b/Member/maji/Mission1/run.jpg,100%,走る構造) -三輪車の逆バージョンで前輪駆動にしたのは、光センサーが近くて読み取りやすかったら -黒くて丸い部分は支えの役割で引きずって走る ***球をつかんでシュートする構造 [#f0f1fad4] &ref(2012b/Member/maji/Mission1/grab.jpg,100%,つかむ構造); &ref(2012b/Member/maji/Mission1/moter.jpg,100%,モーター); &ref(2012b/Member/maji/Mission1/catch.jpg,100%,つかんでる所); モーターのパワーがゴムとギアに伝わってアームを回す -このように球をアームを回すと本体に引っかかるので、そのまま運びゴール前で逆回転をして弾いてシュートする -他のグループとかぶらないようにと考えました。最初はアームを平行にしてアームにピンポン球を乗せて運ぶ方法でしたが、不安定だったので、 -他のグループとかぶらないようにと考えました。最初はアームを平行にしてアームにピンポン球を乗せて運ぶ方法でしたが、不安定だったのでアームを支える2本の柱の長さを調節してアームと本体でがっちりと挟むようにして安定感をだしました。ついでに、シュートもかっこよくなりました。 **プログラムの説明 [#v428c126] #define THRESHOLD 45 // しきい値 #define go_forward OnFwd(OUT_AC); // 直進 #define turn_left1 OnFwd(OUT_C);OnRev(OUT_A); // 左旋回 #define turn_left0 OnFwd(OUT_C);Off(OUT_A); // 左折 #define turn_right1 OnFwd(OUT_A);OnRev(OUT_C); // 右旋回 #define turn_right0 OnFwd(OUT_A);Off(OUT_C); // 右折 task main() { ClearTimer(0); int timer = 0; //続けて黒になった回数 int kado = 0; // 走っていて左側に直角がある回数 SetSensor(SENSOR_2,SENSOR_LIGHT); SetPower(OUT_B, 2); OnRev(OUT_B); Wait(30); Off(OUT_B); while(true){ // 黒い時 if (SENSOR_2 < THRESHOLD -4){ ClearTimer(0); while(SENSOR_2 < THRESHOLD -4){ turn_left1; } timer = FastTimer(0); //タイマーリセット // 灰色の時 } else if (SENSOR_2 < THRESHOLD +8){ go_forward; // 白い時 } else { turn_right1; } if (timer >= 30) { //0.3秒以上黒が続いたら直角とみなす PlayTone(440, 30); timer = 0; kado++; //直角の回数をカウント if (kado == 2) { //2つ目の直角にきたら turn_right1; //交差点で曲がったのを正 Wait(35); //面に向き直し交差点を通過す go_forward; //る Wait(30); timer = 0; } if (kado == 3) { //3つ目の直角にきたら turn_right1; //ゴールに対して正面に向くよう修正 turn_right1; Wait(60); Off(OUT_AC); SetPower(OUT_B, 7); OnFwd(OUT_B); Wait(100); Off(OUT_B); break; } } } Off(OUT_AC); } ***何度も直した所 [#b8ea2dc7] if (timer >= 30) { //0.3秒以上黒が続いたら PlayTone(440, 30); timer = 0; kado++; //直角の回数をカウント if (kado == 2) { //2つ目の直角にきたら turn_right1; Wait(35); go_forward; Wait(30); timer = 0; 最初はif (timer >= 30)の外にif (kado == 2)を置いていたけど、if (kado == 2)が来たらタイマーを0にしてしまうので、次のif (kado == 3)までいけなかったのをif (timer >= 30)の中に入れることによって直角の回数を3まで数えた *感想 [#j6de3015] 相方にかなりアドバイスをもらって完成しました。こんなに時間がかかると思わなかったので、次回は時間に余裕を持って完成させたい。プログラムの方は短くでき、しきい値を微調整しなくても安定してゴールまで行けたんで満足です。