2016b/Member/aat/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*目次 [#p29d7ff8]
#contents
*課題 [#k9798d32]
#ref(./s_2016b-mission2.png,コース)
次のいずれかの経路を黒い線にそって動くロボットを作成する ...
&br;・A地点をスタートしてQ付近の3/4円周上でピンポン玉をつ...
&br;Aスタート → P直進 → Q直進 → (ピンポン玉をキャッチ) → ...
&br;・B地点をスタートしてQ付近の3/4円周上でピンポン玉をつ...
&br;Bスタート → R直進 → P右折 → Q直進 → (ピンポン玉をキャ...
&br;ただし、
&br;なるべく速く正確に動くロボットになるように工夫して、...
&br;ピンポン玉はQ近くの3/4円周上ならどこにおいてもよい
&br;可能であればC,Dのゴールエリアライン上からシュートする
&br;私はA点→D点のコースを担当した。
A点→P直進→Q直進→R右折→P直進→S左折→D点→シュート
*ロボットの説明 [#o3709025]
#ref(./s_12459.jpg,全体像)
#ref(./s_12462.jpg,全体像)
今回はできるだけコンパクトにするためにタイヤ同士の間隔を...
#ref(./s_12460.jpg,50,arm)
ここのところで工夫した点は、ギアを組合わせるのに高さがず...
*プログラムの説明 [#h51302c2]
task mainやサブルーチンで使用するものを以下のように定義し...
#define rightSENKAI OnFwd(OUT_A);OnRev(OUT_C); //右旋回
#define rightMAGARU OnFwd(OUT_A);Off(OUT_C); //右に曲がる
#define leftSENKAI OnFwd(OUT_C);OnRev(OUT_A); //左旋回
#define leftMAGARU OnFwd(OUT_C);Off(OUT_A); //左に曲がる
#define middle 47 //閾値
#define go(got) OnFwd(OUT_AC);Wait(got);Off(OUT_AC); //g...
#define TURN_RIGHT OnFwd(OUT_A);OnRev(OUT_C);until(SENSO...
#define TURN_LEFT OnFwd(OUT_C);OnRev(OUT_A);until(SENSOR...
#define cross_stop Off(OUT_AC);Wait(100); //交差点で1秒...
「左右に曲がる」と「右折左折」については後に説明する。
**ライントレースのプログラム [#d5b3ace5]
私はロボットが黒線の左側をなぞるプログラムを考えた。よっ...
&br;黒−左旋回
&br;黒っぽい―左に曲がる
&br;黒と白の中間―直進
&br;白っぽい―右に曲がる
&br;白−右旋回
&br;といった感じに動くとした。
交差点の判別は、左旋回が0.3秒以上であるなら(黒が0.3秒以上...
そして基本的なライントレースのプログラムを以下のように定...
sub Line() //ライントレース
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
ClearTimer(0);
while(FastTimer(0)<=30) //左旋回が0.3秒以内の場合はル...
{
if(SENSOR_2>middle+5)
{
rightSENKAI
ClearTimer(0); //白だったら右旋回しなさい
}
else if(SENSOR_2>middle+3)
{
rightMAGARU
ClearTimer(0); //白っぽいなら右に曲がりなさい
}
else if(SENSOR_2>middle)
{
OnFwd(OUT_AC);
ClearTimer(0); //中間なら直進しなさい
}
else if(SENSOR_2>middle-3)
{
leftMAGARU
ClearTimer(0); //黒っぽいなら左に曲がりなさい
}
else
{
leftSENKAI //黒なら旋回しなさい
}
}
Off(OUT_AC); //とまれ
}
これで大半はできたが、一部うまくいかない区間があった。そ...
&br;理由はおそらく交差点への進入角度が垂直でなく、やや左...
&br;そこでその区間だけ特別にプログラムを組んだ。
sub LineSP() //ライントレースSP
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
ClearTimer(0);
while(FastTimer(0)<=30)
{
if(SENSOR_2>middle+7)
{
rightSENKAI
ClearTimer(0);
}
else if(SENSOR_2>middle+5)
{
rightMAGARU
ClearTimer(0);
}
else if(SENSOR_2>middle)
{
OnFwd(OUT_AC);
ClearTimer(0);
}
else if(SENSOR_2>middle-6)
{
leftMAGARU
ClearTimer(0);
}
else
{
leftSENKAI
}
}
Off(OUT_AC);
}
解決策としては?交差点判別の0.3秒を短くする?交差点進入を垂...
&br;中身はほとんど変えず、middleに加減する数値を徐々に大...
**ピンポン玉のキャッチとシュート [#l199736a]
ピンポン球のキャッチは以下に定義した。
void hold(int t) //球のキャッチ
{
OnFwd(OUT_B);
Wait(t);
Off(OUT_B); //ハサミを閉じる
}
プログラムを楽にするために初めの段階からハサミを開いてお...
&br;次にシュートのプログラムである。
sub shoot() //シュート
{
rightSENKAI
Wait(20); //右に角度調整
OnRev(OUT_AC);
Wait(30); //少し後退
OnRev(OUT_B);
Wait(10); //ハサミを開く
go(30); //直進して、勢いでゴール
Off(OUT_ABC); //すべて停止
}
シュートは最後なので、シュートの直前は交差点判別されて(T...
&br;よって角度を右に修正してあげる必要がある。あとは少し...
*メインプログラム [#x63349f2]
task main()
{
Line(); //A-P間
cross_stop //一時停止
go(30); //直進
Line(); //P-Q間
cross_stop //一時停止
go(30); //直進
hold(15); //球キャッチ
Line(); //Q-Q間
cross_stop //一時停止
go(20); //直進
Line(); //Q-R間
cross_stop //一時停止
hold(5); //ハサミの緩みをなおす
go(30); //直進
TURN_RIGHT //センサーが黒を感知するまで右折
LineSP(); //R-P間
cross_stop //一時停止
go(30); //直進
Line(); //P-S間
cross_stop //一時停止
TURN_LEFT //センサーが白を感知するまで左折
Line(); //S-D間
shoot(); //シュート
}
交差点からの直進や左右折の対処に関して、あらかじめコース...
*反省点と感想 [#e52ae42f]
本体自体の完成も若干手間がかかったため、授業終了後も残っ...
&br;けれども本番でちゃんと動いてゴールもできたときはとて...
&br;今回の反省点はプログラムが大きくなってしまったことで...
終了行:
*目次 [#p29d7ff8]
#contents
*課題 [#k9798d32]
#ref(./s_2016b-mission2.png,コース)
次のいずれかの経路を黒い線にそって動くロボットを作成する ...
&br;・A地点をスタートしてQ付近の3/4円周上でピンポン玉をつ...
&br;Aスタート → P直進 → Q直進 → (ピンポン玉をキャッチ) → ...
&br;・B地点をスタートしてQ付近の3/4円周上でピンポン玉をつ...
&br;Bスタート → R直進 → P右折 → Q直進 → (ピンポン玉をキャ...
&br;ただし、
&br;なるべく速く正確に動くロボットになるように工夫して、...
&br;ピンポン玉はQ近くの3/4円周上ならどこにおいてもよい
&br;可能であればC,Dのゴールエリアライン上からシュートする
&br;私はA点→D点のコースを担当した。
A点→P直進→Q直進→R右折→P直進→S左折→D点→シュート
*ロボットの説明 [#o3709025]
#ref(./s_12459.jpg,全体像)
#ref(./s_12462.jpg,全体像)
今回はできるだけコンパクトにするためにタイヤ同士の間隔を...
#ref(./s_12460.jpg,50,arm)
ここのところで工夫した点は、ギアを組合わせるのに高さがず...
*プログラムの説明 [#h51302c2]
task mainやサブルーチンで使用するものを以下のように定義し...
#define rightSENKAI OnFwd(OUT_A);OnRev(OUT_C); //右旋回
#define rightMAGARU OnFwd(OUT_A);Off(OUT_C); //右に曲がる
#define leftSENKAI OnFwd(OUT_C);OnRev(OUT_A); //左旋回
#define leftMAGARU OnFwd(OUT_C);Off(OUT_A); //左に曲がる
#define middle 47 //閾値
#define go(got) OnFwd(OUT_AC);Wait(got);Off(OUT_AC); //g...
#define TURN_RIGHT OnFwd(OUT_A);OnRev(OUT_C);until(SENSO...
#define TURN_LEFT OnFwd(OUT_C);OnRev(OUT_A);until(SENSOR...
#define cross_stop Off(OUT_AC);Wait(100); //交差点で1秒...
「左右に曲がる」と「右折左折」については後に説明する。
**ライントレースのプログラム [#d5b3ace5]
私はロボットが黒線の左側をなぞるプログラムを考えた。よっ...
&br;黒−左旋回
&br;黒っぽい―左に曲がる
&br;黒と白の中間―直進
&br;白っぽい―右に曲がる
&br;白−右旋回
&br;といった感じに動くとした。
交差点の判別は、左旋回が0.3秒以上であるなら(黒が0.3秒以上...
そして基本的なライントレースのプログラムを以下のように定...
sub Line() //ライントレース
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
ClearTimer(0);
while(FastTimer(0)<=30) //左旋回が0.3秒以内の場合はル...
{
if(SENSOR_2>middle+5)
{
rightSENKAI
ClearTimer(0); //白だったら右旋回しなさい
}
else if(SENSOR_2>middle+3)
{
rightMAGARU
ClearTimer(0); //白っぽいなら右に曲がりなさい
}
else if(SENSOR_2>middle)
{
OnFwd(OUT_AC);
ClearTimer(0); //中間なら直進しなさい
}
else if(SENSOR_2>middle-3)
{
leftMAGARU
ClearTimer(0); //黒っぽいなら左に曲がりなさい
}
else
{
leftSENKAI //黒なら旋回しなさい
}
}
Off(OUT_AC); //とまれ
}
これで大半はできたが、一部うまくいかない区間があった。そ...
&br;理由はおそらく交差点への進入角度が垂直でなく、やや左...
&br;そこでその区間だけ特別にプログラムを組んだ。
sub LineSP() //ライントレースSP
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
ClearTimer(0);
while(FastTimer(0)<=30)
{
if(SENSOR_2>middle+7)
{
rightSENKAI
ClearTimer(0);
}
else if(SENSOR_2>middle+5)
{
rightMAGARU
ClearTimer(0);
}
else if(SENSOR_2>middle)
{
OnFwd(OUT_AC);
ClearTimer(0);
}
else if(SENSOR_2>middle-6)
{
leftMAGARU
ClearTimer(0);
}
else
{
leftSENKAI
}
}
Off(OUT_AC);
}
解決策としては?交差点判別の0.3秒を短くする?交差点進入を垂...
&br;中身はほとんど変えず、middleに加減する数値を徐々に大...
**ピンポン玉のキャッチとシュート [#l199736a]
ピンポン球のキャッチは以下に定義した。
void hold(int t) //球のキャッチ
{
OnFwd(OUT_B);
Wait(t);
Off(OUT_B); //ハサミを閉じる
}
プログラムを楽にするために初めの段階からハサミを開いてお...
&br;次にシュートのプログラムである。
sub shoot() //シュート
{
rightSENKAI
Wait(20); //右に角度調整
OnRev(OUT_AC);
Wait(30); //少し後退
OnRev(OUT_B);
Wait(10); //ハサミを開く
go(30); //直進して、勢いでゴール
Off(OUT_ABC); //すべて停止
}
シュートは最後なので、シュートの直前は交差点判別されて(T...
&br;よって角度を右に修正してあげる必要がある。あとは少し...
*メインプログラム [#x63349f2]
task main()
{
Line(); //A-P間
cross_stop //一時停止
go(30); //直進
Line(); //P-Q間
cross_stop //一時停止
go(30); //直進
hold(15); //球キャッチ
Line(); //Q-Q間
cross_stop //一時停止
go(20); //直進
Line(); //Q-R間
cross_stop //一時停止
hold(5); //ハサミの緩みをなおす
go(30); //直進
TURN_RIGHT //センサーが黒を感知するまで右折
LineSP(); //R-P間
cross_stop //一時停止
go(30); //直進
Line(); //P-S間
cross_stop //一時停止
TURN_LEFT //センサーが白を感知するまで左折
Line(); //S-D間
shoot(); //シュート
}
交差点からの直進や左右折の対処に関して、あらかじめコース...
*反省点と感想 [#e52ae42f]
本体自体の完成も若干手間がかかったため、授業終了後も残っ...
&br;けれども本番でちゃんと動いてゴールもできたときはとて...
&br;今回の反省点はプログラムが大きくなってしまったことで...
ページ名: