[[2016a/Member]] #contents *今回の課題 [#c2669cfd] ・下の図のようなコースを各チームで作成し、「ミッション」を達成するためのロボットを作成する。 ・今回、私が担当した課題コース •A地点からB地点へ (一人目) ◦A地点 → P直進 → Q直進 → Q直進 → R左折 → B地点 #ref(2016a/Member/katsumi/Mission2/2016a-mission2.png,100%, ) *ロボットの構造と工夫点 [#k96bacde] &ref(2016a/Member/katsumi/Mission2/robo6.JPG,50%,); &ref(2016a/Member/katsumi/Mission2/robo7.JPG,50%,); ・ロボットの車輪の数を4輪→3輪に変更することでより小回りが効くようになった。 理由としてはカーブするときの円の軸が中心より前輪寄りになったからだと考えられる。 *プログラミング [#ice4e990] **定義 [#wa827638] #define left Off(OUT_A); OnFwd(OUT_C); //左旋回 #define right Off(OUT_C); OnFwd(OUT_A); //右旋回 #define mae OnFwd(OUT_AC); // 前進 **使用したサブルーチン [#ha29d312] sub line (){ SetSensor(SENSOR_2,SENSOR_LIGHT); int nOnline=0;until(nOnline==60){//黒を60回認識するまでライントレースをする int nOnline=0;until(nOnline=60){//黒を60回認識するまでライントレースをする if(SENSOR_2<45){left;nOnline++;} else{right;}Wait(5);} Off(OUT_A+OUT_C);Wait(100);} sub go() {SetSensor(SENSOR_2,SENSOR_LIGHT); int nOnline=0;until(nOnline==100){//黒を100回認識するまでライントレースをし、その後に直進する int nOnline=0;until(nOnline=100){//黒を100回認識するまでライントレースをし、その後に直進する if(SENSOR_2<45){left;nOnline++;} else{right;}Wait(5);} Off(OUT_A+OUT_C);Wait(100);} sub hidari() {SetSensor(SENSOR_2,SENSOR_LIGHT); int nOnline=0;while(nOnline<10)//黒を10回以下認識するときにライントレースをし、それ以上のときに左旋回する。 {if(SENSOR_2<40){right;nOnline++;} else{left;nOnline=0;}Wait(1);} Off(OUT_A+OUT_C);Wait(100);left;Wait(100); Off(OUT_A+OUT_C);Wait(100);} sub migi() {SetSensor(SENSOR_2,SENSOR_LIGHT); int nOnline=0;while(nOnline<10)//黒を10回以下認識するときにライントレースをし、それ以上のときに右旋回する。 {if(SENSOR_2<40){right;nOnline++;} else{right;nOnline=0;}Wait(1);} Off(OUT_A+OUT_C);Wait(100);right;Wait(80); Off(OUT_A+OUT_C);Wait(100);} **実際に作用したプログラム [#daabdfa5] #define left Off(OUT_A); OnFwd(OUT_C); //左旋回 #define right Off(OUT_C); OnFwd(OUT_A); //右旋回 #define mae OnFwd(OUT_AC); // 前進 sub line (){ SetSensor(SENSOR_2,SENSOR_LIGHT); int nOnline=0;until(nOnline==60){//黒を60回認識するまでライントレースをする int nOnline=0;until(nOnline=60){//黒を60回認識するまでライントレースをする if(SENSOR_2<45){left;nOnline++;} else{right;}Wait(5);} Off(OUT_A+OUT_C);Wait(100);} sub go() {SetSensor(SENSOR_2,SENSOR_LIGHT); int nOnline=0;until(nOnline==100){//黒を100回認識するまでライントレースをし、その後に直進する int nOnline=0;until(nOnline=100){//黒を100回認識するまでライントレースをし、その後に直進する if(SENSOR_2<45){left;nOnline++;} else{right;}Wait(5);} Off(OUT_A+OUT_C);Wait(100);} sub hidari() {SetSensor(SENSOR_2,SENSOR_LIGHT); int nOnline=0;while(nOnline<10)//黒を10回以下認識するときにライントレースをし、それ以上のときに左旋回する。 {if(SENSOR_2<40){right;nOnline++;} else{left;nOnline=0;}Wait(1);} Off(OUT_A+OUT_C);Wait(100);left;Wait(100); Off(OUT_A+OUT_C);Wait(100);} sub migi() {SetSensor(SENSOR_2,SENSOR_LIGHT); int nOnline=0;while(nOnline<10)//黒を10回以下認識するときにライントレースをし、それ以上のときに右旋回する。 {if(SENSOR_2<40){right;nOnline++;} else{right;nOnline=0;}Wait(1);} Off(OUT_A+OUT_C);Wait(100);right;Wait(80); Off(OUT_A+OUT_C);Wait(100);} task main() { line(); left(100); go(); go(); go(); go(); } *ミッションの様子 [#lf217bdf] #ref(2016a/Member/katsumi/Mission2/robo1.JPG,50%,); *問題点、失敗 [#gfe04c61] なかなか一回でミッションを成功させることができずに、途中で終わってしまうことがほとんどだった。 原因としては、ロボット自身が作り出す影を黒い線と誤認してしまうこと。そして、カーブと交差点の区別がうまくいかないことであった。コースの関係上、カーブの厳しさが何パターンもあるので1つ1つを正確に判断することができなかった。 *まとめ [#l91292d2] 正直言うと、とても難しかったの一言に尽きる。 特にロボコンはロボットの構造やプログラミングに左右されるだけでなく、その周りの環境にも強く影響を受けることがわかった。(部屋の明るさや床の形状など) また同じ条件でもロボットを動かす度に、結果が変わるのも不思議であった。 次はこうした問題をどうしたら解決できるかに重点を置いていきたいと思う。