2015a/Member/Daitoku/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2015a/Member]]
*ロボット本体の説明 [#r3161fd2]
#ref(2015a/Member/Daitoku/Mission2/robotto0.JPG,8%,robott...
~
#ref(2015a/Member/Daitoku/Mission2/robotto1.JPG,8%,robott...
~上の写真が自分たちの作ったロボットです。
~課題はライントレースで、ピンポン玉を運び、ゴールに入れる...
~タッチセンサーは使わずに、光センサーをロボットの中央下部...
~
#ref(2015a/Member/Daitoku/Mission2/robotto2.JPG,8%,robott...
~最初は上の写真のようなロボットを作りましたが、あまりにも...
*プログラム [#b4076d98]
#define THRESHOLD 45 //閾値の基準
#define HIPOWER 7
#define LOWPOWER 2
#define set_power_H SetPower(OUT_AC,HIPOWER); //モーター...
#define set_power_L SetPower(OUT_AC,LOWPOWER); //モータ...
#define go_forward set_power_H; OnRev(OUT_AC); //前進
#define turn_left1 set_power_L; OnRev(OUT_C);OnFwd(OUT_A...
#define turn_left0 set_power_L; OnRev(OUT_C);Off(OUT_A);...
#define turn_right0 set_power_L; OnRev(OUT_A);Off(OUT_C)...
#define turn_right1 set_power_L; OnRev(OUT_A);OnFwd(OUT_...
#define STEP 1 //一回の動作時間
#define nMAX 3 //連続して左に曲がれる最大値
#define short_break Off(OUT_AC); Wait(20); //小休止
#define CROSS_TIME 30 //交差点を渡る時間
#define cross_line OnRev(OUT_AC);Wait(CROSS_TIME);short_...
#define Pmade 700
#define Pkara 900
#define Qmade 1750
#define Qkara 1950
#define Last 2750
#define ageru OnRev(OUT_B);Wait(9);Off(OUT_B); //アーム...
#define sageru OnFwd(OUT_B);Wait(12);Off(OUT_B); //アー...
#define utu OnFwd(OUT_AC);Wait(50);ageru;OnRev(OUT_AC);W...
sub line_traceN() //通常のライントレース
{
if (SENSOR_2 < THRESHOLD -8) {
turn_left1; //37未満です...
} else if (SENSOR_2 < THRESHOLD -6) {
turn_left0; //37以上39未...
} else if (SENSOR_2 < THRESHOLD -3) {
go_forward; //39以上42未...
} else if (SENSOR_2 < THRESHOLD -1) {
turn_right0; //42以上44未...
} else {
turn_right1; //それ以外で...
}
Wait(STEP);
}
sub line_traceK() //交差点のライントレース
{
int nOnline=0; //カウンタを0にする
while (nOnline < nMAX) { //黒を連...
if (SENSOR_2 < THRESHOLD-8) {
turn_left1; //37未満...
nOnline++; //カウン...
} else {
if (SENSOR_2 < THRESHOLD-6) {
turn_left0; //37以上...
} else if (SENSOR_2 < THRESHOLD-3) {
go_forward; //39以上...
} else if (SENSOR_2 < THRESHOLD-1) {
turn_right0; //42以上...
} else {
turn_right1; //それ以...
}
nOnline=0; //カウン...
}
Wait(STEP);
}
short_break; //小休止
turn_right1; Wait(nMAX*STEP); //機体を線に対してまっ...
cross_line; //交差点を渡る
nOnline=0; //カウンタを0にする
}
task main()
{
SetSensor(SENSOR_2, SENSOR_LIGHT); //光センサーを2に接続
ClearTimer(0); //タイマーで時間の計測開始
while(FastTimer(0) <= Pmade) {
line_traceN(); //スタートからP...
}
PlaySound(SOUND_UP); //音を鳴らす
while(FastTimer(0) <= Pkara) {
line_traceK(); //P交差点
}
sageru;
PlaySound(SOUND_UP);
while(FastTimer(0) <= Qmade) {
line_traceN(); //P交差点からQ...
}
PlaySound(SOUND_UP);
while(FastTimer(0) <= Qkara) {
line_traceK(); //Q交差点
}
PlaySound(SOUND_UP);
while(FastTimer(0) <= Last) {
line_traceN(); //Q交差点からゴ...
}
PlaySound(SOUND_UP);
utu; //玉を打つ
}
**プログラムの説明 [#oaf74ec8]
http://yakushi.shinshu-u.ac.jp/robotics/?plugin=ref&page=...
~自分はA点からB点を担当しました。
~モーターAは左側のタイヤ、モーターBはアーム、モーターCは...
~球の打ち出しはutuで定義し、機体全体の前進により球を打ち...
~コースを5つ(スタートからP交差点前、P交差点、P交差点からQ...
~ライントレースは二つに分け、line traceNでは通常のライン...
~閾値は45に設定し、大幅にずれたときにはAとCを共に動かし、...
~go forwardで前進し、turn left1(right1)ですばやく左(右)に...
~STEPでは一回の動作で作用させる時間、nMAXでは連続して左に...
~交差点では2秒間停止するように、short breakを定義しました。
~CROSS TIMEでは交差点を渡るのにかかる時間を定義しています。
***交差点の認識 [#ta6106d6]
~黒が連続したとき以外は通常のライントレースをします。
~センサーの値が37(THRESHOLD-8)を下回ったら、左に曲がりな...
~センサーの値が37以上のときは、カウントをリセットします。
*工夫した点 [#c6b1b018]
+光センサーとアームを機体の真ん中につけることで、ピンポン...
+アームの横にガードをつけ、球が横に逃げないようにしました。
+プログラムの切り替わりが分かりやすいように、音を鳴らすよ...
+左右の旋回をスピードによって二つに分け、よりスムーズにラ...
*苦労した点 [#a3279e54]
+コースによって時間を調節するのが難しく、思い通りにライン...
+機体が途中でピンポン玉に当たり転がってしまい、うまく回収...
+最初はピンポン玉をつかもうと考えていましたが、モーター1...
+アームの上げ下げの時間調節にも苦労しました。
*考察 [#i8191236]
~今回作成したプログラムでは、交差点用のプログラムを定義し...
終了行:
[[2015a/Member]]
*ロボット本体の説明 [#r3161fd2]
#ref(2015a/Member/Daitoku/Mission2/robotto0.JPG,8%,robott...
~
#ref(2015a/Member/Daitoku/Mission2/robotto1.JPG,8%,robott...
~上の写真が自分たちの作ったロボットです。
~課題はライントレースで、ピンポン玉を運び、ゴールに入れる...
~タッチセンサーは使わずに、光センサーをロボットの中央下部...
~
#ref(2015a/Member/Daitoku/Mission2/robotto2.JPG,8%,robott...
~最初は上の写真のようなロボットを作りましたが、あまりにも...
*プログラム [#b4076d98]
#define THRESHOLD 45 //閾値の基準
#define HIPOWER 7
#define LOWPOWER 2
#define set_power_H SetPower(OUT_AC,HIPOWER); //モーター...
#define set_power_L SetPower(OUT_AC,LOWPOWER); //モータ...
#define go_forward set_power_H; OnRev(OUT_AC); //前進
#define turn_left1 set_power_L; OnRev(OUT_C);OnFwd(OUT_A...
#define turn_left0 set_power_L; OnRev(OUT_C);Off(OUT_A);...
#define turn_right0 set_power_L; OnRev(OUT_A);Off(OUT_C)...
#define turn_right1 set_power_L; OnRev(OUT_A);OnFwd(OUT_...
#define STEP 1 //一回の動作時間
#define nMAX 3 //連続して左に曲がれる最大値
#define short_break Off(OUT_AC); Wait(20); //小休止
#define CROSS_TIME 30 //交差点を渡る時間
#define cross_line OnRev(OUT_AC);Wait(CROSS_TIME);short_...
#define Pmade 700
#define Pkara 900
#define Qmade 1750
#define Qkara 1950
#define Last 2750
#define ageru OnRev(OUT_B);Wait(9);Off(OUT_B); //アーム...
#define sageru OnFwd(OUT_B);Wait(12);Off(OUT_B); //アー...
#define utu OnFwd(OUT_AC);Wait(50);ageru;OnRev(OUT_AC);W...
sub line_traceN() //通常のライントレース
{
if (SENSOR_2 < THRESHOLD -8) {
turn_left1; //37未満です...
} else if (SENSOR_2 < THRESHOLD -6) {
turn_left0; //37以上39未...
} else if (SENSOR_2 < THRESHOLD -3) {
go_forward; //39以上42未...
} else if (SENSOR_2 < THRESHOLD -1) {
turn_right0; //42以上44未...
} else {
turn_right1; //それ以外で...
}
Wait(STEP);
}
sub line_traceK() //交差点のライントレース
{
int nOnline=0; //カウンタを0にする
while (nOnline < nMAX) { //黒を連...
if (SENSOR_2 < THRESHOLD-8) {
turn_left1; //37未満...
nOnline++; //カウン...
} else {
if (SENSOR_2 < THRESHOLD-6) {
turn_left0; //37以上...
} else if (SENSOR_2 < THRESHOLD-3) {
go_forward; //39以上...
} else if (SENSOR_2 < THRESHOLD-1) {
turn_right0; //42以上...
} else {
turn_right1; //それ以...
}
nOnline=0; //カウン...
}
Wait(STEP);
}
short_break; //小休止
turn_right1; Wait(nMAX*STEP); //機体を線に対してまっ...
cross_line; //交差点を渡る
nOnline=0; //カウンタを0にする
}
task main()
{
SetSensor(SENSOR_2, SENSOR_LIGHT); //光センサーを2に接続
ClearTimer(0); //タイマーで時間の計測開始
while(FastTimer(0) <= Pmade) {
line_traceN(); //スタートからP...
}
PlaySound(SOUND_UP); //音を鳴らす
while(FastTimer(0) <= Pkara) {
line_traceK(); //P交差点
}
sageru;
PlaySound(SOUND_UP);
while(FastTimer(0) <= Qmade) {
line_traceN(); //P交差点からQ...
}
PlaySound(SOUND_UP);
while(FastTimer(0) <= Qkara) {
line_traceK(); //Q交差点
}
PlaySound(SOUND_UP);
while(FastTimer(0) <= Last) {
line_traceN(); //Q交差点からゴ...
}
PlaySound(SOUND_UP);
utu; //玉を打つ
}
**プログラムの説明 [#oaf74ec8]
http://yakushi.shinshu-u.ac.jp/robotics/?plugin=ref&page=...
~自分はA点からB点を担当しました。
~モーターAは左側のタイヤ、モーターBはアーム、モーターCは...
~球の打ち出しはutuで定義し、機体全体の前進により球を打ち...
~コースを5つ(スタートからP交差点前、P交差点、P交差点からQ...
~ライントレースは二つに分け、line traceNでは通常のライン...
~閾値は45に設定し、大幅にずれたときにはAとCを共に動かし、...
~go forwardで前進し、turn left1(right1)ですばやく左(右)に...
~STEPでは一回の動作で作用させる時間、nMAXでは連続して左に...
~交差点では2秒間停止するように、short breakを定義しました。
~CROSS TIMEでは交差点を渡るのにかかる時間を定義しています。
***交差点の認識 [#ta6106d6]
~黒が連続したとき以外は通常のライントレースをします。
~センサーの値が37(THRESHOLD-8)を下回ったら、左に曲がりな...
~センサーの値が37以上のときは、カウントをリセットします。
*工夫した点 [#c6b1b018]
+光センサーとアームを機体の真ん中につけることで、ピンポン...
+アームの横にガードをつけ、球が横に逃げないようにしました。
+プログラムの切り替わりが分かりやすいように、音を鳴らすよ...
+左右の旋回をスピードによって二つに分け、よりスムーズにラ...
*苦労した点 [#a3279e54]
+コースによって時間を調節するのが難しく、思い通りにライン...
+機体が途中でピンポン玉に当たり転がってしまい、うまく回収...
+最初はピンポン玉をつかもうと考えていましたが、モーター1...
+アームの上げ下げの時間調節にも苦労しました。
*考察 [#i8191236]
~今回作成したプログラムでは、交差点用のプログラムを定義し...
ページ名: