目次
#contents
* 課題の説明 [#kb717e6d]
&ref(2014a/Member/fuji/Mission2/2014a-mission2.png);
図の黄色いところに置いてある数字が書いてある紙コップを、A,B,Cと書かれた場所に置いてある同じ数字が書いてある紙コップに重ねる。~
図の黄色い場所には、その数字と同じ数字が書かれた紙コップが置かれる。
またA,B,C書かれた場所にも1から3までの数字が書かれている紙コップが置かれる、 どのコップをどこに置くかは競技を始める直前にサイコロを振って決める。~
またA,B,C書かれた場所にも1から3までの数字が書かれている紙コップが置かれる、 どのコップをどこに置くかは競技を始める直前にサイコロを振って決める。
ルール、得点の算出方法は[[2014a/Mission2]]を参照してください。
* メンバー [#j0ee8e63]
藤岡芳弥 秋山和哉 岩佐暁史
* ロボット本体 [#g0b2bc6e]
**全体像 &ref(2014a/Member/fuji/Mission2/new_17.jpg); [#s9f7cede]
コップをつかむ機構が大きさを取りすぎてしまったためRCXを高いところに置くしかなくアンバランスになってしまった。
**コップをつかむ機構 [#w2b23a33]
&ref(2014a/Member/fuji/Mission2/new_14.jpg);
コップの上からかぶせることによりコップをつかむ。
コップをつかんだ時の写真
&ref(2014a/Member/fuji/Mission2/new_20.jpg);
**タイヤのゴムを上下運動させる機構 [#adca6713]
&ref(2014a/Member/fuji/Mission2/new_55.jpg);
↙写真では切れていますがここにタイヤのゴムが付いています。
��のギアとモーターのギアがかみ合っているので(下の写真を参照)、�△離癲璽拭爾�回転することによりタイヤのゴムが先端についた�,�上下運動して、コップをつかんだり持ち上げたりします。
&ref(2014a/Member/fuji/Mission2/new_23.jpg);
**コップを外す機構 [#tb058f71]
&ref(2014a/Member/fuji/Mission2/24.jpg);
タイヤのゴムに挟まったコップをに上げていくと、赤い突起がついた所にコップがあたりコ落ちる。
**センサー [#wc56cdaf]
&ref(2014a/Member/fuji/Mission2/25.jpg);
正面を向いている、赤いLEDが見て取れる青いブロックがコップの色を感知するためのセンサー~
(何番のコップかを識別するために、コップには番号ごとに色を付けてある。)~
下を向いている青いブロックがライントレイスするためのセンサー~
(ラインの上を走ってコップを見つけるため)~
*プログラム [#u7c938b2]
**定義 [#w25040d8]
#define HIPOWER 1 //直線用のパワー
#define LOWPOWER 3 //カーブ用のパワー
#define set_power_H SetPower(OUT_AC,HIPOWER);
#define set_power_L SetPower(OUT_AC,LOWPOWER);
#define go_forward set_power_H; OnFwd(OUT_AC); //直進
#define turn_left1 set_power_L;\
OnFwd(OUT_C); OnRev(OUT_A); //turn_left1を左に極地旋回と定義
#define turn_left0 set_power_L;\
OnFwd(OUT_C); Off(OUT_A); // turn_left0左に信地旋回と定義
#define turn_right0 set_power_L;\
OnFwd(OUT_A); Off(OUT_C); //turn_right0を右に極地旋回と定義
#define turn_right1 set_power_L;\
OnFwd(OUT_A); OnRev(OUT_C); //右折 //turn_right1を右に信地旋回と定義
#define SIGNALON 13
#define cross set_power_H; OnFwd(OUT_AC);Wait(20); //交差点を渡る
#define c1 if (SENSOR_3 < 37) {Off(OUT_AC); SendMessage(SIGNALON);Wait(80);} //黒い紙コップを見つけたら2番のRCXにメッセージを送る。
**メインタスク [#d5a810b0]
task main() {
SetSensor(SENSOR_2,SENSOR_LIGHT); //光センサーセット
SetSensor(SENSOR_3,SENSOR_LIGHT);
int nl=0;//交差点を判断するために、何回連続で黒線を感知したかカウントする変数nlを定義(交差点では通常のラインよりも黒連続で感知する回数が多くなる。)
int cc=0;//交差点の数を数えるための変数ccを定義
**A地点まで行くためのプログラム
go_forward;
Wait(460);
turn_left1;
Wait(140);
go_forward;
Wait(280);
ここまでのプログラムにより図のA地点まで来ます。
ClearTimer(0);//タイマーゼロをセット(交差点でないところで黒線を連続で数えすぎて交差点を誤って認知しないためにタイマーを用いる)
while (true) {
while ((nl < 5) ||(FastTimer(0)<500)){// 黒線を5回を連続で感知した回数が5以下、もしくはスタートから500秒以内ならば以下のプログラムを実行する
if (SENSOR_2 < 37) { //黒線を判断
turn_left1; //左に局地旋回
nl++;
nl++;
} else if (SENSOR_2 < 41) { //黒線と白線の中間(黒線より)を判断
turn_left0;
nl=0;//nlをリセット
} else if (SENSOR_2 < 45) { //黒線と白線のちょうど中間を判断
go_forward;~nl=0;
go_forward;
nl=0;
} else if (SENSOR_2 < 50) { //黒線と白線の中間(白線より)を判断
turn_right0;
} else { //ロボットが白線の上にいる状態
turn_right1; ~nl=0;
turn_right1;
nl=0;
}
Wait(1);
}
turn_right1; Wait(35);
cross;
cc++;
if (cc == 1) { //一つ目の交差点に出会ったと判断
go_forward;
Wait(50);
c1;
OnRev(OUT_AC);
Wait(150);
turn_left1;
Wait(40);
go_forward;
Wait(280);
c1;
OnRev(OUT_AC);
Wait(500);
turn_left1;
Wait(100);
go_forward;
Wait(200);
c1;
OnRev(OUT_AC);
Wait(100);
turn_left1;
Wait(330);
go_forward;
Wait(1000);
} } }
*参考文献:http://yakushi.shinshu-u.ac.jp/robotics/?2014a%2FMember%2Fkanzaki%2FMission2 [#sc853718]