- 追加された行はこの色です。
- 削除された行はこの色です。
[[2019a/Member]]
目次
#contents
* 課題について [#i0861621]
今回の課題はコースをライントレースをして、ピンポン玉を回収し出発地点に戻り、ピンポン玉をゴールに 当てることです。
画像(コース)
今回の課題はコースをライントレースをして、ピンポン玉を回収し出発地点に戻り、ピンポン玉をゴールに 当てることです。
#ref(./r.png,100%,)
* ロボットについて [#g60add42]
全体画像
画像(ロボット全体)
私たちのロボットは小回りがきくような小さなロボットを作りました。
センサーはできるだけ、ロボットの近くに置くようにしました。
そして、ピンポン玉を回収する機構は、あまりいいものを思いつかず、最終的にしっかりとつかめたらいい という発想に至りこのような、挟み込むようなものにしました。
画像(ピンポン玉を持つ機構)
また挟み込む機構を作るにあたって、歯車を使い1つのモーターで動くようにしました。
画像(挟み込む機構の歯車)
全体画像
#ref(./o.JPG,10%,)
私たちのロボットは小回りがきくような小さなロボットを作りました。
センサーはできるだけ、ロボットの近くに置くようにしました。
そして、ピンポン玉を回収する機構は、あまりいいものを思いつかず、最終的にしっかりとつかめたらいい という発想に至りこのような、挟み込むようなものにしました。
#ref(./p.JPG,10%,)
また挟み込む機構を作るにあたって、歯車を使い1つのモーターで動くようにしました。
#ref(./q.JPG,10%,)
* プログラミングについて [#t64abddc]
私が通る道のりはAからBに向かっていく順路です。
今回も、多くのプログラミングを書くので多少は楽にするために
#define
を多く使っています。
int black_time=30; //黒色を判別している時間の設定
black_timeは交差点に入ったときに黒の場所をどのくらい曲がっているのかを確認するためのものです。
#define gr OnFwd(OUT_A); Off(OUT_C); //右折
#define s OnFwd(OUT_A); OnRev(OUT_C); //直進
#define gl OnRev(OUT_A); OnRev(OUT_C); //左に旋回
#define b OnRev(OUT_A); OnFwd(OUT_C); //後退
#define close OnFwd(OUT_B); Wait(20); Off(OUT_B); Wait(100); //アームを閉じる(ボールを掴む)
#define open OnRev(OUT_B); Wait(20); Off(OUT_B); Wait(100); //アームを開く
また、サブルーチンを使っています。
このプログラムはライントレースをするためものです
sub follow_line()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
while(FastTimer(0)<black_time){ //black_timeが30より小さい間繰り返す
if(SENSOR_2<36){ //黒色の時
migisenkai //右に旋回
}else if((SENSOR_2>=36)&&(SENSOR_2<39)){ //黒灰色の時
usetsu ClearTimer(0); //右折,タイマー0をセット
}else if((SENSOR_2>=39)&&(SENSOR_2<43)){ //灰色の時
chokushin ClearTimer(0); //直進,タイマー0をセット
}else if((SENSOR_2>=43)&&(SENSOR_2<47)){ //白灰色の時
sasetsu ClearTimer(0); //左折,タイマー0をセット
}else if(SENSOR_2>=47){ //白色の時
hidarisenkai ClearTimer(0); //左に旋回,タイマー0をセット
}
}
Off(OUT_AC);
Wait(100);
ClearTimer(0);
}
ここからメインプログラムです。
なぜか、follow_lineが一つだけだとうごかないが、2つ重ねると動くので、重ねています。
task main (){
ピンポン玉をつかむ機構はそこまで速さはいらないのでパワーを1にしました。
SetPower(OUT_B,1);
follow_line();
follow_line();
ここまでがBからCまでです。
gl;
Wait(30);
Off(OUT_AC);
s;
Wait(30);
Off(OUT_AC);
交差点を通過するためのプログラムです。
follow_line();
follow_line();
CからDまでです。
gr;
Wait(30);
Off(OUT_AC);
s;
Wait(30);
Off(OUT_AC);
これも交差点のためのプログラムです
follow_line();
follow_line();
DE間のプログラムです。
s;
gr;
Wait(150);
Off(OUT_AC);
90度のカーブのためのプログラムです。
follow_line();
follow_line();
EF間です。
b;
Wait(50);
Off(OUT_AC);
gr;
Wait(140);
Off(OUT_AC);
ロボットが少しずれてしまっているので少し後退させまた動かしています。
follow_line();
follow_line();
GH間です
gl;
Wait(130);
Off(OUT_AC);
s;
Wait(60);
Off(OUT_AC);
交差点のプログラムです。
follow_line();
follow_line();
HI間です
gl;
Wait(100);
Off(OUT_AC);
s;
Wait(50);
Off(OUT_AC);
Iの交差点ようです。
follow_line();
follow_line();
IJ間です。
s;
Wait(30);
Off(OUT_AC);
ここは交差点プログラムを使わずに、まっすぐ行けばKまでいけました。
gr;
Wait(30)
Off(OUT_AC);
s;
Wait(20);
Off(OUT_AC);
一回ロボット自体を回転させKからLまでです。
close;
ここでピンポン玉をつかみます。
gr;
Wait(250);
Off(OUT_AC);
このプログラムはロボットを180度回転させます。
s;
Wait(20);
Off(OUT_AC);
そしてこのプログラムはロボットをラインの上に動かすプログラムです。
follow_line;
follow_line;
KM間です
ラインの左側を通ることで交差点を通らずに行ったので交差点プログラムはないです。
b;
Wait(50);
Off(OUT_AC);
これはシュートするために一回後退するプログラムです。
open;
s;
Wait(50);
Off(OUT_AC);
ここまでがシュートでした。
* 最後に [#r581175d]
今回良かった点
・ロボット自体が小さいおかげか小回りや大回りがfollow_lineだけですべて通れた
・ロボットが大きくならなかったので持ち運びが楽だった。
・ピンポン玉をつかむ機構と簡単に分けることができる
・簡単につなげることもできる
・ロボットが壊れることがなかった。
今回悪かった点
・交差点でいちいちプログラムを書いていた点(交差点プログラムを作らなかったこと)
・90度のカーブがうまくプログラムを書けなかった。
・何度かうまく動かなくなることがあった。