2015a/Member/iwana/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
#contents
* ロボットの説明 [#h4441f0b]
黒い線の進行方向向かって左側の境界を走行する。ボールはア...
#ref(./2015a-mission2.png,50%)
#ref(./open.jpg,25%)
~アームが開いている状態~
#ref(./close.jpg,25%)
~アームが閉じている状態~
モーターの回転の方向を90°変換するために十字のギヤを使用し...
#ref(./18643.jpg,25%)
#ref(./18644.jpg,25%)
* プログラムの説明 [#g0ea3610]
赤外線センサーを用い、入射した赤外線の反射強度を取得する...
ロボットはコース上を、~
1)線の外側~
2)線の境界上~
3)線の上~
の三種類として認識する。進行方向向かって左側の境界上を移...
1)右にシフト~
2)直進~
3)左にシフト~
しながら進んでいく。基本的にはwhileループで1[ms]ごとにセ...
センサーの値は0から100の整数値で与えられる。数値が大きい...
A→CとA→Bでは、交差点での処理とゴール後の処理が若干違うだ...
交差点の判定は、スタートからの経過時間と黒の線上にいる時...
ボールキャッチ処理は完全にスタート時からの秒数に依存して...
ボールキャッチ用の処理とゴール後のシュートの処理はtask()...
以下にプログラムの詳細を記述する。
**処理や定数の定義(共通) [#q5474a5e]
#define BLACK 36
#define WHITE 48
#define SPEED 25
#define go_forward OnRev(OUT_BC,SPEED);
#define turn_left OnRev(OUT_B,SPEED);Off(OUT_C);
#define turn_left2 OnFwd(OUT_C,SPEED);OnRev(OUT_B,SPEED);
#define turn_right Off(OUT_B);OnRev(OUT_C,SPEED);
#define STEP 1 //センサーのデータの取得頻度を1[ms]に設定
**サブルーチン [#g2d529d5]
ボールをキャッチする動作
task ball_catch(){ //ボールキャッチ
OnFwd(OUT_A,SPEED);
Wait(1000);
Off(OUT_A);
}
ボールをゴールにシュートする動作
A→Bの場合~
task shoot(){
turn_right;
Wait(1000);
go_forward;
Wait(300);
Off(OUT_B);
Off(OUT_C);
OnRev(OUT_A,SPEED);
Wait(1000);
Off(OUT_A);
}
A→Cの場合~
task shoot(){
turn_left;
Wait(800);
go_forward;
Wait(300);
OnRev(OUT_A,SPEED);
Wait(1000);
Off(OUT_A);
}
**メインタスク [#d95593b8]
変数の初期化
task main(){
SetSensorLight(S3);
int n=0; //黒の上にいる時間を計測するための変数
int flg1=0; //交差点通過前=0 交差点通過後=1
int flg2=0; //ゴール判定用のフラグ
int flg3=0; //ボールキャッチ前=0 ボールキャッチ後=1
long t0=CurrentTick();
~
ループさせるメインタスク。ゴール判定用のフラグが立つまで...
while(flg2==0){
if(CurrentTick()-t0>7500 && flg3==0){ //ボールキャッチ
start ball_catch;
flg3=1; //ボールキャッチ用のフラグを立てる
}else if(SENSOR_3 < BLACK){ //黒の上なら
turn_left;
n++; //黒カウンタインクリメント
if(n>1200 && CurrentTick()-t0>9000 && flg1==0){ //交...
Off(OUT_BC);
n=0; //黒カウンタリセット
flg1=1; //交差点通過フラグをたてる
A→Bの場合
turn_left2; //左折
Wait(700);
A→Cの場合
go_forward; //交差点突破(直進)
Wait(1000);
以下共通~
}else if(n>1400 && flg1==1){
flg2=1; //ゴール判定用のフラグをたてる
}
}else if(SENSOR_3 < WHITE){ //境界線上ならば
go_forward;
n=0; //黒カウンタリセット
}else{ //それ以外(白)なら
turn_right;
n=0; //黒カウンタリセット
}
Wait(STEP); //1[ms]間待つ。1サイクル1[ms]に設定
}
ゴール判定後にシュートさせるサブルーチンを呼び出す。
start shoot;
}
* 問題点 [#ae718112]
-サブルーチンの呼び出しや交差点の処理などを、スタート時か...
-場所の認識数が3パターンだけなのでなめらかに移動できない。
-センサーと車軸が離れている為、センサーが交差点やT字路を...
* 改善案 [#sa31ea59]
-色の識別数を増やし、行動の種類を増やす。
-車軸とセンサーの距離を小さくする
終了行:
#contents
* ロボットの説明 [#h4441f0b]
黒い線の進行方向向かって左側の境界を走行する。ボールはア...
#ref(./2015a-mission2.png,50%)
#ref(./open.jpg,25%)
~アームが開いている状態~
#ref(./close.jpg,25%)
~アームが閉じている状態~
モーターの回転の方向を90°変換するために十字のギヤを使用し...
#ref(./18643.jpg,25%)
#ref(./18644.jpg,25%)
* プログラムの説明 [#g0ea3610]
赤外線センサーを用い、入射した赤外線の反射強度を取得する...
ロボットはコース上を、~
1)線の外側~
2)線の境界上~
3)線の上~
の三種類として認識する。進行方向向かって左側の境界上を移...
1)右にシフト~
2)直進~
3)左にシフト~
しながら進んでいく。基本的にはwhileループで1[ms]ごとにセ...
センサーの値は0から100の整数値で与えられる。数値が大きい...
A→CとA→Bでは、交差点での処理とゴール後の処理が若干違うだ...
交差点の判定は、スタートからの経過時間と黒の線上にいる時...
ボールキャッチ処理は完全にスタート時からの秒数に依存して...
ボールキャッチ用の処理とゴール後のシュートの処理はtask()...
以下にプログラムの詳細を記述する。
**処理や定数の定義(共通) [#q5474a5e]
#define BLACK 36
#define WHITE 48
#define SPEED 25
#define go_forward OnRev(OUT_BC,SPEED);
#define turn_left OnRev(OUT_B,SPEED);Off(OUT_C);
#define turn_left2 OnFwd(OUT_C,SPEED);OnRev(OUT_B,SPEED);
#define turn_right Off(OUT_B);OnRev(OUT_C,SPEED);
#define STEP 1 //センサーのデータの取得頻度を1[ms]に設定
**サブルーチン [#g2d529d5]
ボールをキャッチする動作
task ball_catch(){ //ボールキャッチ
OnFwd(OUT_A,SPEED);
Wait(1000);
Off(OUT_A);
}
ボールをゴールにシュートする動作
A→Bの場合~
task shoot(){
turn_right;
Wait(1000);
go_forward;
Wait(300);
Off(OUT_B);
Off(OUT_C);
OnRev(OUT_A,SPEED);
Wait(1000);
Off(OUT_A);
}
A→Cの場合~
task shoot(){
turn_left;
Wait(800);
go_forward;
Wait(300);
OnRev(OUT_A,SPEED);
Wait(1000);
Off(OUT_A);
}
**メインタスク [#d95593b8]
変数の初期化
task main(){
SetSensorLight(S3);
int n=0; //黒の上にいる時間を計測するための変数
int flg1=0; //交差点通過前=0 交差点通過後=1
int flg2=0; //ゴール判定用のフラグ
int flg3=0; //ボールキャッチ前=0 ボールキャッチ後=1
long t0=CurrentTick();
~
ループさせるメインタスク。ゴール判定用のフラグが立つまで...
while(flg2==0){
if(CurrentTick()-t0>7500 && flg3==0){ //ボールキャッチ
start ball_catch;
flg3=1; //ボールキャッチ用のフラグを立てる
}else if(SENSOR_3 < BLACK){ //黒の上なら
turn_left;
n++; //黒カウンタインクリメント
if(n>1200 && CurrentTick()-t0>9000 && flg1==0){ //交...
Off(OUT_BC);
n=0; //黒カウンタリセット
flg1=1; //交差点通過フラグをたてる
A→Bの場合
turn_left2; //左折
Wait(700);
A→Cの場合
go_forward; //交差点突破(直進)
Wait(1000);
以下共通~
}else if(n>1400 && flg1==1){
flg2=1; //ゴール判定用のフラグをたてる
}
}else if(SENSOR_3 < WHITE){ //境界線上ならば
go_forward;
n=0; //黒カウンタリセット
}else{ //それ以外(白)なら
turn_right;
n=0; //黒カウンタリセット
}
Wait(STEP); //1[ms]間待つ。1サイクル1[ms]に設定
}
ゴール判定後にシュートさせるサブルーチンを呼び出す。
start shoot;
}
* 問題点 [#ae718112]
-サブルーチンの呼び出しや交差点の処理などを、スタート時か...
-場所の認識数が3パターンだけなのでなめらかに移動できない。
-センサーと車軸が離れている為、センサーが交差点やT字路を...
* 改善案 [#sa31ea59]
-色の識別数を増やし、行動の種類を増やす。
-車軸とセンサーの距離を小さくする
ページ名: