2015a/Member/tsuyoshi/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
#contents
*今回の課題 [#nf9c1ce8]
#ref(2015a-mission2.png,,70%)
上図のようなコースを作り、制作したロボットをA地点からB地...
*ロボットの説明 [#ga88d64c]
&ref(./1436582731685.jpg,,30%);
&ref(./1436582754035.jpg,,30%);
(ロボット全体の写真)
今回制作したロボットは三つの車輪を使い、そのうち二つがモ...
**本体部分 [#zd728b9e]
&ref(./1436582747313.jpg,,30%);
&ref(./1436582796368.jpg,,30%);
&ref(./1436582800557.jpg,,30%);
&ref(./1436582779665.jpg,,30%);
基本形のロボットだと、旋回半径が大きい上に、旋回の中心と...
+前輪2つを動かすためのモーターの向かい合わせに密着させて...
+基本形だとセンサーを設置する周りの機構がかなり大きく、旋...
+キャスターを後方部に取り付けて旋回性能を上げたこと。
特に3のキャスターを採用したことによって、コース上のコーナ...
**アーム部分 [#l84212bc]
&ref(./1436582761335.jpg,,30%);
&ref(./1436582772106.jpg,,30%);
最初、アームはボールを挟み込む構造にしようとしたが、挟む...
+回転の向きを変える歯車を使って車体本体と同じ幅に収まるよ...
+回転軸に足を取り付けたこと。その際、囲いと90°ずらして取...
2の足を付けたことによって囲いを上げた時にボールを蹴れるよ...
*プログラムの説明 [#z5869422]
#define BLACK 42 //以下は黒
#define WHITE 50 //以上は白
#define go_forward OnFwd(OUT_AC); //真っ直ぐ
#define go_back OnRev(OUT_AC); //後ろへ
#define turn_right OnRev(OUT_C); OnFwd(OUT_A); //右旋回
#define turn_left OnFwd(OUT_C); OnRev(OUT_A); //左旋回
#define STEP 1 // 一回の判定で進む時間
#define short_break Off(OUT_AC); Wait(200); // 小休止
#define CROSS_TIME 30 // 交差点通過にかかる時間
#define cross_line go_forward;Wait(CROSS_TIME);short_bre...
#define FIX_TIME 25
#define nMAX 8
#define clip_on OnFwd(OUT_B);Wait(10);Off(OUT_B);
#define clip_off OnRev(OUT_B);Wait(10);Off(OUT_B);
#define shoot go_back;Wait(50);go_forward;Wait(30);clip_...
task main()
{
SetSensor(SENSOR_2, SENSOR_LIGHT);
int nOnline=0; // 続けて黒になった回数 (カウンタ)
while (nOnline <nMAX) {
if (SENSOR_2 < BLACK){ // 線上なら
turn_left; // 左へ
nOnline++; //カウンタ増やす
} else {
if (SENSOR_2 < WHITE){ ...
go_forward; // 直進
} else { //線から外れれば
turn_right; //右へ
}
nOnline=0; //カウンタをリセット
}
Wait(STEP);
}
short_break; //小休憩
turn_left;Wait(FIX_TIME); //方向左修正
short_break; //小休憩
clip_on; //捕球
turn_right;Wait(45); //方向右修正
go_forward;Wait(CROSS_TIME); //前進
nOnline=0; //カウンタをリセット
while (nOnline <nMAX) {
if (SENSOR_2 < BLACK){ // 線上なら
turn_left; // 左へ
nOnline++; //カウンタ増やす
} else {
if (SENSOR_2 < WHITE){ ...
go_forward; // 直進
} else { //線から外れれば
turn_right; //右へ
}
nOnline=0; //カウンタをリセット
}
Wait(STEP);
}
short_break; //小休憩
turn_right;Wait(FIX_TIME); //方向修正
cross_line; //交差点を渡る
nOnline=0; //カウンタをリセット
while (nOnline <nMAX) {
if (SENSOR_2 < BLACK){ // 線上なら
turn_left; // 左へ
nOnline++; //カウンタ増やす
} else {
if (SENSOR_2 < WHITE){ ...
go_forward; // 直進
} else { //線から外れれば
turn_right; //右へ
}
nOnline=0; //カウンタをリセット
}
Wait(STEP);
}
short_break; //小休憩
turn_right;Wait(FIX_TIME); //方向修正
shoot; //シュート
Off(OUT_AC); //停止
nOnline=0; //カウンタをリセット
}
**定義した関数 [#qfd02688]
#define BLACK 42 //以下は黒 ...
#define WHITE 50 //以上は白 ...
#define go_forward OnFwd(OUT_AC); //真っ直ぐ ...
#define go_back OnRev(OUT_AC); //後ろへ ...
#define turn_right OnRev(OUT_C); OnFwd(OUT_A); //右旋回...
#define turn_left OnFwd(OUT_C); OnRev(OUT_A); //左旋回...
#define STEP 1 // 一回の判定で進む時間 ...
#define short_break Off(OUT_AC); Wait(200); // 小休止 ...
#define CROSS_TIME 30 // 交差点通過にかかる時間 ...
#define cross_line go_forward;Wait(CROSS_TIME);short_bre...
#define FIX_TIME 25 ...
#define nMAX 8 ...
#define clip_on OnFwd(OUT_B);Wait(10);Off(OUT_B); ...
#define clip_off OnRev(OUT_B);Wait(10);Off(OUT_B); ...
#define shoot go_back;Wait(50);go_forward;Wait(30);clip_...
[解説]
?黒色と判断する値の設定
?白色と判断する値の設定
?前進
?後退
?時計回りに旋回
?反時計回りに旋回
?センサーの判断を1/100秒に設定
?交差点と判断した時の2秒間停止
?交差点通過にかかる時間の設定
?交差点を渡る動作
?交差点と判断した時の方向修正の時間の設定
?交差点と判断するための連続回数の上限設定
?囲いを上げる動作
?囲いを下げる動作
?後ろへ下がり、前進して勢いをつけてから囲いを上げること...
**A地点→P地点 [#hfc7ba8f]
task main()
{
SetSensor(SENSOR_2, SENSOR_LIGHT); ...
int nOnline=0; // 続けて黒になった回数 (カウンタ) ...
while (nOnline <nMAX) { ...
if (SENSOR_2 < BLACK){ // 線上なら ...
turn_left; // 左へ
nOnline++; //カウンタ増やす
} else {
if (SENSOR_2 < WHITE){ /...
go_forward; // 直進
} else { //線から外れれば
turn_right; //右へ ...
}
nOnline=0; //カウンタをリセット
}
Wait(STEP); ...
}
[解説]
?センサー2番にライトセンサーを接続し、使用可能状態に。
?続けて黒と判断した時にその連続回数をカウントさせる。
?連続で黒であるとnMAX回判断しない限り?〜?の動作を続けさ...
?黒であると判断したなら左へ旋回し、カウンタを1増やす。
?境界線上であれば直進させ、カウンタをリセットさせる。
?白であると判断したなら右へ旋回し、カウンタをリセットさ...
??〜?の作業をSTEP/100秒ごとに行う。
**P地点→Q地点 [#t1cbd6e4]
short_break; //小休憩
turn_left;Wait(FIX_TIME); //方向左修正 ...
short_break; //小休憩
clip_on; //捕球
turn_right;Wait(45); //方向右修正 ...
go_forward;Wait(CROSS_TIME); //前進
nOnline=0; //カウンタをリセット
while (nOnline <nMAX) { ...
if (SENSOR_2 < BLACK){ // 線上なら ...
turn_left; // 左へ
nOnline++; //カウンタ増やす
} else {
if (SENSOR_2 < WHITE){ /...
go_forward; // 直進
} else { //線から外れれば
turn_right; //右へ ...
}
nOnline=0; //カウンタをリセット
}
Wait(STEP); ...
}
[解説]
?捕球できる角度に調整
?ライントレースを再開するために角度を修正
?〜?
A地点→P地点の?〜?と同じ
**Q地点→B地点 [#rf7b7491]
short_break; //小休憩
turn_right;Wait(FIX_TIME); //方向修正 ...
cross_line; //交差点を渡る ...
nOnline=0; //カウンタをリセット
while (nOnline <nMAX) { ...
if (SENSOR_2 < BLACK){ // 線上なら ...
turn_left; // 左へ
nOnline++; //カウンタ増やす
} else {
if (SENSOR_2 < WHITE){ /...
go_forward; // 直進
} else { //線から外れれば
turn_right; //右へ ...
}
nOnline=0; //カウンタをリセット
}
Wait(STEP); ...
}
short_break; //小休憩
turn_right;Wait(FIX_TIME); //方向修正 ...
shoot; //シュート
Off(OUT_AC); //停止
nOnline=0; //カウンタをリセット
}
[解説]
?交差点と判断した時には8/100秒分反時計回りをしているので...
?交差点を通過し、元のライントレースへ戻す。
?〜?
A地点→P地点の?〜?と同じ
?ゴールの方向へ角度を調整
*実際にロボットを動かしている動画 [#c432960a]
https://www.youtube.com/watch?v=MteH8fCbr5g
*反省,感想 [#i5496406]
前の課題の時もそうだったが、ロボットの構造を決定するのに...
終了行:
#contents
*今回の課題 [#nf9c1ce8]
#ref(2015a-mission2.png,,70%)
上図のようなコースを作り、制作したロボットをA地点からB地...
*ロボットの説明 [#ga88d64c]
&ref(./1436582731685.jpg,,30%);
&ref(./1436582754035.jpg,,30%);
(ロボット全体の写真)
今回制作したロボットは三つの車輪を使い、そのうち二つがモ...
**本体部分 [#zd728b9e]
&ref(./1436582747313.jpg,,30%);
&ref(./1436582796368.jpg,,30%);
&ref(./1436582800557.jpg,,30%);
&ref(./1436582779665.jpg,,30%);
基本形のロボットだと、旋回半径が大きい上に、旋回の中心と...
+前輪2つを動かすためのモーターの向かい合わせに密着させて...
+基本形だとセンサーを設置する周りの機構がかなり大きく、旋...
+キャスターを後方部に取り付けて旋回性能を上げたこと。
特に3のキャスターを採用したことによって、コース上のコーナ...
**アーム部分 [#l84212bc]
&ref(./1436582761335.jpg,,30%);
&ref(./1436582772106.jpg,,30%);
最初、アームはボールを挟み込む構造にしようとしたが、挟む...
+回転の向きを変える歯車を使って車体本体と同じ幅に収まるよ...
+回転軸に足を取り付けたこと。その際、囲いと90°ずらして取...
2の足を付けたことによって囲いを上げた時にボールを蹴れるよ...
*プログラムの説明 [#z5869422]
#define BLACK 42 //以下は黒
#define WHITE 50 //以上は白
#define go_forward OnFwd(OUT_AC); //真っ直ぐ
#define go_back OnRev(OUT_AC); //後ろへ
#define turn_right OnRev(OUT_C); OnFwd(OUT_A); //右旋回
#define turn_left OnFwd(OUT_C); OnRev(OUT_A); //左旋回
#define STEP 1 // 一回の判定で進む時間
#define short_break Off(OUT_AC); Wait(200); // 小休止
#define CROSS_TIME 30 // 交差点通過にかかる時間
#define cross_line go_forward;Wait(CROSS_TIME);short_bre...
#define FIX_TIME 25
#define nMAX 8
#define clip_on OnFwd(OUT_B);Wait(10);Off(OUT_B);
#define clip_off OnRev(OUT_B);Wait(10);Off(OUT_B);
#define shoot go_back;Wait(50);go_forward;Wait(30);clip_...
task main()
{
SetSensor(SENSOR_2, SENSOR_LIGHT);
int nOnline=0; // 続けて黒になった回数 (カウンタ)
while (nOnline <nMAX) {
if (SENSOR_2 < BLACK){ // 線上なら
turn_left; // 左へ
nOnline++; //カウンタ増やす
} else {
if (SENSOR_2 < WHITE){ ...
go_forward; // 直進
} else { //線から外れれば
turn_right; //右へ
}
nOnline=0; //カウンタをリセット
}
Wait(STEP);
}
short_break; //小休憩
turn_left;Wait(FIX_TIME); //方向左修正
short_break; //小休憩
clip_on; //捕球
turn_right;Wait(45); //方向右修正
go_forward;Wait(CROSS_TIME); //前進
nOnline=0; //カウンタをリセット
while (nOnline <nMAX) {
if (SENSOR_2 < BLACK){ // 線上なら
turn_left; // 左へ
nOnline++; //カウンタ増やす
} else {
if (SENSOR_2 < WHITE){ ...
go_forward; // 直進
} else { //線から外れれば
turn_right; //右へ
}
nOnline=0; //カウンタをリセット
}
Wait(STEP);
}
short_break; //小休憩
turn_right;Wait(FIX_TIME); //方向修正
cross_line; //交差点を渡る
nOnline=0; //カウンタをリセット
while (nOnline <nMAX) {
if (SENSOR_2 < BLACK){ // 線上なら
turn_left; // 左へ
nOnline++; //カウンタ増やす
} else {
if (SENSOR_2 < WHITE){ ...
go_forward; // 直進
} else { //線から外れれば
turn_right; //右へ
}
nOnline=0; //カウンタをリセット
}
Wait(STEP);
}
short_break; //小休憩
turn_right;Wait(FIX_TIME); //方向修正
shoot; //シュート
Off(OUT_AC); //停止
nOnline=0; //カウンタをリセット
}
**定義した関数 [#qfd02688]
#define BLACK 42 //以下は黒 ...
#define WHITE 50 //以上は白 ...
#define go_forward OnFwd(OUT_AC); //真っ直ぐ ...
#define go_back OnRev(OUT_AC); //後ろへ ...
#define turn_right OnRev(OUT_C); OnFwd(OUT_A); //右旋回...
#define turn_left OnFwd(OUT_C); OnRev(OUT_A); //左旋回...
#define STEP 1 // 一回の判定で進む時間 ...
#define short_break Off(OUT_AC); Wait(200); // 小休止 ...
#define CROSS_TIME 30 // 交差点通過にかかる時間 ...
#define cross_line go_forward;Wait(CROSS_TIME);short_bre...
#define FIX_TIME 25 ...
#define nMAX 8 ...
#define clip_on OnFwd(OUT_B);Wait(10);Off(OUT_B); ...
#define clip_off OnRev(OUT_B);Wait(10);Off(OUT_B); ...
#define shoot go_back;Wait(50);go_forward;Wait(30);clip_...
[解説]
?黒色と判断する値の設定
?白色と判断する値の設定
?前進
?後退
?時計回りに旋回
?反時計回りに旋回
?センサーの判断を1/100秒に設定
?交差点と判断した時の2秒間停止
?交差点通過にかかる時間の設定
?交差点を渡る動作
?交差点と判断した時の方向修正の時間の設定
?交差点と判断するための連続回数の上限設定
?囲いを上げる動作
?囲いを下げる動作
?後ろへ下がり、前進して勢いをつけてから囲いを上げること...
**A地点→P地点 [#hfc7ba8f]
task main()
{
SetSensor(SENSOR_2, SENSOR_LIGHT); ...
int nOnline=0; // 続けて黒になった回数 (カウンタ) ...
while (nOnline <nMAX) { ...
if (SENSOR_2 < BLACK){ // 線上なら ...
turn_left; // 左へ
nOnline++; //カウンタ増やす
} else {
if (SENSOR_2 < WHITE){ /...
go_forward; // 直進
} else { //線から外れれば
turn_right; //右へ ...
}
nOnline=0; //カウンタをリセット
}
Wait(STEP); ...
}
[解説]
?センサー2番にライトセンサーを接続し、使用可能状態に。
?続けて黒と判断した時にその連続回数をカウントさせる。
?連続で黒であるとnMAX回判断しない限り?〜?の動作を続けさ...
?黒であると判断したなら左へ旋回し、カウンタを1増やす。
?境界線上であれば直進させ、カウンタをリセットさせる。
?白であると判断したなら右へ旋回し、カウンタをリセットさ...
??〜?の作業をSTEP/100秒ごとに行う。
**P地点→Q地点 [#t1cbd6e4]
short_break; //小休憩
turn_left;Wait(FIX_TIME); //方向左修正 ...
short_break; //小休憩
clip_on; //捕球
turn_right;Wait(45); //方向右修正 ...
go_forward;Wait(CROSS_TIME); //前進
nOnline=0; //カウンタをリセット
while (nOnline <nMAX) { ...
if (SENSOR_2 < BLACK){ // 線上なら ...
turn_left; // 左へ
nOnline++; //カウンタ増やす
} else {
if (SENSOR_2 < WHITE){ /...
go_forward; // 直進
} else { //線から外れれば
turn_right; //右へ ...
}
nOnline=0; //カウンタをリセット
}
Wait(STEP); ...
}
[解説]
?捕球できる角度に調整
?ライントレースを再開するために角度を修正
?〜?
A地点→P地点の?〜?と同じ
**Q地点→B地点 [#rf7b7491]
short_break; //小休憩
turn_right;Wait(FIX_TIME); //方向修正 ...
cross_line; //交差点を渡る ...
nOnline=0; //カウンタをリセット
while (nOnline <nMAX) { ...
if (SENSOR_2 < BLACK){ // 線上なら ...
turn_left; // 左へ
nOnline++; //カウンタ増やす
} else {
if (SENSOR_2 < WHITE){ /...
go_forward; // 直進
} else { //線から外れれば
turn_right; //右へ ...
}
nOnline=0; //カウンタをリセット
}
Wait(STEP); ...
}
short_break; //小休憩
turn_right;Wait(FIX_TIME); //方向修正 ...
shoot; //シュート
Off(OUT_AC); //停止
nOnline=0; //カウンタをリセット
}
[解説]
?交差点と判断した時には8/100秒分反時計回りをしているので...
?交差点を通過し、元のライントレースへ戻す。
?〜?
A地点→P地点の?〜?と同じ
?ゴールの方向へ角度を調整
*実際にロボットを動かしている動画 [#c432960a]
https://www.youtube.com/watch?v=MteH8fCbr5g
*反省,感想 [#i5496406]
前の課題の時もそうだったが、ロボットの構造を決定するのに...
ページ名: