2018b/Member/yamada/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
目次
#contents
*課題2 [#gc83284e]
下の図のようなコースを各チームで作成し、「ミッション」を...
自分はコース1を選択した。
#ref(2018b-mission2.png)
*ロボットについて [#o99e9921]
ロボットの写真
#ref(zentaizu2.JPG)
前方から撮影したセンサー部分の写真
#ref(sensor.jpeg)
**ロボット本体への工夫 [#oac0b510]
カラーセンサーを設計図よりタイヤに近づけるためにできるだ...
それによって急なカーブをより良い精度で通過できるようにな...
**センサー部分への工夫 [#vab13230]
前述の通り設計図と比べてタイヤの近くに配置することで急な...
**ボールを保持するための部分の説明 [#m5d5a43a]
3つ目のモーターで上下できる柵を取り付けた。
ボールをシュートした後も柵を完全に上げきることでちょうどN...
**ボールをシュートする方法 [#f7193112]
缶の方向を向いた後に柵を上げ前進することでボールに体当た...
**改善点 [#q1c201c4]
シュートする部分に関して、他のグループが作っていたように...
*プログラムについて [#j8cc8344]
プログラム中の説明は次のコース攻略に詳しい説明を書きまし...
**実際のプログラム [#tae93a47]
#define THRESHOLD 54 //しきい値
#define SPEED 30
#define speed 20
#define OnRL(speedR,speedL) OnFwd(OUT_B,speedR);OnFwd(OUT...
#define LEFT OnRL(speed,-speed); //左旋回
#define left OnRL(speed,0); //左折
#define straight OnRL(SPEED,SPEED); //直進
#define right OnRL(0,speed); //右折
#define RIGHT OnRL(-speed,speed); //右旋回
#define STEP 1
#define nMAX 300
#define short_break Off(OUT_BC);Wait(1000); //小休止
#define CROSS_TIME 700
#define cross_line OnFwd(OUT_BC,speed);Wait(CROSS_TIME);s...
#define turn_time 3000
#define turn_left LEFT;Wait(turn_time);short_break;
#define turn_right RIGHT;Wait(turn_time);short_break;
#define kaiten OnRL(SPEED,-SPEED);
#define kaiten_time 5500 //360°回転するのにかか...
#define arm_up OnRev(OUT_A,SPEED);Wait(500);Off(OUT_A); ...
sub kousaten_trace() //交差点を判断して一...
{
SetSensorLight(S3);
int nOnline=0;
while (nOnline < nMAX) { //黒...
if (SENSOR_3 < THRESHOLD-10) {
RIGHT;
nOnline++;}
else {
if (SENSOR_3 < THRESHOLD-3) {right;}
else if (SENSOR_3 < THRESHOLD+2) {straight;}
else if (SENSOR_3 < THRESHOLD+6) {left;}
else {LEFT;}
nOnline=0;}
Wait(STEP);
}
short_break;
LEFT;
Wait(nMAX*STEP);
cross_line;
nOnline=0;
}
sub kousaten_usetsu() //交差点を判断して一時...
{
SetSensorLight(S3);
int nOnline=0;
while (nOnline < nMAX) { //黒を認識...
if (SENSOR_3 < THRESHOLD-8) {
LEFT;
nOnline++;}
else {
if (SENSOR_3 < THRESHOLD-3) {left;}
else if (SENSOR_3 < THRESHOLD+2) {straight;}
else if (SENSOR_3 < THRESHOLD+6) {right;}
else {RIGHT;}
nOnline=0;}
Wait(STEP);
}
short_break;
RIGHT;
Wait(nMAX*STEP);
turn_right;
nOnline=0;
}
sub kousaten_teishi() //交差点を判...
{
SetSensorLight(S3);
int nOnline=0;
while (nOnline < nMAX) {
if (SENSOR_3 < THRESHOLD-8) {
LEFT;
nOnline++;}
else {
if (SENSOR_3 < THRESHOLD-3) {left;}
else if (SENSOR_3 < THRESHOLD+2) {straight;}
else if (SENSOR_3 < THRESHOLD+6) {right;}
else {RIGHT;}
nOnline=0;}
Wait(STEP);
}
short_break;
nOnline=0;
}
sub serch_kan() 360°回転して障害物(缶)...
{
SetSensorLowspeed(S4);
long t10,t11;
int L=10000; //仮の最小値
t10=CurrentTick(); //回転前の時刻
while(CurrentTick()-t10<=kaiten_time){
OnRL(speed,-speed);
if(SensorUS(S4)<L)
{
L=SensorUS(S4);
t11=CurrentTick()-t10; //仮の最小値より近いもの...
}
}
OnRL(-speed,speed);
Wait(kaiten_time-t11);
Off(OUT_BC);
}
sub shoot() //シュート(体当たり)をする
{
arm_up;
OnFwd(OUT_BC,100);
Wait(200);
Off(OUT_BC);
}
task main()
{
SetSensorLight(S3);
SetSensorLowspeed(S4);
long t0,t1,t2,t3; //それぞれの時間を定義
t0=CurrentTick(); //スタートした時間をt0とする
while(CurrentTick()-t0<=15000){ //15秒間ライ...
if(SENSOR_3<THRESHOLD-8){RIGHT;}
else if(SENSOR_3<THRESHOLD-3){right;}
else if(SENSOR_3<THRESHOLD+2){straight;}
else if(SENSOR_3<THRESHOLD+6){left;}
else{LEFT;}
Wait(STEP);
}
kousaten_trace(); //交差点Kを発見したら横断 ...
t1=CurrentTick(); //K地点を横断したらその時間をt...
while(CurrentTick()-t1<=15000){ //15秒間ライ...
if(SENSOR_3<THRESHOLD-8){RIGHT;}
else if(SENSOR_3<THRESHOLD-3){right;}
else if(SENSOR_3<THRESHOLD+2){straight;}
else if(SENSOR_3<THRESHOLD+6){left;}
else{LEFT;}
Wait(STEP);
}
serch_kan(); //缶を探す。見つけたらボールに体当...
shoot(); //?からここまでが攻略?
t2=CurrentTick();
while(CurrentTick()-t2<=18000){
if(SENSOR_3<THRESHOLD-8){LEFT;}
else if(SENSOR_3<THRESHOLD-3){left;}
else if(SENSOR_3<THRESHOLD+2){straight;}
else if(SENSOR_3<THRESHOLD+6){right;}
else{RIGHT;}
Wait(STEP);
}
kousaten_teishi(); //交差点Gを発見したら一時停止 ...
t3=CurrentTick(); //地点Gを出発する時間をt3とする
while(CurrentTick()-t3<=40000){ //40秒間ライ...
if(SENSOR_3<THRESHOLD-8){LEFT;}
else if(SENSOR_3<THRESHOLD-3){left;}
else if(SENSOR_3<THRESHOLD+2){straight;}
else if(SENSOR_3<THRESHOLD+6){right;}
else{RIGHT;}
Wait(STEP);
}
kousaten_usetsu(); //交差点Eを発見したら右折 ...
kousaten_trace(); //交差点Lを発見したら横断
OnFwd(OUT_BC,SPEED); 前進して枠内に入る
Wait(2000);
Off(OUT_BC);
} //?からここまでが攻略?
**ライントレースのプログラムについて [#je912043]
交差点判断をしないライントレースについては白から黒の色の...
交差点判断をするときは上記の通りのライントレースの中で300...
**プログラムの説明と反省 [#y27f08f7]
基本的にはタイマーで時間を計りながら交差点判断をするかし...
時間ではなく、タイヤの回転角などで距離を測りながら進むと...
*実際のコース攻略 [#udea7385]
**計画 [#q9faae0e]
計画図
#ref(keikaku.jpeg)
?A地点をスタートし、ラインの右側をトレースする。スタート...
?円HIJKの内部を18秒間トレースする。大体15秒程度でI地点を...
?ボールをシュートした後通常通りのトレースをする。G地点で...
?G地点を曲がりだすところからスタート。40秒間で通常のF地点...
?ライン通りに直進し、交差点(L地点)を横断した後2秒間前進し...
**失敗例 [#w1b2a956]
?‐シュート前
18秒間でI地点を超えられず、本来G地点で行うはずの一時停止...
?‐シュート時
18秒間でH地点近くまで来てしまいシュート時の前進で円HIJKの...
?‐最後、?‐最初
G地点を曲がり切れずに直進してしまう。(停止した後一度後退...
?‐急なカーブ
稀に曲がり切れずにコースアウトしてしまう(しきい値を計測し...
?-F地点
40秒間でたどり着けないとここで交差点判断をしてコースアウ...
?-E地点
40秒間以内に辿り着いてしまうと交差点判断をすることができ...
*全体を通して [#q23ba7ce]
前回のプログラムに比べればコンパクトで綺麗なプログラムに...
終了行:
目次
#contents
*課題2 [#gc83284e]
下の図のようなコースを各チームで作成し、「ミッション」を...
自分はコース1を選択した。
#ref(2018b-mission2.png)
*ロボットについて [#o99e9921]
ロボットの写真
#ref(zentaizu2.JPG)
前方から撮影したセンサー部分の写真
#ref(sensor.jpeg)
**ロボット本体への工夫 [#oac0b510]
カラーセンサーを設計図よりタイヤに近づけるためにできるだ...
それによって急なカーブをより良い精度で通過できるようにな...
**センサー部分への工夫 [#vab13230]
前述の通り設計図と比べてタイヤの近くに配置することで急な...
**ボールを保持するための部分の説明 [#m5d5a43a]
3つ目のモーターで上下できる柵を取り付けた。
ボールをシュートした後も柵を完全に上げきることでちょうどN...
**ボールをシュートする方法 [#f7193112]
缶の方向を向いた後に柵を上げ前進することでボールに体当た...
**改善点 [#q1c201c4]
シュートする部分に関して、他のグループが作っていたように...
*プログラムについて [#j8cc8344]
プログラム中の説明は次のコース攻略に詳しい説明を書きまし...
**実際のプログラム [#tae93a47]
#define THRESHOLD 54 //しきい値
#define SPEED 30
#define speed 20
#define OnRL(speedR,speedL) OnFwd(OUT_B,speedR);OnFwd(OUT...
#define LEFT OnRL(speed,-speed); //左旋回
#define left OnRL(speed,0); //左折
#define straight OnRL(SPEED,SPEED); //直進
#define right OnRL(0,speed); //右折
#define RIGHT OnRL(-speed,speed); //右旋回
#define STEP 1
#define nMAX 300
#define short_break Off(OUT_BC);Wait(1000); //小休止
#define CROSS_TIME 700
#define cross_line OnFwd(OUT_BC,speed);Wait(CROSS_TIME);s...
#define turn_time 3000
#define turn_left LEFT;Wait(turn_time);short_break;
#define turn_right RIGHT;Wait(turn_time);short_break;
#define kaiten OnRL(SPEED,-SPEED);
#define kaiten_time 5500 //360°回転するのにかか...
#define arm_up OnRev(OUT_A,SPEED);Wait(500);Off(OUT_A); ...
sub kousaten_trace() //交差点を判断して一...
{
SetSensorLight(S3);
int nOnline=0;
while (nOnline < nMAX) { //黒...
if (SENSOR_3 < THRESHOLD-10) {
RIGHT;
nOnline++;}
else {
if (SENSOR_3 < THRESHOLD-3) {right;}
else if (SENSOR_3 < THRESHOLD+2) {straight;}
else if (SENSOR_3 < THRESHOLD+6) {left;}
else {LEFT;}
nOnline=0;}
Wait(STEP);
}
short_break;
LEFT;
Wait(nMAX*STEP);
cross_line;
nOnline=0;
}
sub kousaten_usetsu() //交差点を判断して一時...
{
SetSensorLight(S3);
int nOnline=0;
while (nOnline < nMAX) { //黒を認識...
if (SENSOR_3 < THRESHOLD-8) {
LEFT;
nOnline++;}
else {
if (SENSOR_3 < THRESHOLD-3) {left;}
else if (SENSOR_3 < THRESHOLD+2) {straight;}
else if (SENSOR_3 < THRESHOLD+6) {right;}
else {RIGHT;}
nOnline=0;}
Wait(STEP);
}
short_break;
RIGHT;
Wait(nMAX*STEP);
turn_right;
nOnline=0;
}
sub kousaten_teishi() //交差点を判...
{
SetSensorLight(S3);
int nOnline=0;
while (nOnline < nMAX) {
if (SENSOR_3 < THRESHOLD-8) {
LEFT;
nOnline++;}
else {
if (SENSOR_3 < THRESHOLD-3) {left;}
else if (SENSOR_3 < THRESHOLD+2) {straight;}
else if (SENSOR_3 < THRESHOLD+6) {right;}
else {RIGHT;}
nOnline=0;}
Wait(STEP);
}
short_break;
nOnline=0;
}
sub serch_kan() 360°回転して障害物(缶)...
{
SetSensorLowspeed(S4);
long t10,t11;
int L=10000; //仮の最小値
t10=CurrentTick(); //回転前の時刻
while(CurrentTick()-t10<=kaiten_time){
OnRL(speed,-speed);
if(SensorUS(S4)<L)
{
L=SensorUS(S4);
t11=CurrentTick()-t10; //仮の最小値より近いもの...
}
}
OnRL(-speed,speed);
Wait(kaiten_time-t11);
Off(OUT_BC);
}
sub shoot() //シュート(体当たり)をする
{
arm_up;
OnFwd(OUT_BC,100);
Wait(200);
Off(OUT_BC);
}
task main()
{
SetSensorLight(S3);
SetSensorLowspeed(S4);
long t0,t1,t2,t3; //それぞれの時間を定義
t0=CurrentTick(); //スタートした時間をt0とする
while(CurrentTick()-t0<=15000){ //15秒間ライ...
if(SENSOR_3<THRESHOLD-8){RIGHT;}
else if(SENSOR_3<THRESHOLD-3){right;}
else if(SENSOR_3<THRESHOLD+2){straight;}
else if(SENSOR_3<THRESHOLD+6){left;}
else{LEFT;}
Wait(STEP);
}
kousaten_trace(); //交差点Kを発見したら横断 ...
t1=CurrentTick(); //K地点を横断したらその時間をt...
while(CurrentTick()-t1<=15000){ //15秒間ライ...
if(SENSOR_3<THRESHOLD-8){RIGHT;}
else if(SENSOR_3<THRESHOLD-3){right;}
else if(SENSOR_3<THRESHOLD+2){straight;}
else if(SENSOR_3<THRESHOLD+6){left;}
else{LEFT;}
Wait(STEP);
}
serch_kan(); //缶を探す。見つけたらボールに体当...
shoot(); //?からここまでが攻略?
t2=CurrentTick();
while(CurrentTick()-t2<=18000){
if(SENSOR_3<THRESHOLD-8){LEFT;}
else if(SENSOR_3<THRESHOLD-3){left;}
else if(SENSOR_3<THRESHOLD+2){straight;}
else if(SENSOR_3<THRESHOLD+6){right;}
else{RIGHT;}
Wait(STEP);
}
kousaten_teishi(); //交差点Gを発見したら一時停止 ...
t3=CurrentTick(); //地点Gを出発する時間をt3とする
while(CurrentTick()-t3<=40000){ //40秒間ライ...
if(SENSOR_3<THRESHOLD-8){LEFT;}
else if(SENSOR_3<THRESHOLD-3){left;}
else if(SENSOR_3<THRESHOLD+2){straight;}
else if(SENSOR_3<THRESHOLD+6){right;}
else{RIGHT;}
Wait(STEP);
}
kousaten_usetsu(); //交差点Eを発見したら右折 ...
kousaten_trace(); //交差点Lを発見したら横断
OnFwd(OUT_BC,SPEED); 前進して枠内に入る
Wait(2000);
Off(OUT_BC);
} //?からここまでが攻略?
**ライントレースのプログラムについて [#je912043]
交差点判断をしないライントレースについては白から黒の色の...
交差点判断をするときは上記の通りのライントレースの中で300...
**プログラムの説明と反省 [#y27f08f7]
基本的にはタイマーで時間を計りながら交差点判断をするかし...
時間ではなく、タイヤの回転角などで距離を測りながら進むと...
*実際のコース攻略 [#udea7385]
**計画 [#q9faae0e]
計画図
#ref(keikaku.jpeg)
?A地点をスタートし、ラインの右側をトレースする。スタート...
?円HIJKの内部を18秒間トレースする。大体15秒程度でI地点を...
?ボールをシュートした後通常通りのトレースをする。G地点で...
?G地点を曲がりだすところからスタート。40秒間で通常のF地点...
?ライン通りに直進し、交差点(L地点)を横断した後2秒間前進し...
**失敗例 [#w1b2a956]
?‐シュート前
18秒間でI地点を超えられず、本来G地点で行うはずの一時停止...
?‐シュート時
18秒間でH地点近くまで来てしまいシュート時の前進で円HIJKの...
?‐最後、?‐最初
G地点を曲がり切れずに直進してしまう。(停止した後一度後退...
?‐急なカーブ
稀に曲がり切れずにコースアウトしてしまう(しきい値を計測し...
?-F地点
40秒間でたどり着けないとここで交差点判断をしてコースアウ...
?-E地点
40秒間以内に辿り着いてしまうと交差点判断をすることができ...
*全体を通して [#q23ba7ce]
前回のプログラムに比べればコンパクトで綺麗なプログラムに...
ページ名: