2017b/Member/OGI/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
目次
#contents
*課題2 [#gc17f0e3]
下の図のようなコースを各チームで作成し、「ミッション」を...
** コース [#xdefe08a]
#ref(2017b/Mission2/2017b-mission2.png,50%,課題2のコース)
第1コース
+ Aをスタート
+ Bを直進
+ Cを右折
+ Fを直進
+ Rを左折(一時停止)
+ Pを直進
+ X地点の紙コップを取得してコースに戻る
+ Qを左折
+ Sを直進(一時停止)
+ Y地点に紙コップを置いてコースに戻る
+ Sを直進(一時停止)
+ Fを左折(一時停止)
+ Cを右折(一時停止)
+ D地点へ(ゴール)
** ミッション [#k5f5fb77]
いずれかのコースで黒い線に沿って動き、紙コップを移動させ...
自分は第1コースを走行するロボットを作成した。
*ロボット [#d61248a3]
&ref(2017b/Member/OGI/Mission2/本体上.JPG,50%); &ref(2017...
1枚目の写真のように、2つのタイヤの幅を狭めることでロボ...
&ref(2017b/Member/OGI/Mission2/光センサー部分.JPG,75%); ...
*プログラム [#f3415e79]
**定義付け [#g94a355f]
#define THRESHOLD 46 //閾値
#define go(t) OnRev(OUT_AC);Wait(t);Off(OUT_AC); //t秒前進
#define back(t) OnFwd(OUT_AC);Wait(t);Off(OUT_AC); //t秒...
#define roll_left OnFwd(OUT_C);OnRev(OUT_A); //左旋回
#define turn_left OnRev(OUT_A);Off(OUT_C); //左折
#define roll_right OnFwd(OUT_A);OnRev(OUT_C); //右旋回
#define turn_right OnRev(OUT_C);Off(OUT_A); //右折
#define roll_left2(t) OnFwd(OUT_C);OnRev(OUT_A);Wait(t);...
#define turn_left2(t) OnRev(OUT_A);Off(OUT_C);Wait(t); /...
#define roll_right2(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t)...
#define turn_right2(t) OnRev(OUT_C);Off(OUT_A);Wait(t); ...
#define roll_left3 OnRev(OUT_A);OnFwd(OUT_C);until(SENSO...
#define roll_right3 OnRev(OUT_C);OnFwd(OUT_A);until(SENS...
#define close SetPower(OUT_B,1);OnFwd(OUT_B);Wait(50);Of...
#define open SetPower(OUT_B,1);OnRev(OUT_B);Wait(70);Off...
#define cross_stop Off(OUT_AC);Wait(100); //交差点で1秒...
#define STEP 2 // 一回の判定で進む時間
あらかじめ右左折やアームの動きを用意した。また、用途に合...
**ライントレース [#r9d37718]
***右側トレース [#p5e39a15]
sub LINE_R() //線の右側をトレース
{
SetSensor(SENSOR_2,SENSOR_LIGHT); //端子2に光センサ...
ClearTimer(0);
while(FastTimer(0)<=23) //0.23秒以内の場合はループ ...
{
if (SENSOR_2 > THRESHOLD +5) { //センサーが閾値+...
roll_left;
ClearTimer(0);
}else if (SENSOR_2 > THRESHOLD +3){ //センサーが...
turn_left;
ClearTimer(0);
}else if (SENSOR_2 > THRESHOLD){ //センサーが閾...
OnRev(OUT_AC);
ClearTimer(0);
}else if (SENSOR_2 > THRESHOLD -3){ //センサーが...
turn_right;
ClearTimer(0);
}else{ //上記のどの条件にも当てはまらないときに...
roll_right;
}
Wait(STEP);
}
Off(OUT_AC);
}
***左側トレース [#r337b88d]
sub LINE_L() //線の左側をトレース
{
SetSensor(SENSOR_2,SENSOR_LIGHT); //端子2に光センサ...
ClearTimer(0);
while(FastTimer(0)<=21) //0.21秒以内の場合はループ ...
{
if (SENSOR_2 > THRESHOLD +5) { //センサーが閾値+...
roll_right;
ClearTimer(0);
}else if (SENSOR_2 > THRESHOLD +3){ //センサーが...
turn_right;
ClearTimer(0);
}else if (SENSOR_2 > THRESHOLD){ //センサーが閾...
OnRev(OUT_AC);
ClearTimer(0);
}else if (SENSOR_2 > THRESHOLD -3){ //センサーが...
turn_left;
ClearTimer(0);
}else{ //上記のどの条件にも当てはまらないときに...
roll_left;
}
Wait(STEP);
}
Off(OUT_AC);
}
第1コースでは、ヘアピンカーブや円などは線の左側をトレース...
**コップを取る・置く [#c013ec9a]
***取る [#g432d4d5]
sub CATCH() //コップを取る
{
roll_right2(70); //進行方向調整
go(30); //コップに近づく
close; //アームを閉じる
roll_left2(80); //進行方向調整
go(30); //ラインに近づく
roll_right3; //ラインを見つけるまで右旋回
}
***置く [#l4d86ad5]
sub RELEASE() //コップを置く
{
roll_right2(90); //進行方向調整
open; //アームを開く
turn_left2(30); //進行方向調整
back(100); //コップから離れる
turn_right2(120); //ラインに近づく
}
**メインプログラム [#rec2eafb]
task main()
{
LINE_R(); //A〜B
go(20); //線から離れる
roll_left3; //線を見つける
LINE_R(); //B〜C
roll_right2(20); //進行方向調整
LINE_R(); //C〜F
go(25); //線から離れる
roll_left3; //線を見つける
LINE_R(); //F〜第2ヘアピンカーブ
go(25); //トレースの左右を変更するために線から離れる
LINE_L(); //第2ヘアピンカーブ〜R
cross_stop; //Rで1秒停止
roll_left2(20); //進行方向調整
LINE_L(); //R〜P
CATCH(); //コップを取る
LINE_L(); //P〜Q
go(30); //トレースの左右を変更するために線から離れる
LINE_R(); //Q〜S
cross_stop; //Sで1秒停止
go(15); //線から離れる
LINE_R(); //S〜S
cross_stop; //Sで1秒停止
go(20); //線から離れる
roll_left3; //線を見つける
LINE_R(); //S〜F
cross_stop; //Fで1秒停止
RELEASE(); //コップを置く
LINE_R(); //F〜C
cross_stop; //Cで1秒停止
roll_right2(50); //進行方向調整
go(120); //Dへ
}
*反省点 [#p149de35]
発表では上手くいったが、3回に1回程度の成功率だったので、...
終了行:
目次
#contents
*課題2 [#gc17f0e3]
下の図のようなコースを各チームで作成し、「ミッション」を...
** コース [#xdefe08a]
#ref(2017b/Mission2/2017b-mission2.png,50%,課題2のコース)
第1コース
+ Aをスタート
+ Bを直進
+ Cを右折
+ Fを直進
+ Rを左折(一時停止)
+ Pを直進
+ X地点の紙コップを取得してコースに戻る
+ Qを左折
+ Sを直進(一時停止)
+ Y地点に紙コップを置いてコースに戻る
+ Sを直進(一時停止)
+ Fを左折(一時停止)
+ Cを右折(一時停止)
+ D地点へ(ゴール)
** ミッション [#k5f5fb77]
いずれかのコースで黒い線に沿って動き、紙コップを移動させ...
自分は第1コースを走行するロボットを作成した。
*ロボット [#d61248a3]
&ref(2017b/Member/OGI/Mission2/本体上.JPG,50%); &ref(2017...
1枚目の写真のように、2つのタイヤの幅を狭めることでロボ...
&ref(2017b/Member/OGI/Mission2/光センサー部分.JPG,75%); ...
*プログラム [#f3415e79]
**定義付け [#g94a355f]
#define THRESHOLD 46 //閾値
#define go(t) OnRev(OUT_AC);Wait(t);Off(OUT_AC); //t秒前進
#define back(t) OnFwd(OUT_AC);Wait(t);Off(OUT_AC); //t秒...
#define roll_left OnFwd(OUT_C);OnRev(OUT_A); //左旋回
#define turn_left OnRev(OUT_A);Off(OUT_C); //左折
#define roll_right OnFwd(OUT_A);OnRev(OUT_C); //右旋回
#define turn_right OnRev(OUT_C);Off(OUT_A); //右折
#define roll_left2(t) OnFwd(OUT_C);OnRev(OUT_A);Wait(t);...
#define turn_left2(t) OnRev(OUT_A);Off(OUT_C);Wait(t); /...
#define roll_right2(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t)...
#define turn_right2(t) OnRev(OUT_C);Off(OUT_A);Wait(t); ...
#define roll_left3 OnRev(OUT_A);OnFwd(OUT_C);until(SENSO...
#define roll_right3 OnRev(OUT_C);OnFwd(OUT_A);until(SENS...
#define close SetPower(OUT_B,1);OnFwd(OUT_B);Wait(50);Of...
#define open SetPower(OUT_B,1);OnRev(OUT_B);Wait(70);Off...
#define cross_stop Off(OUT_AC);Wait(100); //交差点で1秒...
#define STEP 2 // 一回の判定で進む時間
あらかじめ右左折やアームの動きを用意した。また、用途に合...
**ライントレース [#r9d37718]
***右側トレース [#p5e39a15]
sub LINE_R() //線の右側をトレース
{
SetSensor(SENSOR_2,SENSOR_LIGHT); //端子2に光センサ...
ClearTimer(0);
while(FastTimer(0)<=23) //0.23秒以内の場合はループ ...
{
if (SENSOR_2 > THRESHOLD +5) { //センサーが閾値+...
roll_left;
ClearTimer(0);
}else if (SENSOR_2 > THRESHOLD +3){ //センサーが...
turn_left;
ClearTimer(0);
}else if (SENSOR_2 > THRESHOLD){ //センサーが閾...
OnRev(OUT_AC);
ClearTimer(0);
}else if (SENSOR_2 > THRESHOLD -3){ //センサーが...
turn_right;
ClearTimer(0);
}else{ //上記のどの条件にも当てはまらないときに...
roll_right;
}
Wait(STEP);
}
Off(OUT_AC);
}
***左側トレース [#r337b88d]
sub LINE_L() //線の左側をトレース
{
SetSensor(SENSOR_2,SENSOR_LIGHT); //端子2に光センサ...
ClearTimer(0);
while(FastTimer(0)<=21) //0.21秒以内の場合はループ ...
{
if (SENSOR_2 > THRESHOLD +5) { //センサーが閾値+...
roll_right;
ClearTimer(0);
}else if (SENSOR_2 > THRESHOLD +3){ //センサーが...
turn_right;
ClearTimer(0);
}else if (SENSOR_2 > THRESHOLD){ //センサーが閾...
OnRev(OUT_AC);
ClearTimer(0);
}else if (SENSOR_2 > THRESHOLD -3){ //センサーが...
turn_left;
ClearTimer(0);
}else{ //上記のどの条件にも当てはまらないときに...
roll_left;
}
Wait(STEP);
}
Off(OUT_AC);
}
第1コースでは、ヘアピンカーブや円などは線の左側をトレース...
**コップを取る・置く [#c013ec9a]
***取る [#g432d4d5]
sub CATCH() //コップを取る
{
roll_right2(70); //進行方向調整
go(30); //コップに近づく
close; //アームを閉じる
roll_left2(80); //進行方向調整
go(30); //ラインに近づく
roll_right3; //ラインを見つけるまで右旋回
}
***置く [#l4d86ad5]
sub RELEASE() //コップを置く
{
roll_right2(90); //進行方向調整
open; //アームを開く
turn_left2(30); //進行方向調整
back(100); //コップから離れる
turn_right2(120); //ラインに近づく
}
**メインプログラム [#rec2eafb]
task main()
{
LINE_R(); //A〜B
go(20); //線から離れる
roll_left3; //線を見つける
LINE_R(); //B〜C
roll_right2(20); //進行方向調整
LINE_R(); //C〜F
go(25); //線から離れる
roll_left3; //線を見つける
LINE_R(); //F〜第2ヘアピンカーブ
go(25); //トレースの左右を変更するために線から離れる
LINE_L(); //第2ヘアピンカーブ〜R
cross_stop; //Rで1秒停止
roll_left2(20); //進行方向調整
LINE_L(); //R〜P
CATCH(); //コップを取る
LINE_L(); //P〜Q
go(30); //トレースの左右を変更するために線から離れる
LINE_R(); //Q〜S
cross_stop; //Sで1秒停止
go(15); //線から離れる
LINE_R(); //S〜S
cross_stop; //Sで1秒停止
go(20); //線から離れる
roll_left3; //線を見つける
LINE_R(); //S〜F
cross_stop; //Fで1秒停止
RELEASE(); //コップを置く
LINE_R(); //F〜C
cross_stop; //Cで1秒停止
roll_right2(50); //進行方向調整
go(120); //Dへ
}
*反省点 [#p149de35]
発表では上手くいったが、3回に1回程度の成功率だったので、...
ページ名: