- 追加された行はこの色です。
- 削除された行はこの色です。
*目次 [#r61547b2]
#contents
*課題2の内容 [#v95515a7]
-各チームで作成したコースを1周するロボットを製作せよ。
-交差点以外のコース上に350mlの空の空き缶を2個以上おき、空き缶にぶつかった時には次のような動作するプログラムを作成せよ
--1.空き缶をコース上に戻して再びコースに戻って進む
--2.空き缶を次の交差点まで運んで行き、その交差点に空き缶を残してさらにコースに沿って進む
-※ただし、
--速さと正確さを追求すること
--コースを1周したら自動的に止まること
--交差点では一時停止すること
*メンバー紹介 [#h24ebdbc]
-T.Y
-ぱんだ
*コース紹介 [#k101d602]
#ref(2010a/A3/課題2右/IMGP0028.JPG,50%,コ−ス)
よく見れば何かに見える!?
*ロボット紹介 [#b662ce62]
**各部位の説明 [#j1ea737f]
----
正面
#ref(2010a/A3/課題2右/IMGP0021.JPG,50%,光センサー)
緑で囲まれた部分は光センサー。
----
アーム
#ref(2010a/A3/課題2右/IMGP0023.JPG,50%,アーム部位)
オレンジの丸で囲まれた部分で缶を支える。
----
タッチセンサー
#ref(2010a/A3/課題2右/IMGP0024.JPG,50%,タッチセンサー部位)
ピンクの丸で囲まれた部分はタッチセンサーに缶が当たり損ねないように補助を付けて、前方のどこに当たってもよくした。
**工夫した点 [#dfa5d585]
-アームとタッチセンサーでうまく缶を固定できるようにした。
-アームの位置は高すぎず、低すぎない位置につけた。
-バックしても缶を移動できるようにアームの先に輪をつけた。
-タッチセンサーに当たり損ねるのを防ぐためにバンパーを付けて前方のどこに当たってもよくした。
-各パーツを持ち運びやすいように孤立させた。
-前輪を大きくすることで車体を安定させた。
-複雑そうに見えるが意外とシンプルにロボットを作った。
-光センサーとタイヤの位置を近くして線に沿って移動させやすくした。
**苦労した点 [#q1023dd0]
-どうやって缶を移動させるか。
-アームと輪の部分をどうやって連結させるか。
-タッチセンサーにどうやって缶をうまくあてるか。
-光センサーをどこにつけるか。
-重心が前すぎないようにするためにはどうするか。
*プログラム紹介 [#m0575cc2]
**T.Yのプログラム [#h9371237]
#define arm_up OnFwd(OUT_C);Wait(10);
#define arm_down OnRev(OUT_C);Wait(10);
#define THRE 40 //閾値
#define THRE3 44
#define go OnFwd(OUT_A+OUT_B); //前進
#define back OnRev(OUT_A+OUT_B); //後退
#define right OnFwd(OUT_A);OnRev(OUT_B);Wait(100);Off(OUT_A+OUT_C); //右に向く
#define lefr OnFwd(OUT_B);OnRev(OUT_A);Wait(100);Off(OUT_A+OUT_C);
#define kousaten1(t) Off(OUT_A+OUT_B);Wait(300);OnFwd(OUT_B);OnRev(OUT_A);Wait(20);OnFwd(OUT_A+OUT_B);Wait(t);flag++; //交差点の対処
#define kousaten2(t) Off(OUT_A+OUT_B);Wait(300);OnFwd(OUT_A);OnRev(OUT_B);Wait(20);OnFwd(OUT_A+OUT_B);Wait(t);flag++; //交差点の対処
#define turn OnFwd(OUT_A);OnRev(OUT_B);Wait(200);Off(OUT_A+OUT_B); //180度回転
task main()
{
SetSensor(SENSOR_1,SENSOR_TOUCH);//1はタッチセンサ
SetSensor(SENSOR_2,SENSOR_LIGHT);//2は光センサ
SetSensor(SENSOR_3,SENSOR_LIGHT);//3は光センサ
int flag=0;
while (flag<6) {
if (SENSOR_2 > THRE)
{if (SENSOR_3 > THRE3){go;} //光センサ2、3が白にある時
else{OnFwd(OUT_B);OnRev(OUT_A);} //光センサ3が黒線上にある時
}
else
{if (SENSOR_3 > THRE3){OnFwd(OUT_A); //光センサ2が黒線上にある時
OnRev(OUT_B);}
else{if(flag<1){kousaten1(30);} //最初の交差点
else {if(flag==1){kousaten2(40);}
else if(flag==2){kousaten1(40);}
else if(flag==3){kousaten2(30);}
else if(flag==4){kousaten1(30);}
else if(flag==5){kousaten2(30);}
}
}
}
Off(OUT_A+OUT_B);
}
***工夫した点 [#zf3d1a2d]
-コースが不規則で難しいコースなので、交差点で微調整してもなかなかうまくいかず、交差点一回一回微調整をしてようやくうまくいった。
-whileをつかって、最後の交差点が来たら止まるようにプログラムをした。
-ラインをトレースするとき、片方のタイヤを止まらせるだけではカーブがうまく回れないので、タイヤを別々反対の動きをしてそれを解消した。
-交差点で空き缶を残してしまうので、残した空き缶に当たったら空き缶をよけて、次に進むようにした。
-マクロを使って回転する角度を微調整をした。
***反省点 [#p3bf4229]
-もっとプログラムを簡略化できたのではないかと思った。
-コースアウトした時のプログラムを考えていなかった。
-あまり定数を使わないで、もっとロボットに任せられるプログラムを作れればと思った。
-空き缶をキャッチするのがなかなかうまくいかなかったので、今度はロボットをいろいろ工夫してみようと思った。
***感想 [#lfcc46db]
-一回目の課題と違って、とても難易度が上がっていて、時間がかかった。
-if文をつかっていると間違えが時々わからなくなって苦労した。
-今回の課題を通してだいぶロボットに愛着がわいた。
-プログラミングをやっていると、だんだんプログラミングがわかって、プログラミングが面白く感じた。
**ぱんだのプログラム [#pde3a14a]
***工夫した点 [#c070d4d2]
***反省点 [#eb570f1c]
***感想 [#ge5d43c6]
*全体の反省 [#f26f747f]
*コメント欄 [#ja96bab1]
-コメントお願いします。
#comment