2017b/Member/cyanomelana/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
#contents
*課題2 [#bbc41df2]
あらかじめ指定されたコースの線に沿って動くロボットを作る。
#ref(2017b/Member/cyanomelana/Mission2/ロボットコース.JPG...
***交差点を通る順番(上の写真も参考) [#h3a66d2d]
1.Aをスタート
2.Bを直進
3.Cを右折
4.Fを直進
5.Rを左折(一時停止)
6.Pを直進
7.X地点の紙コップを取得してコースに戻る
8.Qを左折
9.Sを直進(一時停止)
10.Y地点に紙コップを置いてコースに戻る
11.Sを直進(一時停止)
12.Fを左折(一時停止)
13.Cを右折(一時停止)
14.D地点へ(ゴール)
*作成したロボット [#v746d730]
作成したロボットはロボットの組み立て方が載っている本のマ...
#ref(2017b/Member/cyanomelana/Mission2/IMG_6411.JPG,55%,...
#ref(2017b/Member/cyanomelana/Mission2/IMG_6396.JPG,55%,...
**ロボットの詳細 [#p642f532]
***センサーの取り付け位置 [#vc70d357]
明るさを読み取るセンサーをロボットに取り付ける工夫として...
#ref(2017b/Member/cyanomelana/Mission2/IMG_6407.1.jpg,100...
#ref(2017b/Member/cyanomelana/Mission2/sensor111.JPG,90%,...
また、センサーの位置をできるだけ前輪の車軸の近くにするこ...
#ref(2017b/Member/cyanomelana/Mission2/ロボットセンサー.J...
#ref(2017b/Member/cyanomelana/Mission2/sennsa.JPG,55%,ロ...
***紙コップをとる機構 [#e8250dca]
紙コップをとる機構を作るうえでの工夫として、必ず紙コップ...
#ref(2017b/Member/cyanomelana/Mission2/ude.JPG,45%,紙コッ...
*作成したプログラミング [#dc13cb4b]
プログラミングを作るうえでは「線の左を認識」「線の左を認...
**基本的な動作のプログラミング [#de62d4e8]
***ライントレースする仕組み [#t436f16b]
幅が2cmの黒い線に光センサーをそれぞれの場所に当てた時に...
この光センサーが示した値をもとに「if」を用いてプログラム...
下の(「線の左側を認識」して進むプログラミング)を参照 ~
#ref(2017b/Member/cyanomelana/Mission2/www.JPG,45%,光セン...
***交差点を認識する仕組み [#id50299a]
交差点を曲がる、もしくは通過するとき、センサーは必ず濃い...
この濃い黒を連続で通過する時間がある一定時間以上あるとき...
#ref(2017b/Member/cyanomelana/Mission2/K.JPG,40%,交差点認...
**主に使用するプログラミング [#g9f1eef7]
まずdefineで次の内容を定義する。
#define llt OnFwd(OUT_A,30); OnRev(OUT_C,30);//大きく左...
#define lrt OnRev(OUT_A,30); OnFwd(OUT_C,30);//大きく右...
#define ternleft OnFwd(OUT_A,50); OnFwd(OUT_C,5);//左に...
#define ternright OnFwd(OUT_A,5); OnFwd(OUT_C,50);//右...
#define go OnFwd(OUT_A,30); OnFwd(OUT_C,30);//直進する
#define LD OnFwd(OUT_B,30); Wait(400); Off(OUT_B);//コッ...
#define LU OnRev(OUT_B,30); Wait(400); Off(OUT_B);//コッ...
#define STEP 1;//whileの中のプログラミングを1/1000秒ご...
*「PB」の値は線の中央の濃い黒を連続で認識できる時間であ...
例えば「PB<180」の場合濃い黒を連続で180/1000秒間以上認識...
*「PB=0」はセンサーが濃い黒以外を認識した場合PBの値を...
***「線の左側を認識」して進むプログラミング [#u8892227]
task main ()
{
SetSensorLight(S1);
while(true)
{
if(SENSOR_1<30)//線の中央の濃い黒を認識したときは大き...
{
llt;
}
else if(SENSOR_1<40)//線の中央でない薄い黒を認識した...
{
ternleft;
}
else if(SENSOR_1<45)//線と白の部分のちょうど境界線を...
{
go;
}
else if(SENSOR_1<50)//真っ白ではないが白の部分を認識...
{
ternright;
}
else //真っ白の部分を認識したとき大きく...
{
lrt;
}
Wait(STEP);
}
}
***「線の右側を認識、交差点を認識」して進むプログラミング...
task main ()
{
SetSensorLight(S1);
int PB = 0;
while(PB<180) //センサーが30以下の値を連続180/1000...
{
if(SENSOR_1<30) //線の中央の濃い黒を認識したとき...
{
lrt;
PB++;
}
else if(SENSOR_1<40)//線の中央でない薄い黒を認識した...
{
ternright;
PB = 0;
}
else if(SENSOR_1<45)//線と白の部分のちょうど境界線を...
{
go;
PB = 0;
}
else if(SENSOR_1<50)//真っ白ではないが白の部分を認識...
{
ternleft;
PB = 0;
}
else //真っ白の部分を認識したとき大きく左に回る
{
llt;
PB = 0;
}
Wait(STEP);
}
Off(OUT_AC);
PB = 0;
}
***「線の左側を認識、交差点を認識」して進むプログラミング...
task main ()
{
SetSensorLight(S1);
int PB = 0;
while(PB<180)//センサーが30以下の値を連続180/1000秒以...
{
if(SENSOR_1<30)//線の中央の濃い黒を認識したときは大き...
{
llt;
PB++;
}
else if(SENSOR_1<40)//線の中央でない薄い黒を認識した...
{
ternleft;
PB = 0;
}
else if(SENSOR_1<45)//線と白の部分のちょうど境界線を...
{
go;
PB = 0;
}
else if(SENSOR_1<50)//真っ白ではないが白の部分を認識...
{
ternright;
PB = 0;
}
else //真っ白の部分を認識したとき大きく右...
{
lrt;
PB = 0;
}
Wait(STEP);
}
Off(OUT_AC);
PB = 0;
}
**プログラミングの全体 [#a6ec0c7b]
全体のプログラミングは「主に使用するプログラミング」で説...
*プログラミングの説明の図では赤い矢印はロボットが前進し...
***プログラミングの分け方 [#y4065fda]
1.AB
2.BC
3.CFE
4.ER
5.RP
6.catch(紙コップを取る)
7.PQ
8.QS
9.SSA
10.release(紙コップを放す)
11.SSB
12.SF
13. FC
14. CD
***AB間のプログラミング [#a1a3f4c0]
AB間は「線の右側を認識、交差点を認識」して進むプログラム...
BC間のプログラムに移動するために右に少し曲がったロボット...
sub AB()
{
SetSensorLight(S1);
int PB = 0;
while(PB<180)
{
if(SENSOR_1<30)
{
lrt;
PB++;
}
else if(SENSOR_1<40)
{
ternright;
PB = 0;
}
else if(SENSOR_1<45)
{
go;
PB = 0;
}
else if(SENSOR_1<50)
{
ternleft;
PB = 0;
}
else
{
llt;
PB = 0;
}
Wait(STEP);
}
ternleft;//少し左に曲がる
Wait(200);
PB = 0;
}
***BC間のプログラミング [#u21d51ae]
BC間は「線の右側を認識、交差点を認識」して進むプログラム...
CFE間のプログラムに移動するために大きく右に回り、そのあと...
#ref(2017b/Member/cyanomelana/Mission2/C.JPG,40%,C交差点...
sub BC()
{
SetSensorLight(S1);
int PB = 0;
while(PB<180)
{
if(SENSOR_1<30)
{
lrt;
PB++;
}
else if(SENSOR_1<40)
{
ternright;
PB = 0;
}
else if(SENSOR_1<45)
{
go;
PB = 0;
}
else if(SENSOR_1<50)
{
ternleft;
PB = 0;
}
else
{
llt;
PB = 0;
}
Wait(STEP);
}
Off(OUT_AC);
lrt; //大きく左に回る
Wait(600);
go; //少し進む
Wait(200);
PB = 0;
}
***CFE間のプログラミング [#b7e9a477]
CFE間は「線の左側を認識」して進むプログラムを使用している...
交差点認識も含めたプログラミングを使うと急カーブの地点で...
#ref(2017b/Member/cyanomelana/Mission2/CFE.JPG,40%,CFE間...
sub CFE()
{
SetSensorLight(S1);
long t0 = CurrentTick();
while(CurrentTick()-t0 <= 18000)//18秒間だけ「線の左...
{
if(SENSOR_1<30)
{
llt;
}
else if(SENSOR_1<40)
{
ternleft;
}
else if(SENSOR_1<45)
{
go;
}
else if(SENSOR_1<50)
{
ternright;
}
else
{
lrt;
}
Wait(STEP);
}
}
***ER間のプログラミング [#m739d409]
ER間は「線の左側を認識、交差点を認識」して進むプログラム...
テスト走行の段階では、RP間のプログラムに移動するためにR地...
#ref(2017b/Member/cyanomelana/Mission2/ER.JPG,40%,R交差点...
sub ER()
{
SetSensorLight(S1);
int PB = 0;
while(PB<180)
{
if(SENSOR_1<30)
{
llt;
PB++;
}
else if(SENSOR_1<40)
{
ternleft;
PB = 0;
}
else if(SENSOR_1<45)
{
go;
PB = 0;
}
else if(SENSOR_1<50)
{
ternright;
PB = 0;
}
else
{
lrt;
PB = 0;
}
Wait(STEP);
}
Off(OUT_AC);
Wait(1000);
llt;
Wait(800);
go;
Wait(400);
while(SENSOR_1>45)//センサーが黒に反応するまで右に回る
{
ternright;
}
PB = 0;
}
***RP間のプログラミング [#t20dad19]
RP間は「線の左側を認識、交差点を認識」して進むプログラミ...
紙コップを取るプログラミングに移る前に交差点を先に超える...
交差点を超えるために左に少し曲がったロボットの軌道を[tern...
sub RP()
{
SetSensorLight(S1);
int PB = 0;
while(PB<180)
{
if(SENSOR_1<30)
{
llt;
PB++;
}
else if(SENSOR_1<40)
{
ternleft;
PB = 0;
}
else if(SENSOR_1<45)
{
go;
PB = 0;
}
else if(SENSOR_1<50)
{
ternright;
PB = 0;
}
else
{
lrt;
PB = 0;
}
Wait(STEP);
}
ternright;//少し右に回る
Wait(300);
PB = 0;
}
***catch(紙コップを取るプログラム) [#i7fb0c0a]
紙コップを取るプログラムは単純で、その場で回転してアーム...
腕の幅を大きくしたことで紙コップはとても取りやすくなった。
sub catch()
{
lrt; //その場で約90度右に回転
Wait(1200);
Off(OUT_AC);
LD;
llt;
Wait(1200); //その場で約90度左に回転し、元の位置に戻る
Off(OUT_AC);
}
***PQ間のプログラム [#jcaca4f0]
PQ間は「線の左側を認識、交差点を認識」して進むプログラム...
QS間のプログラムに移るために左の車輪を後ろに回転した後、...
#ref(2017b/Member/cyanomelana/Mission2/Q2.JPG,80%,Q交差点...
sub PQ()
{
SetSensorLight(S1);
int PB = 0;
while(PB<180)
{
if(SENSOR_1<30)
{
llt;
PB++;
}
else if(SENSOR_1<40)
{
ternleft;
PB = 0;
}
else if(SENSOR_1<45)
{
go;
PB = 0;
}
else if(SENSOR_1<50)
{
ternright;
PB = 0;
}
else
{
lrt;
PB = 0;
}
Wait(STEP);
}
PB = 0;
OnRev(OUT_C,40);//左車輪を後ろに回す
Wait(600);
go; //黒の線を超えるように直進する
Wait(600);
while(SENSOR_1>45)//黒を認識するまで直進する
{
go;
}
}
***QS間のプログラミング [#j9ebd9ed]
QS間は「線の左側を認識、交差点を認識」して進むプログラム...
SSAのプログラムに移動するために、交差点に入った後、白を認...
sub QS()
{
SetSensorLight(S1);
int PB = 0;
while(PB<180)
{
if(SENSOR_1<30)
{
llt;
PB++;
}
else if(SENSOR_1<40)
{
ternleft;
PB = 0;
}
else if(SENSOR_1<45)
{
go;
PB = 0;
}
else if(SENSOR_1<50)
{
ternright;
PB = 0;
}
else
{
lrt;
PB = 0;
}
Wait(STEP);
}
Off(OUT_AC);
Wait(2000);
while(SENSOR_1<50)//白を認識するまで直進する
{
go;
}
}
***SSA間のプログラミング [#g07242bb]
SSAは「線の左側を認識、交差点を認識」して進むプログラムを...
sub SSA()
{
SetSensorLight(S1);
int PB = 0;
while(PB<180)
{
if(SENSOR_1<30)
{
llt;
PB++;
}
else if(SENSOR_1<40)
{
ternleft;
PB = 0;
}
else if(SENSOR_1<45)
{
go;
PB = 0;
}
else if(SENSOR_1<50)
{
ternright;
PB = 0;
}
else
{
lrt;
PB = 0;
}
Wait(STEP);
}
Off(OUT_AC);
PB = 0;
}
***release(紙コップを放すプログラミング) [#l32c1ca1]
紙コップを放した後、元のコースに戻るときにロボットが紙コ...
プログラムはS交差点から、大きく左に回り、少し直進した後、...
#ref(2017b/Member/cyanomelana/Mission2/S.JPG,50%,センサー...
sub release()
{
llt;
Wait(1500);
go;
Wait(900);
Off(OUT_AC);
LU;
while(SENSOR_1>45)
{
OnRev(OUT_A,40);
}
}
***SSB間のプログラミング [#k56443db]
SSB間は「線の左側を認識、交差点を認識」して進むプログラム...
紙コップを放した後、再びS交差点に向かう必要があったので新...
SFのプログラムに移動するために、左に少し曲がったロボット...
sub SSB()
{
SetSensorLight(S1);
int PB = 0;
while(PB<180)
{
if(SENSOR_1<30)
{
llt;
PB++;
}
else if(SENSOR_1<40)
{
ternleft;
PB = 0;
}
else if(SENSOR_1<45)
{
go;
PB = 0;
}
else if(SENSOR_1<50)
{
ternright;
PB = 0;
}
else
{
lrt;
PB = 0;
}
Wait(STEP);
}
Off(OUT_AC);
Wait(1500);
ternright;//少し右に回る
Wait(300);
PB = 0;
}
***SF間のプログラミング [#s3967edd]
SF間は「線の左側を認識、交差点を認識」して進むプログラム...
FC間のプログラムに移動するためにF交差点認識後、[ternright...
#ref(2017b/Member/cyanomelana/Mission2/F.JPG,70%,F交差点...
sub SF()
{
SetSensorLight(S1);
int PB = 0;
while(PB<180)
{
if(SENSOR_1<30)
{
llt;
PB++;
}
else if(SENSOR_1<40)
{
ternleft;
PB = 0;
}
else if(SENSOR_1<45)
{
go;
PB = 0;
}
else if(SENSOR_1<50)
{
ternright;
PB = 0;
}
else
{
lrt;
PB = 0;
}
Wait(STEP);
}
Off(OUT_AC);
Wait(1500);
ternleft;//左に回り線の右側へ
Wait(200);
PB = 0;
}
***FC間のプログラミング [#y75a4e09]
FC間は「線の右側を認識、交差点を認識」して進むプログラム...
Cの交差点を認識した後、Dのゴール枠に入る角度になるように...
sub FC()
{
SetSensorLight(S1);
int PB = 0;
while(PB<180)
{
if(SENSOR_1<30)
{
lrt;
PB++;
}
else if(SENSOR_1<40)
{
ternright;
PB = 0;
}
else if(SENSOR_1<45)
{
go;
PB = 0;
}
else if(SENSOR_1<50)
{
ternleft;
PB = 0;
}
else
{
llt;
PB = 0;
}
Wait(STEP);
}
Off(OUT_AC);
Wait(2000);
lrt; //右に大きく回る
Wait(1000);
PB = 0;
}
***CD間のプログラミング [#p79e2430]
CD間のプログラムは直進するだけである。
sub CD()
{
go;
Wait(2000);
Off(OUT_AC);
}
**完成したプログラム [#naaf950f]
task main()
{
AB();
BC();
CFE();
ER();
RP();
catch();
PQ();
QS();
SSA();
release();
SSB();
SF();
FC();
CD();
}
*感想・反省点 [#lb541596]
**感想 [#df956cf0]
今回使ったプログラムではif,currenttickなど新しく出てくる...
課題1より難易度は大きく上がったと思った。~
自分のレポートを書く量がおおすぎて驚いた。
全体をとおしてロボットがうまく動いたときは何にも代えがた...
**反省点 [#x1d35db5]
線をセンサーが感知するとき、紙のたわみによってセンサーが...
今回の課題では腕の上げ下げは一回ずつだったので影響はなか...
コップを放す位置がずれて指定された範囲から少しはみ出てし...
終了行:
#contents
*課題2 [#bbc41df2]
あらかじめ指定されたコースの線に沿って動くロボットを作る。
#ref(2017b/Member/cyanomelana/Mission2/ロボットコース.JPG...
***交差点を通る順番(上の写真も参考) [#h3a66d2d]
1.Aをスタート
2.Bを直進
3.Cを右折
4.Fを直進
5.Rを左折(一時停止)
6.Pを直進
7.X地点の紙コップを取得してコースに戻る
8.Qを左折
9.Sを直進(一時停止)
10.Y地点に紙コップを置いてコースに戻る
11.Sを直進(一時停止)
12.Fを左折(一時停止)
13.Cを右折(一時停止)
14.D地点へ(ゴール)
*作成したロボット [#v746d730]
作成したロボットはロボットの組み立て方が載っている本のマ...
#ref(2017b/Member/cyanomelana/Mission2/IMG_6411.JPG,55%,...
#ref(2017b/Member/cyanomelana/Mission2/IMG_6396.JPG,55%,...
**ロボットの詳細 [#p642f532]
***センサーの取り付け位置 [#vc70d357]
明るさを読み取るセンサーをロボットに取り付ける工夫として...
#ref(2017b/Member/cyanomelana/Mission2/IMG_6407.1.jpg,100...
#ref(2017b/Member/cyanomelana/Mission2/sensor111.JPG,90%,...
また、センサーの位置をできるだけ前輪の車軸の近くにするこ...
#ref(2017b/Member/cyanomelana/Mission2/ロボットセンサー.J...
#ref(2017b/Member/cyanomelana/Mission2/sennsa.JPG,55%,ロ...
***紙コップをとる機構 [#e8250dca]
紙コップをとる機構を作るうえでの工夫として、必ず紙コップ...
#ref(2017b/Member/cyanomelana/Mission2/ude.JPG,45%,紙コッ...
*作成したプログラミング [#dc13cb4b]
プログラミングを作るうえでは「線の左を認識」「線の左を認...
**基本的な動作のプログラミング [#de62d4e8]
***ライントレースする仕組み [#t436f16b]
幅が2cmの黒い線に光センサーをそれぞれの場所に当てた時に...
この光センサーが示した値をもとに「if」を用いてプログラム...
下の(「線の左側を認識」して進むプログラミング)を参照 ~
#ref(2017b/Member/cyanomelana/Mission2/www.JPG,45%,光セン...
***交差点を認識する仕組み [#id50299a]
交差点を曲がる、もしくは通過するとき、センサーは必ず濃い...
この濃い黒を連続で通過する時間がある一定時間以上あるとき...
#ref(2017b/Member/cyanomelana/Mission2/K.JPG,40%,交差点認...
**主に使用するプログラミング [#g9f1eef7]
まずdefineで次の内容を定義する。
#define llt OnFwd(OUT_A,30); OnRev(OUT_C,30);//大きく左...
#define lrt OnRev(OUT_A,30); OnFwd(OUT_C,30);//大きく右...
#define ternleft OnFwd(OUT_A,50); OnFwd(OUT_C,5);//左に...
#define ternright OnFwd(OUT_A,5); OnFwd(OUT_C,50);//右...
#define go OnFwd(OUT_A,30); OnFwd(OUT_C,30);//直進する
#define LD OnFwd(OUT_B,30); Wait(400); Off(OUT_B);//コッ...
#define LU OnRev(OUT_B,30); Wait(400); Off(OUT_B);//コッ...
#define STEP 1;//whileの中のプログラミングを1/1000秒ご...
*「PB」の値は線の中央の濃い黒を連続で認識できる時間であ...
例えば「PB<180」の場合濃い黒を連続で180/1000秒間以上認識...
*「PB=0」はセンサーが濃い黒以外を認識した場合PBの値を...
***「線の左側を認識」して進むプログラミング [#u8892227]
task main ()
{
SetSensorLight(S1);
while(true)
{
if(SENSOR_1<30)//線の中央の濃い黒を認識したときは大き...
{
llt;
}
else if(SENSOR_1<40)//線の中央でない薄い黒を認識した...
{
ternleft;
}
else if(SENSOR_1<45)//線と白の部分のちょうど境界線を...
{
go;
}
else if(SENSOR_1<50)//真っ白ではないが白の部分を認識...
{
ternright;
}
else //真っ白の部分を認識したとき大きく...
{
lrt;
}
Wait(STEP);
}
}
***「線の右側を認識、交差点を認識」して進むプログラミング...
task main ()
{
SetSensorLight(S1);
int PB = 0;
while(PB<180) //センサーが30以下の値を連続180/1000...
{
if(SENSOR_1<30) //線の中央の濃い黒を認識したとき...
{
lrt;
PB++;
}
else if(SENSOR_1<40)//線の中央でない薄い黒を認識した...
{
ternright;
PB = 0;
}
else if(SENSOR_1<45)//線と白の部分のちょうど境界線を...
{
go;
PB = 0;
}
else if(SENSOR_1<50)//真っ白ではないが白の部分を認識...
{
ternleft;
PB = 0;
}
else //真っ白の部分を認識したとき大きく左に回る
{
llt;
PB = 0;
}
Wait(STEP);
}
Off(OUT_AC);
PB = 0;
}
***「線の左側を認識、交差点を認識」して進むプログラミング...
task main ()
{
SetSensorLight(S1);
int PB = 0;
while(PB<180)//センサーが30以下の値を連続180/1000秒以...
{
if(SENSOR_1<30)//線の中央の濃い黒を認識したときは大き...
{
llt;
PB++;
}
else if(SENSOR_1<40)//線の中央でない薄い黒を認識した...
{
ternleft;
PB = 0;
}
else if(SENSOR_1<45)//線と白の部分のちょうど境界線を...
{
go;
PB = 0;
}
else if(SENSOR_1<50)//真っ白ではないが白の部分を認識...
{
ternright;
PB = 0;
}
else //真っ白の部分を認識したとき大きく右...
{
lrt;
PB = 0;
}
Wait(STEP);
}
Off(OUT_AC);
PB = 0;
}
**プログラミングの全体 [#a6ec0c7b]
全体のプログラミングは「主に使用するプログラミング」で説...
*プログラミングの説明の図では赤い矢印はロボットが前進し...
***プログラミングの分け方 [#y4065fda]
1.AB
2.BC
3.CFE
4.ER
5.RP
6.catch(紙コップを取る)
7.PQ
8.QS
9.SSA
10.release(紙コップを放す)
11.SSB
12.SF
13. FC
14. CD
***AB間のプログラミング [#a1a3f4c0]
AB間は「線の右側を認識、交差点を認識」して進むプログラム...
BC間のプログラムに移動するために右に少し曲がったロボット...
sub AB()
{
SetSensorLight(S1);
int PB = 0;
while(PB<180)
{
if(SENSOR_1<30)
{
lrt;
PB++;
}
else if(SENSOR_1<40)
{
ternright;
PB = 0;
}
else if(SENSOR_1<45)
{
go;
PB = 0;
}
else if(SENSOR_1<50)
{
ternleft;
PB = 0;
}
else
{
llt;
PB = 0;
}
Wait(STEP);
}
ternleft;//少し左に曲がる
Wait(200);
PB = 0;
}
***BC間のプログラミング [#u21d51ae]
BC間は「線の右側を認識、交差点を認識」して進むプログラム...
CFE間のプログラムに移動するために大きく右に回り、そのあと...
#ref(2017b/Member/cyanomelana/Mission2/C.JPG,40%,C交差点...
sub BC()
{
SetSensorLight(S1);
int PB = 0;
while(PB<180)
{
if(SENSOR_1<30)
{
lrt;
PB++;
}
else if(SENSOR_1<40)
{
ternright;
PB = 0;
}
else if(SENSOR_1<45)
{
go;
PB = 0;
}
else if(SENSOR_1<50)
{
ternleft;
PB = 0;
}
else
{
llt;
PB = 0;
}
Wait(STEP);
}
Off(OUT_AC);
lrt; //大きく左に回る
Wait(600);
go; //少し進む
Wait(200);
PB = 0;
}
***CFE間のプログラミング [#b7e9a477]
CFE間は「線の左側を認識」して進むプログラムを使用している...
交差点認識も含めたプログラミングを使うと急カーブの地点で...
#ref(2017b/Member/cyanomelana/Mission2/CFE.JPG,40%,CFE間...
sub CFE()
{
SetSensorLight(S1);
long t0 = CurrentTick();
while(CurrentTick()-t0 <= 18000)//18秒間だけ「線の左...
{
if(SENSOR_1<30)
{
llt;
}
else if(SENSOR_1<40)
{
ternleft;
}
else if(SENSOR_1<45)
{
go;
}
else if(SENSOR_1<50)
{
ternright;
}
else
{
lrt;
}
Wait(STEP);
}
}
***ER間のプログラミング [#m739d409]
ER間は「線の左側を認識、交差点を認識」して進むプログラム...
テスト走行の段階では、RP間のプログラムに移動するためにR地...
#ref(2017b/Member/cyanomelana/Mission2/ER.JPG,40%,R交差点...
sub ER()
{
SetSensorLight(S1);
int PB = 0;
while(PB<180)
{
if(SENSOR_1<30)
{
llt;
PB++;
}
else if(SENSOR_1<40)
{
ternleft;
PB = 0;
}
else if(SENSOR_1<45)
{
go;
PB = 0;
}
else if(SENSOR_1<50)
{
ternright;
PB = 0;
}
else
{
lrt;
PB = 0;
}
Wait(STEP);
}
Off(OUT_AC);
Wait(1000);
llt;
Wait(800);
go;
Wait(400);
while(SENSOR_1>45)//センサーが黒に反応するまで右に回る
{
ternright;
}
PB = 0;
}
***RP間のプログラミング [#t20dad19]
RP間は「線の左側を認識、交差点を認識」して進むプログラミ...
紙コップを取るプログラミングに移る前に交差点を先に超える...
交差点を超えるために左に少し曲がったロボットの軌道を[tern...
sub RP()
{
SetSensorLight(S1);
int PB = 0;
while(PB<180)
{
if(SENSOR_1<30)
{
llt;
PB++;
}
else if(SENSOR_1<40)
{
ternleft;
PB = 0;
}
else if(SENSOR_1<45)
{
go;
PB = 0;
}
else if(SENSOR_1<50)
{
ternright;
PB = 0;
}
else
{
lrt;
PB = 0;
}
Wait(STEP);
}
ternright;//少し右に回る
Wait(300);
PB = 0;
}
***catch(紙コップを取るプログラム) [#i7fb0c0a]
紙コップを取るプログラムは単純で、その場で回転してアーム...
腕の幅を大きくしたことで紙コップはとても取りやすくなった。
sub catch()
{
lrt; //その場で約90度右に回転
Wait(1200);
Off(OUT_AC);
LD;
llt;
Wait(1200); //その場で約90度左に回転し、元の位置に戻る
Off(OUT_AC);
}
***PQ間のプログラム [#jcaca4f0]
PQ間は「線の左側を認識、交差点を認識」して進むプログラム...
QS間のプログラムに移るために左の車輪を後ろに回転した後、...
#ref(2017b/Member/cyanomelana/Mission2/Q2.JPG,80%,Q交差点...
sub PQ()
{
SetSensorLight(S1);
int PB = 0;
while(PB<180)
{
if(SENSOR_1<30)
{
llt;
PB++;
}
else if(SENSOR_1<40)
{
ternleft;
PB = 0;
}
else if(SENSOR_1<45)
{
go;
PB = 0;
}
else if(SENSOR_1<50)
{
ternright;
PB = 0;
}
else
{
lrt;
PB = 0;
}
Wait(STEP);
}
PB = 0;
OnRev(OUT_C,40);//左車輪を後ろに回す
Wait(600);
go; //黒の線を超えるように直進する
Wait(600);
while(SENSOR_1>45)//黒を認識するまで直進する
{
go;
}
}
***QS間のプログラミング [#j9ebd9ed]
QS間は「線の左側を認識、交差点を認識」して進むプログラム...
SSAのプログラムに移動するために、交差点に入った後、白を認...
sub QS()
{
SetSensorLight(S1);
int PB = 0;
while(PB<180)
{
if(SENSOR_1<30)
{
llt;
PB++;
}
else if(SENSOR_1<40)
{
ternleft;
PB = 0;
}
else if(SENSOR_1<45)
{
go;
PB = 0;
}
else if(SENSOR_1<50)
{
ternright;
PB = 0;
}
else
{
lrt;
PB = 0;
}
Wait(STEP);
}
Off(OUT_AC);
Wait(2000);
while(SENSOR_1<50)//白を認識するまで直進する
{
go;
}
}
***SSA間のプログラミング [#g07242bb]
SSAは「線の左側を認識、交差点を認識」して進むプログラムを...
sub SSA()
{
SetSensorLight(S1);
int PB = 0;
while(PB<180)
{
if(SENSOR_1<30)
{
llt;
PB++;
}
else if(SENSOR_1<40)
{
ternleft;
PB = 0;
}
else if(SENSOR_1<45)
{
go;
PB = 0;
}
else if(SENSOR_1<50)
{
ternright;
PB = 0;
}
else
{
lrt;
PB = 0;
}
Wait(STEP);
}
Off(OUT_AC);
PB = 0;
}
***release(紙コップを放すプログラミング) [#l32c1ca1]
紙コップを放した後、元のコースに戻るときにロボットが紙コ...
プログラムはS交差点から、大きく左に回り、少し直進した後、...
#ref(2017b/Member/cyanomelana/Mission2/S.JPG,50%,センサー...
sub release()
{
llt;
Wait(1500);
go;
Wait(900);
Off(OUT_AC);
LU;
while(SENSOR_1>45)
{
OnRev(OUT_A,40);
}
}
***SSB間のプログラミング [#k56443db]
SSB間は「線の左側を認識、交差点を認識」して進むプログラム...
紙コップを放した後、再びS交差点に向かう必要があったので新...
SFのプログラムに移動するために、左に少し曲がったロボット...
sub SSB()
{
SetSensorLight(S1);
int PB = 0;
while(PB<180)
{
if(SENSOR_1<30)
{
llt;
PB++;
}
else if(SENSOR_1<40)
{
ternleft;
PB = 0;
}
else if(SENSOR_1<45)
{
go;
PB = 0;
}
else if(SENSOR_1<50)
{
ternright;
PB = 0;
}
else
{
lrt;
PB = 0;
}
Wait(STEP);
}
Off(OUT_AC);
Wait(1500);
ternright;//少し右に回る
Wait(300);
PB = 0;
}
***SF間のプログラミング [#s3967edd]
SF間は「線の左側を認識、交差点を認識」して進むプログラム...
FC間のプログラムに移動するためにF交差点認識後、[ternright...
#ref(2017b/Member/cyanomelana/Mission2/F.JPG,70%,F交差点...
sub SF()
{
SetSensorLight(S1);
int PB = 0;
while(PB<180)
{
if(SENSOR_1<30)
{
llt;
PB++;
}
else if(SENSOR_1<40)
{
ternleft;
PB = 0;
}
else if(SENSOR_1<45)
{
go;
PB = 0;
}
else if(SENSOR_1<50)
{
ternright;
PB = 0;
}
else
{
lrt;
PB = 0;
}
Wait(STEP);
}
Off(OUT_AC);
Wait(1500);
ternleft;//左に回り線の右側へ
Wait(200);
PB = 0;
}
***FC間のプログラミング [#y75a4e09]
FC間は「線の右側を認識、交差点を認識」して進むプログラム...
Cの交差点を認識した後、Dのゴール枠に入る角度になるように...
sub FC()
{
SetSensorLight(S1);
int PB = 0;
while(PB<180)
{
if(SENSOR_1<30)
{
lrt;
PB++;
}
else if(SENSOR_1<40)
{
ternright;
PB = 0;
}
else if(SENSOR_1<45)
{
go;
PB = 0;
}
else if(SENSOR_1<50)
{
ternleft;
PB = 0;
}
else
{
llt;
PB = 0;
}
Wait(STEP);
}
Off(OUT_AC);
Wait(2000);
lrt; //右に大きく回る
Wait(1000);
PB = 0;
}
***CD間のプログラミング [#p79e2430]
CD間のプログラムは直進するだけである。
sub CD()
{
go;
Wait(2000);
Off(OUT_AC);
}
**完成したプログラム [#naaf950f]
task main()
{
AB();
BC();
CFE();
ER();
RP();
catch();
PQ();
QS();
SSA();
release();
SSB();
SF();
FC();
CD();
}
*感想・反省点 [#lb541596]
**感想 [#df956cf0]
今回使ったプログラムではif,currenttickなど新しく出てくる...
課題1より難易度は大きく上がったと思った。~
自分のレポートを書く量がおおすぎて驚いた。
全体をとおしてロボットがうまく動いたときは何にも代えがた...
**反省点 [#x1d35db5]
線をセンサーが感知するとき、紙のたわみによってセンサーが...
今回の課題では腕の上げ下げは一回ずつだったので影響はなか...
コップを放す位置がずれて指定された範囲から少しはみ出てし...
ページ名: