2015a/Member/Imanari/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
#contents
*はじめに [#t4ac362b]
ロボコンに向けた準備を進めていく中で以前よりも精度の高い...
コースはAからB
*ロボット [#o46ebbd1]
**概要 [#za8485d8]
モーターの役割はそれぞれ
-A_ボールをつかむためのアームを動かす
-B_右タイヤを動かす
-C_左タイヤを動かす
三輪車タイプの本体に光センサーを前方に取り付け、上部には...
ボールをつかむ動作はイメージとしてはアトラスオオカブトの...
#ref(./atras-1.jpg,40%);
下の2本の角で一時的にボールを確保し、その後時間で制御され...
#ref(./DSC_0487.JPG,50%);
つかんだ状態
#ref(./DSC_0486.JPG,50%);
下の角
#ref(./DSC_0488.JPG,50%);
**工夫 [#me8bf95a]
NXTはもともと大きく重いためあまり凝ったロボットを作るとラ...
最初はクワガタのような動作でボールをつかむ予定だったが、...
*プログラム [#j9993c45]
**概要 [#md590cf0]
#define THRESHOLD 50
#define SPEED_H 40
#define SPEED_L 25
#define turn_left_0 OnFwd(OUT_B,SPEED_H);Off(OUT_C); //...
#define turn_left_1 OnFwd(OUT_B,SPEED_L);Off(OUT_C); //...
#define turn_right_0 OnFwd(OUT_C,SPEED_H);Off(OUT_B); /...
#define turn_right_1 OnFwd(OUT_C,SPEED_L);Off(OUT_B); /...
#define go_forward OnFwd(OUT_BC,SPEED_L); //前進
#define STEP 1 //一回の判定で進む時間
#define nMax 180 //交差点認識に必要な数
#define short_break Off(OUT_BC);Wait(2000);
#define turn_straight OnRev(OUT_B,SPEED_H);Wait(nMax*STE...
#define catch_boal Off(OUT_BC);OnFwd(OUT_A,30);Wait(800)...
#define catch_bboal OnFwd(OUT_A,-30);Wait(1000);Off(OUT_...
sub line_trace() //P三叉路を通過するまでトレースしボ...
{
SetSensorLight(S1);
SetSensorTouch(S2);
int nOnline=0;
long t0 = CurrentTick();
while(CurrentTick()-t0<14000) //14秒間続ける
{
while(nOnline < nMax) //交差点を認識するまで続ける
{
if(CurrentTick()-t0==13000)
{
catch_boal; //スタートして13秒後にボールを掴む。
}
if (SENSOR_1<THRESHOLD-14) //線上 中央
{
turn_left_0;
nOnline++; //線上にいたのでカウンタを増やす
}
else
{
if (SENSOR_1<THRESHOLD-10) //線上 端
{
turn_left_1;
nOnline++; //線上にいたのでカウンタを増やす
}
else if (SENSOR_1<THRESHOLD-5) //境界線付近
{
turn_left_1;
nOnline=0;
}
else if (SENSOR_1<THRESHOLD+3) //境界線付近
{
go_forward;
nOnline=0;
}
else if (SENSOR_1<THRESHOLD+7) //ほぼ線上ではない
{
turn_right_1;
nOnline=0;
}
else //線上ではない
{
turn_right_0;
nOnline=0;
}
}
Wait(STEP);
}
short_break; //交差点で2秒止まる
turn_straight; //交差点と判定したので方向変換して交差...
nOnline=0; //カウンターをリセット
}
}
sub line_trace2() //P三叉路からQ交差点までトレース(...
{
SetSensorLight(S1);
SetSensorTouch(S2);
int nOnline=0;
long t0 = CurrentTick();
while(CurrentTick()-t0<9000) //9秒間続ける
{
if (SENSOR_1<THRESHOLD-14)
{
turn_left_1;
nOnline++;
}
else
{
if (SENSOR_1<THRESHOLD-7)
{
turn_left_1;
nOnline++;
}
else if (SENSOR_1<THRESHOLD-3)
{
turn_left_1;
nOnline=0;
}
else if (SENSOR_1<THRESHOLD+7)
{
go_forward;
nOnline=0;
}
else if (SENSOR_1<THRESHOLD+15)
{
turn_right_1;
nOnline=0;
}
else
{
turn_right_1;
nOnline=0;
}
}
Wait(STEP);
}
}
sub line_trace3() //Bゴールまでトレース、ゴールの三...
{
SetSensorLight(S1);
SetSensorTouch(S2);
int nOnline=0;
long t0 = CurrentTick();
while(CurrentTick()-t0<6000) //6秒間続ける
{
while(nOnline < nMax)
{
if (SENSOR_1<THRESHOLD-14)
{
turn_left_0;
nOnline++;
}
else
{
if (SENSOR_1<THRESHOLD-10)
{
turn_left_1;
nOnline++;
}
else if (SENSOR_1<THRESHOLD-7)
{
turn_left_1;
nOnline=0;
}
else if (SENSOR_1<THRESHOLD+3)
{
go_forward;
nOnline=0;
}
else if (SENSOR_1<THRESHOLD+7)
{
turn_right_1;
nOnline=0;
}
else
{
turn_right_0;
nOnline=0;
}
}
Wait(STEP);
}
short_break;
turn_straight;
nOnline=0;
}
}
task main()
{
line_trace();
line_trace2();
line_trace3();
}
ボールをつかむのをタッチセンサーから時間に変えたため無駄...
線の左側をトレースしていくプログラム。
コースを時間で3つのブロックに分けた。
スタートして
-14秒以内(Pを通過し急カーブ手前まで)...交差点判定のある...
-14~23秒(急カーブ)...交差点判定をやめライントレースだけ...
-23~29秒(Qを通過してBゴールまで)...交差点判定のあるライ...
**工夫 [#t25c291c]
A→Bコースは最後に右に直角に曲がるところがあり、そこを交差...
線上だったときカウンターを増やし交差点を判定するのだが、...
急カーブをトレースするときは交差点判定しないようにし、線...
*結果 [#c94e7817]
ボールをシュートすることはできなかったがAからBまでトレー...
*苦労した点 [#nacce347]
交差点を認識させようとすると急カーブも交差点として認識し...
当初はタッチセンサーでアームを降ろすタイミングを決めてい...
線の濃さにそれぞれの場所によってむらがあったので苦労した...
*感想 [#r6e242ec]
プログラムを順序立てて書いていくことの大切さがわっかた。...
小さい頃、今回のロボットと同じような黒い線をトレースする...
終了行:
#contents
*はじめに [#t4ac362b]
ロボコンに向けた準備を進めていく中で以前よりも精度の高い...
コースはAからB
*ロボット [#o46ebbd1]
**概要 [#za8485d8]
モーターの役割はそれぞれ
-A_ボールをつかむためのアームを動かす
-B_右タイヤを動かす
-C_左タイヤを動かす
三輪車タイプの本体に光センサーを前方に取り付け、上部には...
ボールをつかむ動作はイメージとしてはアトラスオオカブトの...
#ref(./atras-1.jpg,40%);
下の2本の角で一時的にボールを確保し、その後時間で制御され...
#ref(./DSC_0487.JPG,50%);
つかんだ状態
#ref(./DSC_0486.JPG,50%);
下の角
#ref(./DSC_0488.JPG,50%);
**工夫 [#me8bf95a]
NXTはもともと大きく重いためあまり凝ったロボットを作るとラ...
最初はクワガタのような動作でボールをつかむ予定だったが、...
*プログラム [#j9993c45]
**概要 [#md590cf0]
#define THRESHOLD 50
#define SPEED_H 40
#define SPEED_L 25
#define turn_left_0 OnFwd(OUT_B,SPEED_H);Off(OUT_C); //...
#define turn_left_1 OnFwd(OUT_B,SPEED_L);Off(OUT_C); //...
#define turn_right_0 OnFwd(OUT_C,SPEED_H);Off(OUT_B); /...
#define turn_right_1 OnFwd(OUT_C,SPEED_L);Off(OUT_B); /...
#define go_forward OnFwd(OUT_BC,SPEED_L); //前進
#define STEP 1 //一回の判定で進む時間
#define nMax 180 //交差点認識に必要な数
#define short_break Off(OUT_BC);Wait(2000);
#define turn_straight OnRev(OUT_B,SPEED_H);Wait(nMax*STE...
#define catch_boal Off(OUT_BC);OnFwd(OUT_A,30);Wait(800)...
#define catch_bboal OnFwd(OUT_A,-30);Wait(1000);Off(OUT_...
sub line_trace() //P三叉路を通過するまでトレースしボ...
{
SetSensorLight(S1);
SetSensorTouch(S2);
int nOnline=0;
long t0 = CurrentTick();
while(CurrentTick()-t0<14000) //14秒間続ける
{
while(nOnline < nMax) //交差点を認識するまで続ける
{
if(CurrentTick()-t0==13000)
{
catch_boal; //スタートして13秒後にボールを掴む。
}
if (SENSOR_1<THRESHOLD-14) //線上 中央
{
turn_left_0;
nOnline++; //線上にいたのでカウンタを増やす
}
else
{
if (SENSOR_1<THRESHOLD-10) //線上 端
{
turn_left_1;
nOnline++; //線上にいたのでカウンタを増やす
}
else if (SENSOR_1<THRESHOLD-5) //境界線付近
{
turn_left_1;
nOnline=0;
}
else if (SENSOR_1<THRESHOLD+3) //境界線付近
{
go_forward;
nOnline=0;
}
else if (SENSOR_1<THRESHOLD+7) //ほぼ線上ではない
{
turn_right_1;
nOnline=0;
}
else //線上ではない
{
turn_right_0;
nOnline=0;
}
}
Wait(STEP);
}
short_break; //交差点で2秒止まる
turn_straight; //交差点と判定したので方向変換して交差...
nOnline=0; //カウンターをリセット
}
}
sub line_trace2() //P三叉路からQ交差点までトレース(...
{
SetSensorLight(S1);
SetSensorTouch(S2);
int nOnline=0;
long t0 = CurrentTick();
while(CurrentTick()-t0<9000) //9秒間続ける
{
if (SENSOR_1<THRESHOLD-14)
{
turn_left_1;
nOnline++;
}
else
{
if (SENSOR_1<THRESHOLD-7)
{
turn_left_1;
nOnline++;
}
else if (SENSOR_1<THRESHOLD-3)
{
turn_left_1;
nOnline=0;
}
else if (SENSOR_1<THRESHOLD+7)
{
go_forward;
nOnline=0;
}
else if (SENSOR_1<THRESHOLD+15)
{
turn_right_1;
nOnline=0;
}
else
{
turn_right_1;
nOnline=0;
}
}
Wait(STEP);
}
}
sub line_trace3() //Bゴールまでトレース、ゴールの三...
{
SetSensorLight(S1);
SetSensorTouch(S2);
int nOnline=0;
long t0 = CurrentTick();
while(CurrentTick()-t0<6000) //6秒間続ける
{
while(nOnline < nMax)
{
if (SENSOR_1<THRESHOLD-14)
{
turn_left_0;
nOnline++;
}
else
{
if (SENSOR_1<THRESHOLD-10)
{
turn_left_1;
nOnline++;
}
else if (SENSOR_1<THRESHOLD-7)
{
turn_left_1;
nOnline=0;
}
else if (SENSOR_1<THRESHOLD+3)
{
go_forward;
nOnline=0;
}
else if (SENSOR_1<THRESHOLD+7)
{
turn_right_1;
nOnline=0;
}
else
{
turn_right_0;
nOnline=0;
}
}
Wait(STEP);
}
short_break;
turn_straight;
nOnline=0;
}
}
task main()
{
line_trace();
line_trace2();
line_trace3();
}
ボールをつかむのをタッチセンサーから時間に変えたため無駄...
線の左側をトレースしていくプログラム。
コースを時間で3つのブロックに分けた。
スタートして
-14秒以内(Pを通過し急カーブ手前まで)...交差点判定のある...
-14~23秒(急カーブ)...交差点判定をやめライントレースだけ...
-23~29秒(Qを通過してBゴールまで)...交差点判定のあるライ...
**工夫 [#t25c291c]
A→Bコースは最後に右に直角に曲がるところがあり、そこを交差...
線上だったときカウンターを増やし交差点を判定するのだが、...
急カーブをトレースするときは交差点判定しないようにし、線...
*結果 [#c94e7817]
ボールをシュートすることはできなかったがAからBまでトレー...
*苦労した点 [#nacce347]
交差点を認識させようとすると急カーブも交差点として認識し...
当初はタッチセンサーでアームを降ろすタイミングを決めてい...
線の濃さにそれぞれの場所によってむらがあったので苦労した...
*感想 [#r6e242ec]
プログラムを順序立てて書いていくことの大切さがわっかた。...
小さい頃、今回のロボットと同じような黒い線をトレースする...
ページ名: