2012b/Member/yoshi/Mission1
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2012b/Member]]
*Mission1レポート [#q946f150]
目次一覧
#contents
**メンバー紹介 [#i039873f]
yoshi…このページの作成者。工学部機械システム工学科所属。...
blackcat…相棒。とても親切な人柄で、金曜5限の疲れた心を癒...
**課題の内容 [#mission_intro]
図のようなコースを各自で作成した上で、次のような動作をす...
+スタート地点から出発し、スタート地点外のすぐ近くに置かれ...
+ピンポン玉をつかんだら速やかにスタート地点の境界の黒線に...
+ゴール地点に到達したら、ゴールエリア外からピンポン玉をゴ...
#ref(./2012b-mission1.png,80%,Mission1_field)
RIGHT:(画像及び文章は[[2012b/Mission]]より引用)
**ロボットの紹介 [#robot_intro]
***全体について [#he874d10]
-コンセプト
NXT付属のテキストに載っているモデルでは、前後に長くなって...
-構造の説明
全体の形としては、ほぼ直方体となっています。駆動させるタ...
&ref(./12bm111.jpg,95%,全体);&ref(./12bm109.JPG,85%,back);
左の画像は左前上方から、右の画像は後方から撮影したもので...
***ボールの回収・射出機構について [#z85bcad0]
-コンセプト
ライントレースをするための部分を作ってからこちらの構造を...
-構造の説明
モータに直接挿してあるバーに、シュートの時ボールを押し出...
&ref(./12bm112.jpg,95%,内部);&ref(./12bm113.jpg,95%,left_...
左の画像は本体の下部、右の画像は左側面を撮影したものです。
***工夫・苦労した点 [#e33aec34]
***反省点と考察 [#y985cca8]
-少し無理矢理くっつけているような部分や、構造的に無駄のあ...
-キャスターに荷重がかかりすぎていて、若干後ろに傾いてしま...
-キャスターが360°回らない。
-障害物に擦ってしまう。
-ボールを回収するバーが閉じているとき、左タイヤに少し触れ...
-シュート力が毎回違う。
このように構造的な欠陥が数多く存在する機体となってしまっ...
**プログラムの紹介 [#program_intro]
***概要 [#program_gaiyou]
今回私はフィールドの左側からスタートするプログラムを担当...
私が作成したライントレースのプログラムでは、コース外へ延...
プログラムの全体の流れとしては
+ピンポン球を回収
+スタートゾーンの枠から脱出し、そこからラインの右端をトレ...
+スタートから約10秒後にラインを横断する
+横断した後はラインの左端をトレース
+ラインを横断した地点から3番目の左急カーブ(ゴールゾーンの...
+ゴール前から離脱し、勝利のファンファーレを奏でる
といった様になります。
#ref(./2012b-mission1_orbit.png,80%,orbit)
***作成したプログラムとその詳しい説明 [#program]
始めに定数及び動作を定義します。
#define SPEED_H 45 // 高速
#define SPEED_L 35 // 中速
#define SPEED_LL 20 // 低速
#define THRESHOULD 47 // 閾値
モーターの稼働スピード及び閾値を定義。
より正確にラインをトレースするためにスピードを3段階設けま...
また、コースの黒線が若干白っぽいので閾値は高めに設定しま...
#define OnRL(speedR,speedL) OnFwd(OUT_B,speedR);OnFwd(OU...
#define go_forward OnRL(SPEED_H,SPEED_H); ...
#define turn_left1 OnRL(SPEED_L,-SPEED_L); ...
#define turn_left0 OnRL(SPEED_L,-SPEED_LL); ...
#define turn_right0 OnRL(-SPEED_LL,SPEED_L); ...
#define turn_right1 OnRL(-SPEED_L,SPEED_L); ...
#define STEP 1 ...
#define nMAX 140 ...
#define short_break Off(OUT_BC);Wait(1000); ...
#define CROSS_TIME 400 ...
#define cross_line OnRL(SPEED_H,0);Wait(CROSS_TIME); ...
#define shoot OnRL(-SPEED_H,SPEED_H);Wait(1100);Off(OUT_...
動作等を定義。
ポートAはボールの回収・射出機構、ポートBは右タイヤ、ポー...
#define E 329.5 // ミ
#define Fs 370 // ファ#
#define G 392 // ソ
#define A 440 // ラ
#define As 466 // ラ#
#define B 494 // シ
#define C 523.5 // ド
#define D 587 // レ
sub fanfare()
{
repeat(3) {
PlayTone(D,100);Wait(140);
}
PlayTone(D,400);Wait(470);
PlayTone(As,400);Wait(470);
PlayTone(C,400);Wait(470);
PlayTone(D,100);Wait(300);
PlayTone(C,100);Wait(150);
PlayTone(D,1000);Wait(1400);
while (true) {
PlayTone(A,400);Wait(450);
PlayTone(G,400);Wait(450);
PlayTone(A,400);Wait(450);
PlayTone(G,100);Wait(230);
PlayTone(C,400);Wait(450);
PlayTone(C,100);Wait(230);
PlayTone(B,400);Wait(450);
PlayTone(C,100);Wait(230);
PlayTone(B,400);Wait(450);
PlayTone(B,100);Wait(230);
PlayTone(A,400);Wait(450);
PlayTone(G,400);Wait(450);
PlayTone(Fs,400);Wait(450);
PlayTone(G,180);Wait(230);
PlayTone(E,1600);Wait(2000);
PlayTone(A,400);Wait(450);
PlayTone(G,400);Wait(450);
PlayTone(A,400);Wait(450);
PlayTone(G,100);Wait(230);
PlayTone(C,400);Wait(450);
PlayTone(C,100);Wait(230);
PlayTone(B,400);Wait(450);
PlayTone(C,100);Wait(230);
PlayTone(B,400);Wait(450);
PlayTone(B,100);Wait(230);
PlayTone(A,400);Wait(450);
PlayTone(G,400);Wait(450);
PlayTone(A,400);Wait(450);
PlayTone(C,180);Wait(230);
PlayTone(D,1600);Wait(2000);
}
}
音階を定義し、ファンファーレのサブルーチンを用意。
楽曲は「ファイナルファンタジー」シリーズから「ファンファ...
以下から、実際の動作の部分のプログラムとなります。
task main() {
SetSensorLight(S1); // センサのポート1に光セ...
int nOnline = 0; // ライン上にどれだけいた...
int nCurve = 0; // 左急カーブの回数をカウ...
long t0 = CurrentTick(); // ライン横断までの時間を...
OnRL(-SPEED_L,SPEED_H);
Wait(300);
Off(OUT_BC);
OnRev(OUT_A,30);
Wait(500);
Off(OUT_A);
OnRL(2*SPEED_H,SPEED_H);
Wait(250);
Off(OUT_BC);
ここの一連のプログラムで、ピンポン球を回収してスタートゾ...
while (CurrentTick() - t0 < 10000) { // ス...
if(SENSOR_1 < THRESHOULD - 13) { // 濃...
turn_right1;
} else {
if (SENSOR_1 < THRESHOULD - 7) { // 薄...
turn_right0;
} else if (SENSOR_1 < THRESHOULD + 7) { // ラ...
go_forward;
} else if (SENSOR_1 < THRESHOULD + 15) { // ラ...
turn_left0;
} else {
turn_left1; // そ...
}
Wait(STEP);
}
}
この部分はスタートから10秒間の、ラインの右端をトレースす...
閾値からの差によって曲がり方を選択しながら進んで行きます。
if (CurrentTick() - t0 == 10000) {
cross_line; // ラインを横断
t0 = CurrentTick();
スタートから10秒経過したら、ラインを横断して左側へ移りま...
while (nCurve < 2) {
if(SENSOR_1 < THRESHOULD - 13) {
turn_left1;
nOnline++;
if (nOnline == nMAX) { // nOnlineがnMAXを超...
nCurve++; // 急カーブの回数を...
nOnline = 0; // ライン上にどれだ...
PlaySound(SOUND_CLICK);
Off(OUT_BC);
Wait(300);
OnRL(SPEED_H,-SPEED_H); // センサをライン上...
Wait(500);
} // ここまで
} else {
if (SENSOR_1 < THRESHOULD - 7) {
turn_left0;
} else if (SENSOR_1 < THRESHOULD + 7) {
go_forward;
} else if (SENSOR_1 < THRESHOULD + 15) {
turn_right0;
} else {
turn_right1;
}
nOnline = 0;
}
Wait(STEP);
}
}
ラインの左側に移った後は、ラインの左端をトレースするよう...
また、ラインの横断後左急カーブの回数が2回未満の時は、左急...
while (nCurve >= 2) {
while (nOnline < nMAX) {
if(SENSOR_1 < THRESHOULD - 13) {
turn_left1;
nOnline++;
} else {
if (SENSOR_1 < THRESHOULD - 7) {
turn_left0;
} else if (SENSOR_1 < THRESHOULD + 7) {
go_forward;
} else if (SENSOR_1 < THRESHOULD + 15) {
turn_right0;
} else {
turn_right1;
}
nOnline = 0;
}
Wait(STEP);
}
short_break;
PlaySound(SOUND_LOW_BEEP);
shoot;
PlaySound(SOUND_FAST_UP);
Wait(1000);
OnRL(SPEED_H,SPEED_H);
Wait(15000);
Off(OUT_BC);
Wait(1000);
fanfare();
}
}
}
左急カーブを2つ通り過ぎた後は、その後の3つ目の左急カーブ...
***工夫・苦労した点 [#ma04866b]
***反省点と考察 [#a2bfe68e]
-最初のボールを回収する時と最後のシュートの時に動作時間を...
-ラインを横断後2つ目のカーブにも反応するようにnMAXを小さ...
-緩いカーブで反応してしまうこともあれば、急なカーブで反応...
これらの問題を解決するために数値の設定を何度も見直し、調...
**全体の感想・反省等 [#kansou]
-機体に関しては相方とほとんど相談せずに自分だけで作ってし...
-マインドストームに関して全くの初心者だったのでいきなりこ...
-今回は自分の力だけで何とかしようとしてかなり苦労したので...
-Mission2は成功率8割以上を目指したいです。
終了行:
[[2012b/Member]]
*Mission1レポート [#q946f150]
目次一覧
#contents
**メンバー紹介 [#i039873f]
yoshi…このページの作成者。工学部機械システム工学科所属。...
blackcat…相棒。とても親切な人柄で、金曜5限の疲れた心を癒...
**課題の内容 [#mission_intro]
図のようなコースを各自で作成した上で、次のような動作をす...
+スタート地点から出発し、スタート地点外のすぐ近くに置かれ...
+ピンポン玉をつかんだら速やかにスタート地点の境界の黒線に...
+ゴール地点に到達したら、ゴールエリア外からピンポン玉をゴ...
#ref(./2012b-mission1.png,80%,Mission1_field)
RIGHT:(画像及び文章は[[2012b/Mission]]より引用)
**ロボットの紹介 [#robot_intro]
***全体について [#he874d10]
-コンセプト
NXT付属のテキストに載っているモデルでは、前後に長くなって...
-構造の説明
全体の形としては、ほぼ直方体となっています。駆動させるタ...
&ref(./12bm111.jpg,95%,全体);&ref(./12bm109.JPG,85%,back);
左の画像は左前上方から、右の画像は後方から撮影したもので...
***ボールの回収・射出機構について [#z85bcad0]
-コンセプト
ライントレースをするための部分を作ってからこちらの構造を...
-構造の説明
モータに直接挿してあるバーに、シュートの時ボールを押し出...
&ref(./12bm112.jpg,95%,内部);&ref(./12bm113.jpg,95%,left_...
左の画像は本体の下部、右の画像は左側面を撮影したものです。
***工夫・苦労した点 [#e33aec34]
***反省点と考察 [#y985cca8]
-少し無理矢理くっつけているような部分や、構造的に無駄のあ...
-キャスターに荷重がかかりすぎていて、若干後ろに傾いてしま...
-キャスターが360°回らない。
-障害物に擦ってしまう。
-ボールを回収するバーが閉じているとき、左タイヤに少し触れ...
-シュート力が毎回違う。
このように構造的な欠陥が数多く存在する機体となってしまっ...
**プログラムの紹介 [#program_intro]
***概要 [#program_gaiyou]
今回私はフィールドの左側からスタートするプログラムを担当...
私が作成したライントレースのプログラムでは、コース外へ延...
プログラムの全体の流れとしては
+ピンポン球を回収
+スタートゾーンの枠から脱出し、そこからラインの右端をトレ...
+スタートから約10秒後にラインを横断する
+横断した後はラインの左端をトレース
+ラインを横断した地点から3番目の左急カーブ(ゴールゾーンの...
+ゴール前から離脱し、勝利のファンファーレを奏でる
といった様になります。
#ref(./2012b-mission1_orbit.png,80%,orbit)
***作成したプログラムとその詳しい説明 [#program]
始めに定数及び動作を定義します。
#define SPEED_H 45 // 高速
#define SPEED_L 35 // 中速
#define SPEED_LL 20 // 低速
#define THRESHOULD 47 // 閾値
モーターの稼働スピード及び閾値を定義。
より正確にラインをトレースするためにスピードを3段階設けま...
また、コースの黒線が若干白っぽいので閾値は高めに設定しま...
#define OnRL(speedR,speedL) OnFwd(OUT_B,speedR);OnFwd(OU...
#define go_forward OnRL(SPEED_H,SPEED_H); ...
#define turn_left1 OnRL(SPEED_L,-SPEED_L); ...
#define turn_left0 OnRL(SPEED_L,-SPEED_LL); ...
#define turn_right0 OnRL(-SPEED_LL,SPEED_L); ...
#define turn_right1 OnRL(-SPEED_L,SPEED_L); ...
#define STEP 1 ...
#define nMAX 140 ...
#define short_break Off(OUT_BC);Wait(1000); ...
#define CROSS_TIME 400 ...
#define cross_line OnRL(SPEED_H,0);Wait(CROSS_TIME); ...
#define shoot OnRL(-SPEED_H,SPEED_H);Wait(1100);Off(OUT_...
動作等を定義。
ポートAはボールの回収・射出機構、ポートBは右タイヤ、ポー...
#define E 329.5 // ミ
#define Fs 370 // ファ#
#define G 392 // ソ
#define A 440 // ラ
#define As 466 // ラ#
#define B 494 // シ
#define C 523.5 // ド
#define D 587 // レ
sub fanfare()
{
repeat(3) {
PlayTone(D,100);Wait(140);
}
PlayTone(D,400);Wait(470);
PlayTone(As,400);Wait(470);
PlayTone(C,400);Wait(470);
PlayTone(D,100);Wait(300);
PlayTone(C,100);Wait(150);
PlayTone(D,1000);Wait(1400);
while (true) {
PlayTone(A,400);Wait(450);
PlayTone(G,400);Wait(450);
PlayTone(A,400);Wait(450);
PlayTone(G,100);Wait(230);
PlayTone(C,400);Wait(450);
PlayTone(C,100);Wait(230);
PlayTone(B,400);Wait(450);
PlayTone(C,100);Wait(230);
PlayTone(B,400);Wait(450);
PlayTone(B,100);Wait(230);
PlayTone(A,400);Wait(450);
PlayTone(G,400);Wait(450);
PlayTone(Fs,400);Wait(450);
PlayTone(G,180);Wait(230);
PlayTone(E,1600);Wait(2000);
PlayTone(A,400);Wait(450);
PlayTone(G,400);Wait(450);
PlayTone(A,400);Wait(450);
PlayTone(G,100);Wait(230);
PlayTone(C,400);Wait(450);
PlayTone(C,100);Wait(230);
PlayTone(B,400);Wait(450);
PlayTone(C,100);Wait(230);
PlayTone(B,400);Wait(450);
PlayTone(B,100);Wait(230);
PlayTone(A,400);Wait(450);
PlayTone(G,400);Wait(450);
PlayTone(A,400);Wait(450);
PlayTone(C,180);Wait(230);
PlayTone(D,1600);Wait(2000);
}
}
音階を定義し、ファンファーレのサブルーチンを用意。
楽曲は「ファイナルファンタジー」シリーズから「ファンファ...
以下から、実際の動作の部分のプログラムとなります。
task main() {
SetSensorLight(S1); // センサのポート1に光セ...
int nOnline = 0; // ライン上にどれだけいた...
int nCurve = 0; // 左急カーブの回数をカウ...
long t0 = CurrentTick(); // ライン横断までの時間を...
OnRL(-SPEED_L,SPEED_H);
Wait(300);
Off(OUT_BC);
OnRev(OUT_A,30);
Wait(500);
Off(OUT_A);
OnRL(2*SPEED_H,SPEED_H);
Wait(250);
Off(OUT_BC);
ここの一連のプログラムで、ピンポン球を回収してスタートゾ...
while (CurrentTick() - t0 < 10000) { // ス...
if(SENSOR_1 < THRESHOULD - 13) { // 濃...
turn_right1;
} else {
if (SENSOR_1 < THRESHOULD - 7) { // 薄...
turn_right0;
} else if (SENSOR_1 < THRESHOULD + 7) { // ラ...
go_forward;
} else if (SENSOR_1 < THRESHOULD + 15) { // ラ...
turn_left0;
} else {
turn_left1; // そ...
}
Wait(STEP);
}
}
この部分はスタートから10秒間の、ラインの右端をトレースす...
閾値からの差によって曲がり方を選択しながら進んで行きます。
if (CurrentTick() - t0 == 10000) {
cross_line; // ラインを横断
t0 = CurrentTick();
スタートから10秒経過したら、ラインを横断して左側へ移りま...
while (nCurve < 2) {
if(SENSOR_1 < THRESHOULD - 13) {
turn_left1;
nOnline++;
if (nOnline == nMAX) { // nOnlineがnMAXを超...
nCurve++; // 急カーブの回数を...
nOnline = 0; // ライン上にどれだ...
PlaySound(SOUND_CLICK);
Off(OUT_BC);
Wait(300);
OnRL(SPEED_H,-SPEED_H); // センサをライン上...
Wait(500);
} // ここまで
} else {
if (SENSOR_1 < THRESHOULD - 7) {
turn_left0;
} else if (SENSOR_1 < THRESHOULD + 7) {
go_forward;
} else if (SENSOR_1 < THRESHOULD + 15) {
turn_right0;
} else {
turn_right1;
}
nOnline = 0;
}
Wait(STEP);
}
}
ラインの左側に移った後は、ラインの左端をトレースするよう...
また、ラインの横断後左急カーブの回数が2回未満の時は、左急...
while (nCurve >= 2) {
while (nOnline < nMAX) {
if(SENSOR_1 < THRESHOULD - 13) {
turn_left1;
nOnline++;
} else {
if (SENSOR_1 < THRESHOULD - 7) {
turn_left0;
} else if (SENSOR_1 < THRESHOULD + 7) {
go_forward;
} else if (SENSOR_1 < THRESHOULD + 15) {
turn_right0;
} else {
turn_right1;
}
nOnline = 0;
}
Wait(STEP);
}
short_break;
PlaySound(SOUND_LOW_BEEP);
shoot;
PlaySound(SOUND_FAST_UP);
Wait(1000);
OnRL(SPEED_H,SPEED_H);
Wait(15000);
Off(OUT_BC);
Wait(1000);
fanfare();
}
}
}
左急カーブを2つ通り過ぎた後は、その後の3つ目の左急カーブ...
***工夫・苦労した点 [#ma04866b]
***反省点と考察 [#a2bfe68e]
-最初のボールを回収する時と最後のシュートの時に動作時間を...
-ラインを横断後2つ目のカーブにも反応するようにnMAXを小さ...
-緩いカーブで反応してしまうこともあれば、急なカーブで反応...
これらの問題を解決するために数値の設定を何度も見直し、調...
**全体の感想・反省等 [#kansou]
-機体に関しては相方とほとんど相談せずに自分だけで作ってし...
-マインドストームに関して全くの初心者だったのでいきなりこ...
-今回は自分の力だけで何とかしようとしてかなり苦労したので...
-Mission2は成功率8割以上を目指したいです。
ページ名: