2014a/Member/kiyomizu/Mission1
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2014a/Member]]
#contents
*課題1について [#q7f3660d]
**メンバー紹介 [#j1385904]
今回は、私一人のみでなく、二人で課題に取り組んだ。ここに...
・kiyomizu(私)
・suiden
**課題1の内容 [#pe113d30]
まずは、何をすればよいのか課題1の内容(ルール)を確認した...
1.スタート地点から出発し、黒い線にそって動く。
2.一つ目の十字の交差点と二つめの十字の交差点の間に置かれ...
3.さらに黒線に沿って動いてゴール地点を目指す。
4.ゴールに向けてピンポン玉をシュートする。
(注1*なお、この課題は二人で同一のロボットを使い、お互い...
(注2*私達はピンポン玉ではなく、備え付けのボールを使用す...
#ref(2014a/Member/kiyomizu/Mission1/robo1_2.png,50%,図1...
これを見て、やるべきことを考えたところ、大雑把に2段階...
1つ目、今回の課題をクリアするための能力を持ったロボット...
*ロボットの制作 [#a720d0bc]
**課題1をクリアするための能力を持ったロボットを作る [#mf...
課題1をクリアするための能力とは何であろうか。3つの能力...
・ボールを保持する能力
・ボールをシュートする能力
・黒い線に沿って進む能力
<ボールを保持する能力>…開発当初は前の空いたコの字型の...
<ボールをシュートする能力>…初期では、囲いを使うという...
これらの条件をたった1つの構造でクリアしているのが今回...
(注3*今回のこの構造は私ではなく相方のsuiden氏が考案した...
#ref(2014a/Member/kiyomizu/Mission1/BEFOREBAMP.jpg,100%,b...
(図1、ボールを囲いながらゴールへと向かう機構。図2とセッ...
#ref(2014a/Member/kiyomizu/Mission1/MESSYSHOOT.jpg,50%,sh...
(図2、初期のボールを前にとばす機構。)
#ref(2014a/Member/kiyomizu/Mission1/NIJYUUBAR.jpg,50%,sho...
(図3、二重バー構造。)
<黒い線に沿って進む能力>…この課題の直前に"ライントレ...
そんなこんなでできたのがこのロボットである。
#ref(2014a/Member/kiyomizu/Mission1/ROBOALL_1.jpg,50%,robo)
*プログラムの制作 [#c696ddba]
**課題1をクリアするために必要なプログラムを組む [#c8e3a9...
題名の通り、課題1をクリアするために必要なプログラムを組...
・ボールを保持するプログラム
・ボールをシュートするプログラム
・黒い線に沿って進むプログラム
<ボールを保持するプログラム>…今回の私たちのロボットで...
<ボールをシュートするプログラム>…ボールを保持するプロ...
<黒い線に沿って進むプログラム>…今回の一番の鬼門である...
**実際に組んだプログラム [#sc93f4f9]
これらをもとに実際に組んだプログラムがこれである。&br;...
-数などの定義
#define THRESHOLD 50 //しきい値(明るさ判定でつかう...
#define SPEED 75 //シュート動作などでのモーター...
#define SPEED_T 40 //ターン時のモーターの出力(%)//
#define SPEED_S 30 //直進時のモーターの出力(%)//
#define STEP 1 //明るさ判定の頻度 (x回/10...
#define CROSS_TIME 200 //交差点を直進する際にかける時...
#define SHOOT_TIME 1000 //シュート動作にかける時間//
#define nMAX 300 //交差点判定での異常な数の目安//
#define START_DASH 1000 //スタート直後の直進する動作に...
#define TRACE_TIME 8000 //スタート直後の直進の後のライ...
#define short_break Off(OUT_BC); Wait(1000); //判定の...
#define CATCH_TIMING 30000 //動作開始からボールをつか...
-使う関数の定義
sub start_go() //スタート直後の直進する動作...
{
OnFwd(OUT_BC,SPEED_S);
Wait(START_DASH);
Off(OUT_BC);
}
sub go_forward() //前に進む動作の定義//
{
OnFwd(OUT_BC,SPEED_S);
}
sub turn_left0() //左に曲がる動作の定義//
{
OnFwd(OUT_C,-SPEED_T);
}
sub turn_left1() //その場で左に旋回する動作の定...
{
OnFwd(OUT_B,SPEED_T);
OnRev(OUT_C,SPEED_T);
}
sub turn_right0() //右に曲がる動作の定義//
{
OnFwd(OUT_B,-SPEED_T);
}
sub turn_right1() //その場で右に旋回する動作の定...
{
OnFwd(OUT_C,SPEED_T);
OnRev(OUT_B,SPEED_T);
}
sub cross_line() //交差点を突っ切る動作の定義//
{
PlaySound(SOUND_LOW_BEEP);
OnFwd(OUT_BC,SPEED_S);
Wait(CROSS_TIME);
short_break;
}
sub pre_shoot() //ボールを捕獲する前に足を振り上...
{
RotateMotor(OUT_A,SPEED,-200);
}
sub Messi_Shoot() //まるでメッシのようなシュートを打...
{
RotateMotor(OUT_B,SPEED,45);
RotateMotor(OUT_C,SPEED,45);
RotateMotor(OUT_A,SPEED,200);
Wait(SHOOT_TIME);
Off(OUT_A);
}
sub shoot_performance() //シュート後にするパフォーマ...
{
PlaySound(SOUND_DOUBLE_BEEP);
RotateMotor(OUT_B,SPEED,90);
RotateMotor(OUT_C,SPEED,90);
RotateMotor(OUT_B,SPEED,90);
RotateMotor(OUT_C,SPEED,90);
}
これから下が実際に行う動作のプログラムになる。
プログラムの順は下記のようである。
ミッションスタート
→少し直進(黒いスタートの枠から外に出る)
→最初の交差点手前までライントレース(この過程はいらなか...
→ライントレース(交差点判定あり、時限式ボール捕獲あり)
→交差点カウンター式メッシのようなシュート。
-メインのプログラム…以下4つは本来つながっているものであ...
--様々な定義
task main()
{
SetSensorLight(S1); //光センサーの接続先指定//
int nOnline=0; //後々使う交差点判定のときの...
int cross_line_times=0; //通過した交差点の数カウンタ...
long t0 = CurrentTick(); //開始直後の時間を記録//
--直進
pre_shoot(); //ボール捕獲のための予備動作...
start_go(); //直進(黒いスタートの枠から...
--最初の交差点手前までライントレース…ここからはプログラム...
while (CurrentTick()-t0 <= TRACE_TIME){ //開始から...
if (SENSOR_1 < THRESHOLD-35){ //もしセンサ...
turn_left1();
} else { //でない状況...
if (SENSOR_1 < THRESHOLD-15){ //もしセンサー...
turn_left0();
} else if (SENSOR_1 < THRESHOLD+15){ //でない状...
go_forward();
} else if (SENSOR_1 < THRESHOLD+35){ //でない状...
turn_right0();
} else { //でない状...
turn_right1();
}
Wait(STEP); //判断時間...
”→}”
PlaySound(SOUND_UP); //区切りで...
--ライントレース(交差点判定あり、時限式ボール捕獲あり)...
while (true) {
long t1 = CurrentTick(); //開始から測...
while (nOnline < nMAX){ //横に曲がる...
if (SENSOR_1 < THRESHOLD-35){ //ここから//
turn_left1();
nOnline++;
} else {
if (SENSOR_1 < THRESHOLD+15){
turn_left0();
} else if (SENSOR_1 < THRESHOLD+15){
go_forward();
} else if (SENSOR_1 < THRESHOLD+35){
turn_right0();
} else {
turn_right1();
}
nOnline=0;
}
Wait(STEP);
} //ここまで $...
if(t1-t0 == CATCH_TIMING){ RotateMotor(OUT_A,SPEED,200)...
}
} ...
short_break; /...
turn_right1(); /...
Wait(nMAX*STEP);
cross_line_times++; /...
if (cross_line_times==3){Messi_Shoot();shoot_performanc...
else{cross_line();} /...
nOnline=0; /...
}
}
このようにプログラムを構築した。&br;関数while,if,elseなど...
と、これまでさも複雑そうなプログラムを構築し、なんとかロ...
-が、このままでは終われないので……
反省点をきちんと整理し再度挑戦することにした。&br;反省...
以上のことを加味した結果、複雑で解読が困難になりにくく、&...
**専用プログラム2[#qa3983a2]
…前回のプログラムの反省点は複雑化しすぎたことにより、&br;...
task main ()
{
OnFwd(OUT_A,-70); Wait(500);Off(OUT_A);//黒い枠からでる...
PlaySound(SOUND_FAST_UP); //区切りの警笛(...
OnFwd(OUT_BC,50); Wait(500);Off(OUT_BC);//コースの始めの...
PlaySound(SOUND_LOW_BEEP);
OnFwd(OUT_B,50); Wait(900);Off(OUT_BC);//...
PlaySound(SOUND_LOW_BEEP);
OnFwd(OUT_BC,50); Wait(300);Off(OUT_BC);//位置調整の直進...
OnFwd(OUT_C,50);OnFwd(OUT_B,15); Wait(1500);Off(OUT_BC);...
PlaySound(SOUND_LOW_BEEP);
//ここで第一交差点通過//
OnFwd(OUT_C,40);OnFwd(OUT_B,10); Wait(1000);Off(OUT_BC);...
PlaySound(SOUND_LOW_BEEP);
OnFwd(OUT_A,80); Wait(500);Off(OUT_A);
PlaySound(SOUND_FAST_UP);//足を下ろせ(=ボールを捕まえ...
OnFwd(OUT_C,40);OnFwd(OUT_B,10); Wait(1000);Off(OUT_BC);...
PlaySound(SOUND_LOW_BEEP);
OnFwd(OUT_C,40);OnFwd(OUT_B,10); Wait(1000);Off(OUT_BC);...
PlaySound(SOUND_LOW_BEEP);
OnFwd(OUT_C,40);OnFwd(OUT_B,10); Wait(500);Off(OUT_BC);/...
PlaySound(SOUND_LOW_BEEP);
OnFwd(OUT_A,60); Wait(500);Off(OUT_A);
OnFwd(OUT_A,60); Wait(500);Off(OUT_A);
//ここで中央交差点を通過//
PlaySound(SOUND_DOUBLE_BEEP);
OnFwd(OUT_BC,50); Wait(500);Off(OUT_BC);//位置調整の直進...
OnFwd(OUT_C,10);OnFwd(OUT_B,25);Wait(2400);Off(OUT_BC);/...
PlaySound(SOUND_LOW_BEEP);
OnFwd(OUT_BC,50); Wait(300);Off(OUT_BC);//コース上の直進//
PlaySound(SOUND_LOW_BEEP);
OnFwd(OUT_B,50);Wait(1000);Off(OUT_B);//...
PlaySound(SOUND_LOW_BEEP);
OnFwd(OUT_C,50);OnFwd(OUT_B,45); Wait(1000);Off(OUT_BC);...
PlaySound(SOUND_LOW_BEEP);
OnFwd(OUT_B,50); Wait(1600);Off(OUT_BC);/...
PlaySound(SOUND_LOW_BEEP);
OnFwd(OUT_C,50); Wait(1900);Off(OUT_BC);//最後の左への回...
PlaySound(SOUND_LOW_BEEP);
OnRev(OUT_C,30);OnRev(OUT_B,25);Wait(500);Off(OUT_BC);//...
OnFwd(OUT_A,-90); Wait(400);Off(OUT_A);//足を振り上げろ...
PlaySound(SOUND_FAST_UP);
}
やけにカーブの関数が多いのは、一回一回自分で進む量、モ...
*感想、反省 [#ee67d78c]
無い知恵を絞り素人がプログラミングをしてみたところ(あ...
終了行:
[[2014a/Member]]
#contents
*課題1について [#q7f3660d]
**メンバー紹介 [#j1385904]
今回は、私一人のみでなく、二人で課題に取り組んだ。ここに...
・kiyomizu(私)
・suiden
**課題1の内容 [#pe113d30]
まずは、何をすればよいのか課題1の内容(ルール)を確認した...
1.スタート地点から出発し、黒い線にそって動く。
2.一つ目の十字の交差点と二つめの十字の交差点の間に置かれ...
3.さらに黒線に沿って動いてゴール地点を目指す。
4.ゴールに向けてピンポン玉をシュートする。
(注1*なお、この課題は二人で同一のロボットを使い、お互い...
(注2*私達はピンポン玉ではなく、備え付けのボールを使用す...
#ref(2014a/Member/kiyomizu/Mission1/robo1_2.png,50%,図1...
これを見て、やるべきことを考えたところ、大雑把に2段階...
1つ目、今回の課題をクリアするための能力を持ったロボット...
*ロボットの制作 [#a720d0bc]
**課題1をクリアするための能力を持ったロボットを作る [#mf...
課題1をクリアするための能力とは何であろうか。3つの能力...
・ボールを保持する能力
・ボールをシュートする能力
・黒い線に沿って進む能力
<ボールを保持する能力>…開発当初は前の空いたコの字型の...
<ボールをシュートする能力>…初期では、囲いを使うという...
これらの条件をたった1つの構造でクリアしているのが今回...
(注3*今回のこの構造は私ではなく相方のsuiden氏が考案した...
#ref(2014a/Member/kiyomizu/Mission1/BEFOREBAMP.jpg,100%,b...
(図1、ボールを囲いながらゴールへと向かう機構。図2とセッ...
#ref(2014a/Member/kiyomizu/Mission1/MESSYSHOOT.jpg,50%,sh...
(図2、初期のボールを前にとばす機構。)
#ref(2014a/Member/kiyomizu/Mission1/NIJYUUBAR.jpg,50%,sho...
(図3、二重バー構造。)
<黒い線に沿って進む能力>…この課題の直前に"ライントレ...
そんなこんなでできたのがこのロボットである。
#ref(2014a/Member/kiyomizu/Mission1/ROBOALL_1.jpg,50%,robo)
*プログラムの制作 [#c696ddba]
**課題1をクリアするために必要なプログラムを組む [#c8e3a9...
題名の通り、課題1をクリアするために必要なプログラムを組...
・ボールを保持するプログラム
・ボールをシュートするプログラム
・黒い線に沿って進むプログラム
<ボールを保持するプログラム>…今回の私たちのロボットで...
<ボールをシュートするプログラム>…ボールを保持するプロ...
<黒い線に沿って進むプログラム>…今回の一番の鬼門である...
**実際に組んだプログラム [#sc93f4f9]
これらをもとに実際に組んだプログラムがこれである。&br;...
-数などの定義
#define THRESHOLD 50 //しきい値(明るさ判定でつかう...
#define SPEED 75 //シュート動作などでのモーター...
#define SPEED_T 40 //ターン時のモーターの出力(%)//
#define SPEED_S 30 //直進時のモーターの出力(%)//
#define STEP 1 //明るさ判定の頻度 (x回/10...
#define CROSS_TIME 200 //交差点を直進する際にかける時...
#define SHOOT_TIME 1000 //シュート動作にかける時間//
#define nMAX 300 //交差点判定での異常な数の目安//
#define START_DASH 1000 //スタート直後の直進する動作に...
#define TRACE_TIME 8000 //スタート直後の直進の後のライ...
#define short_break Off(OUT_BC); Wait(1000); //判定の...
#define CATCH_TIMING 30000 //動作開始からボールをつか...
-使う関数の定義
sub start_go() //スタート直後の直進する動作...
{
OnFwd(OUT_BC,SPEED_S);
Wait(START_DASH);
Off(OUT_BC);
}
sub go_forward() //前に進む動作の定義//
{
OnFwd(OUT_BC,SPEED_S);
}
sub turn_left0() //左に曲がる動作の定義//
{
OnFwd(OUT_C,-SPEED_T);
}
sub turn_left1() //その場で左に旋回する動作の定...
{
OnFwd(OUT_B,SPEED_T);
OnRev(OUT_C,SPEED_T);
}
sub turn_right0() //右に曲がる動作の定義//
{
OnFwd(OUT_B,-SPEED_T);
}
sub turn_right1() //その場で右に旋回する動作の定...
{
OnFwd(OUT_C,SPEED_T);
OnRev(OUT_B,SPEED_T);
}
sub cross_line() //交差点を突っ切る動作の定義//
{
PlaySound(SOUND_LOW_BEEP);
OnFwd(OUT_BC,SPEED_S);
Wait(CROSS_TIME);
short_break;
}
sub pre_shoot() //ボールを捕獲する前に足を振り上...
{
RotateMotor(OUT_A,SPEED,-200);
}
sub Messi_Shoot() //まるでメッシのようなシュートを打...
{
RotateMotor(OUT_B,SPEED,45);
RotateMotor(OUT_C,SPEED,45);
RotateMotor(OUT_A,SPEED,200);
Wait(SHOOT_TIME);
Off(OUT_A);
}
sub shoot_performance() //シュート後にするパフォーマ...
{
PlaySound(SOUND_DOUBLE_BEEP);
RotateMotor(OUT_B,SPEED,90);
RotateMotor(OUT_C,SPEED,90);
RotateMotor(OUT_B,SPEED,90);
RotateMotor(OUT_C,SPEED,90);
}
これから下が実際に行う動作のプログラムになる。
プログラムの順は下記のようである。
ミッションスタート
→少し直進(黒いスタートの枠から外に出る)
→最初の交差点手前までライントレース(この過程はいらなか...
→ライントレース(交差点判定あり、時限式ボール捕獲あり)
→交差点カウンター式メッシのようなシュート。
-メインのプログラム…以下4つは本来つながっているものであ...
--様々な定義
task main()
{
SetSensorLight(S1); //光センサーの接続先指定//
int nOnline=0; //後々使う交差点判定のときの...
int cross_line_times=0; //通過した交差点の数カウンタ...
long t0 = CurrentTick(); //開始直後の時間を記録//
--直進
pre_shoot(); //ボール捕獲のための予備動作...
start_go(); //直進(黒いスタートの枠から...
--最初の交差点手前までライントレース…ここからはプログラム...
while (CurrentTick()-t0 <= TRACE_TIME){ //開始から...
if (SENSOR_1 < THRESHOLD-35){ //もしセンサ...
turn_left1();
} else { //でない状況...
if (SENSOR_1 < THRESHOLD-15){ //もしセンサー...
turn_left0();
} else if (SENSOR_1 < THRESHOLD+15){ //でない状...
go_forward();
} else if (SENSOR_1 < THRESHOLD+35){ //でない状...
turn_right0();
} else { //でない状...
turn_right1();
}
Wait(STEP); //判断時間...
”→}”
PlaySound(SOUND_UP); //区切りで...
--ライントレース(交差点判定あり、時限式ボール捕獲あり)...
while (true) {
long t1 = CurrentTick(); //開始から測...
while (nOnline < nMAX){ //横に曲がる...
if (SENSOR_1 < THRESHOLD-35){ //ここから//
turn_left1();
nOnline++;
} else {
if (SENSOR_1 < THRESHOLD+15){
turn_left0();
} else if (SENSOR_1 < THRESHOLD+15){
go_forward();
} else if (SENSOR_1 < THRESHOLD+35){
turn_right0();
} else {
turn_right1();
}
nOnline=0;
}
Wait(STEP);
} //ここまで $...
if(t1-t0 == CATCH_TIMING){ RotateMotor(OUT_A,SPEED,200)...
}
} ...
short_break; /...
turn_right1(); /...
Wait(nMAX*STEP);
cross_line_times++; /...
if (cross_line_times==3){Messi_Shoot();shoot_performanc...
else{cross_line();} /...
nOnline=0; /...
}
}
このようにプログラムを構築した。&br;関数while,if,elseなど...
と、これまでさも複雑そうなプログラムを構築し、なんとかロ...
-が、このままでは終われないので……
反省点をきちんと整理し再度挑戦することにした。&br;反省...
以上のことを加味した結果、複雑で解読が困難になりにくく、&...
**専用プログラム2[#qa3983a2]
…前回のプログラムの反省点は複雑化しすぎたことにより、&br;...
task main ()
{
OnFwd(OUT_A,-70); Wait(500);Off(OUT_A);//黒い枠からでる...
PlaySound(SOUND_FAST_UP); //区切りの警笛(...
OnFwd(OUT_BC,50); Wait(500);Off(OUT_BC);//コースの始めの...
PlaySound(SOUND_LOW_BEEP);
OnFwd(OUT_B,50); Wait(900);Off(OUT_BC);//...
PlaySound(SOUND_LOW_BEEP);
OnFwd(OUT_BC,50); Wait(300);Off(OUT_BC);//位置調整の直進...
OnFwd(OUT_C,50);OnFwd(OUT_B,15); Wait(1500);Off(OUT_BC);...
PlaySound(SOUND_LOW_BEEP);
//ここで第一交差点通過//
OnFwd(OUT_C,40);OnFwd(OUT_B,10); Wait(1000);Off(OUT_BC);...
PlaySound(SOUND_LOW_BEEP);
OnFwd(OUT_A,80); Wait(500);Off(OUT_A);
PlaySound(SOUND_FAST_UP);//足を下ろせ(=ボールを捕まえ...
OnFwd(OUT_C,40);OnFwd(OUT_B,10); Wait(1000);Off(OUT_BC);...
PlaySound(SOUND_LOW_BEEP);
OnFwd(OUT_C,40);OnFwd(OUT_B,10); Wait(1000);Off(OUT_BC);...
PlaySound(SOUND_LOW_BEEP);
OnFwd(OUT_C,40);OnFwd(OUT_B,10); Wait(500);Off(OUT_BC);/...
PlaySound(SOUND_LOW_BEEP);
OnFwd(OUT_A,60); Wait(500);Off(OUT_A);
OnFwd(OUT_A,60); Wait(500);Off(OUT_A);
//ここで中央交差点を通過//
PlaySound(SOUND_DOUBLE_BEEP);
OnFwd(OUT_BC,50); Wait(500);Off(OUT_BC);//位置調整の直進...
OnFwd(OUT_C,10);OnFwd(OUT_B,25);Wait(2400);Off(OUT_BC);/...
PlaySound(SOUND_LOW_BEEP);
OnFwd(OUT_BC,50); Wait(300);Off(OUT_BC);//コース上の直進//
PlaySound(SOUND_LOW_BEEP);
OnFwd(OUT_B,50);Wait(1000);Off(OUT_B);//...
PlaySound(SOUND_LOW_BEEP);
OnFwd(OUT_C,50);OnFwd(OUT_B,45); Wait(1000);Off(OUT_BC);...
PlaySound(SOUND_LOW_BEEP);
OnFwd(OUT_B,50); Wait(1600);Off(OUT_BC);/...
PlaySound(SOUND_LOW_BEEP);
OnFwd(OUT_C,50); Wait(1900);Off(OUT_BC);//最後の左への回...
PlaySound(SOUND_LOW_BEEP);
OnRev(OUT_C,30);OnRev(OUT_B,25);Wait(500);Off(OUT_BC);//...
OnFwd(OUT_A,-90); Wait(400);Off(OUT_A);//足を振り上げろ...
PlaySound(SOUND_FAST_UP);
}
やけにカーブの関数が多いのは、一回一回自分で進む量、モ...
*感想、反省 [#ee67d78c]
無い知恵を絞り素人がプログラミングをしてみたところ(あ...
ページ名: