2015b/Member/A.T.9/Mission3
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2015b/MemberOnly]]
目次
#contents
*はじめに [#g8e6b645]
今回の課題のテーマは、「ボールを離れた場所から缶に当て、...
*課題とルール [#rf59c445]
課題:点P、Qのボールをセンターラインを越えずに缶に当てる...
&ref(2015b/Member/A.T.9/Mission3/2015b-mission3.png);
ルール
+競技時間はロボットAがSTART A地点のスタートラインを横切っ...
+ロボットAはSTART A地点から出発し、P地点におかれた赤いボ...
+アルミ缶は中身が入っているものを使う
+ボールがアルミ缶に当たる前にロボットBがボールに触っては...
+ロボットAはセンターラインを超えては行けない。
+アルミ缶を5cm以上動かした場合は減点
*投げて側ロボットの説明 [#ja7635eb]
これが製作したロボットである。
&ref(2015b/Member/A.T.9/Mission3/IMG_2697.jpg);
**ロボットの全体の動作・役割 [#p673daa4]
超音波センサー
ボールと缶の位置を検知するのに使用する。今回の課題をクリ...
捜索したい範囲を決め、その捜索した範囲内で1番近い障害物...
&ref(2015b/Member/A.T.9/Mission3/IMG_2702-1.jpg);
ボールをつかむ、投げる動作
ボールの位置を検知し近づいた後、ボールをつかむ、そして、...
&ref(2015b/Member/A.T.9/Mission3/IMG_2699-1.jpg);
&ref(2015b/Member/A.T.9/Mission3/IMG_2700-1.jpg);
光センサー
二つ目のボールを見つける際にライントレースをするため使用...
&ref(2015b/Member/A.T.9/Mission3/IMG_2696-1.jpg);
**受け手側のロボット [#b81046fe]
以下のロボットが相方のチームが作成した、ボールを受け取る...
&ref(2015b/Member/A.T.9/Mission3/IMG_2704-1.jpg);
青いまるで囲まれたのが超音波センサーであり、ボールが通過...
*プログラムの説明 [#vc213b68]
#define SPEED 50 // 速度 速50の定義
#define SPEED_SLOW 30 // 速度 遅30の定義
const float diameter = 5.45; // タイヤの直径(?)
const float track = 10.35; // タイヤのトレッド幅(...
const float pi = 3.1415; // 円周率
void fwdDist (float d){ // dセンチ前進
long angle;
angle = d / (diameter * pi) * 360.0;
RotateMotorEx(OUT_AC,SPEED_SLOW,angle,0,true,true);
}
void turnAng(long ang){ // 角度ang度の時計回りの旋回
long angle ;
angle = track/diameter*ang;
RotateMotorEx(OUT_AC,SPEED_SLOW,angle,100,true,true);
}
以下のプログラムがボールを探すものである。今回の課題で一...
<一番近い障害物の探し方>
int searchDirection(long ang){ // ボールを探してその方...
long angle, tacho_min;
int d_min;
d_min = 300; // 仮の最...
tacho_min = 0;
まず、角度を指定しその角度の半分を時計回りに旋回する。
angle = (track / diameter) * ang; // 角度か...
turnAng(ang / 2); // 指定さ...
ResetTachoCount(OUT_A); // 角度計...
その後、指定した角度分反時計回りに旋回する。旋回している...
OnFwdSync(OUT_AC,SPEED_SLOW,-100); // 反時計...
while(MotorTachoCount(OUT_A) <= angle){
if(SensorUS(S3) < d_min){
d_min = SensorUS(S3); // 仮の最小値を更新
tacho_min = MotorTachoCount(OUT_A);
}
}
指定した角度を旋回したのち、”d_minに代入された場所=障害物...
OnFwdSyncEx(OUT_AC,SPEED_SLOW,100,RESET_NONE);
until(MotorTachoCount(OUT_A) <= tacho_min || SensorUS(S3...
Wait(15); //微調整
Off(OUT_AC);
Wait(500);
return d_min;
}
void searchDirection2(long ang){ // 缶を探...
long angle, tacho_min;
int d_min;
d_min = 300;
tacho_min = 0;
angle = (track / diameter) * ang;
turnAng(ang/2);
ResetTachoCount(OUT_C);
OnFwdSync(OUT_AC,SPEED_SLOW,-100);
while(MotorTachoCount(OUT_C) >= angle*-1){
if(SensorUS(S3) < d_min){
d_min = SensorUS(S3);
tacho_min = MotorTachoCount(OUT_C);
}
}
OnFwdSyncEx(OUT_AC,SPEED_SLOW,100,RESET_NONE);
until(MotorTachoCount(OUT_C) >= tacho_min || SensorUS(S3...
Wait(15);
Off(OUT_AC);
Wait(500);
}
void line () { // ライントレースのプログラム
float d;
int S = 0; // 交差...
SetSensorLight(S2);
long t_L = CurrentTick();
while(S<3){
while(CurrentTick() - t_L <= 170) { //右旋回の時間...
...
if (SENSOR_2 < 30) {
OnFwd(OUT_C,30);
OnRev(OUT_A,25);
} else if (SENSOR_2 < 38) {
OnFwd(OUT_C,30);
Off(OUT_A);
} else if (SENSOR_2 < 52) {
OnFwd(OUT_AC,30);
t_L = CurrentTick();
} else if (SENSOR_2 < 60) {
OnFwd(OUT_A,30);
Off(OUT_C);
t_L = CurrentTick();
} else {
OnFwd(OUT_A,30);
OnRev(OUT_C,25);
t_L = CurrentTick();
}
Wait(1);
}
S++;
if(S==1){ // 交差点1回目(点P)を左折
Off(OUT_AC); // Q点のボールを狙う
Wait(1000);
RotateMotor(OUT_A,SPEED,210);
OnFwdSync(OUT_AC,SPEED_SLOW,0);
Wait(1000);
d = searchDirection(120); // Q点2つ目のボ...
fwdDist(d - 8.0); // 8cm手前で止...
RotateMotor(OUT_C,SPEED_SLOW,150); // 拾う前微調整()
RotateMotor(OUT_B,33,80); // アームを少し閉じる
OnFwdSync(OUT_AC,SPEED,0); // ボール拾い
Wait(450);
RotateMotor(OUT_B,33,80);
Off(OUT_AC);
t_L = CurrentTick();
} else if(S==2){ // 交差点2回目でライント...
break;
}
}
}
task main(){
SetSensorLowspeed(S3); // 超音波セン...
SetSensorLight(S2); // 光センサー...
int mail = 0;
int d = searchDirection(120); // ボール探し
fwdDist(d - 8.0);
RotateMotor(OUT_C,SPEED_SLOW,125); // 拾う前微調整
OnFwdSync(OUT_AC,SPEED,0); // ボール拾い
Wait(450);
RotateMotor(OUT_B,33,80); // ボールつ...
Off(OUT_AC);
fwdDist(-5); //つかんだ後5...
RotateMotor(OUT_C,SPEED_SLOW,-300); // 缶付近に...
OnFwdSync(OUT_AC,SPEED,0);
Wait(1800);
searchDirection2(90); // 角度合わせ
RotateMotor(OUT_C,SPEED_SLOW,90); // 発射前微調整(超...
ブルートゥースで受け取り側ロボットにメッセージを送る。(...
SendRemoteNumber(1,MAILBOX1,10); // キャッチ側を移動さ...
while(mail != 20){ // キャッチ準備完了待ち
Off(OUT_ABC);
Wait(1);
ReceiveRemoteNumber(MAILBOX1,false,mail);
}
OnFwd(OUT_B,-70); // ボール発射
Wait(800);
Off(OUT_B);
turnAng(210); // 210度旋回しライントレース準備のため...
OnFwd(OUT_AC,1);
Wait(1);
OnFwd(OUT_A,SPEED_SLOW);
OnFwd(OUT_C,SPEED_SLOW - 3);
until(SENSOR_2 < 40);
Off(OUT_A);
line(); // ライントレース
Off(OUT_ABC);
}
**ブルートゥースの説明 [#n7f13714]
上記 task main ()の中からブルートゥースのプログラムの部...
投げて側が親、受け取り側が子となり、親がボールを発射する...
以下は、プログラム内容
受け取り側にメッセージを送信し、投げて側はその場で待機す...
SendRemoteNumber(1,MAILBOX1,10); // キャッチ側を移動さ...
while(mail != 20){ // キャッチ準備完了待ち
Off(OUT_ABC);
Wait(1);
ここで、受け取る準備が出来次第、投げて側に以下のメッセー...
ReceiveRemoteNumber(MAILBOX1,false,mail);
これを受け取り次第、投げて側は缶に向かってボールを投げる。
*工夫点 [#m06927d2]
1.投げる動作
ボールを投げる側のロボットはボールを”確実に”つかみ・遠く...
2.超音波センサーを使用すること。
時間・角度に頼りすぎると微調整が多くなったり、電池の消耗...
3.同期させる
ボール・缶を探す際、近くに受け取り側ロボットに来られてし...
また、なげる側と受け取る側のロボットの動作に正確性がでる...
*改善点 [#i302e617]
+ボールの位置を検知できない。
ボールが小さいため、探索中は遅く旋回させ、さらに一番長い...
*考察 [#r67bf01b]
全体の結果的には投げる側と受け取る側のロボットがしっかり...
投げる側のロボットの結果としては、スタートしたのちボール...
*感想 [#z18e9edd]
最後の課題のこのロボコンで、角度センサー・光センサー・超...
終了行:
[[2015b/MemberOnly]]
目次
#contents
*はじめに [#g8e6b645]
今回の課題のテーマは、「ボールを離れた場所から缶に当て、...
*課題とルール [#rf59c445]
課題:点P、Qのボールをセンターラインを越えずに缶に当てる...
&ref(2015b/Member/A.T.9/Mission3/2015b-mission3.png);
ルール
+競技時間はロボットAがSTART A地点のスタートラインを横切っ...
+ロボットAはSTART A地点から出発し、P地点におかれた赤いボ...
+アルミ缶は中身が入っているものを使う
+ボールがアルミ缶に当たる前にロボットBがボールに触っては...
+ロボットAはセンターラインを超えては行けない。
+アルミ缶を5cm以上動かした場合は減点
*投げて側ロボットの説明 [#ja7635eb]
これが製作したロボットである。
&ref(2015b/Member/A.T.9/Mission3/IMG_2697.jpg);
**ロボットの全体の動作・役割 [#p673daa4]
超音波センサー
ボールと缶の位置を検知するのに使用する。今回の課題をクリ...
捜索したい範囲を決め、その捜索した範囲内で1番近い障害物...
&ref(2015b/Member/A.T.9/Mission3/IMG_2702-1.jpg);
ボールをつかむ、投げる動作
ボールの位置を検知し近づいた後、ボールをつかむ、そして、...
&ref(2015b/Member/A.T.9/Mission3/IMG_2699-1.jpg);
&ref(2015b/Member/A.T.9/Mission3/IMG_2700-1.jpg);
光センサー
二つ目のボールを見つける際にライントレースをするため使用...
&ref(2015b/Member/A.T.9/Mission3/IMG_2696-1.jpg);
**受け手側のロボット [#b81046fe]
以下のロボットが相方のチームが作成した、ボールを受け取る...
&ref(2015b/Member/A.T.9/Mission3/IMG_2704-1.jpg);
青いまるで囲まれたのが超音波センサーであり、ボールが通過...
*プログラムの説明 [#vc213b68]
#define SPEED 50 // 速度 速50の定義
#define SPEED_SLOW 30 // 速度 遅30の定義
const float diameter = 5.45; // タイヤの直径(?)
const float track = 10.35; // タイヤのトレッド幅(...
const float pi = 3.1415; // 円周率
void fwdDist (float d){ // dセンチ前進
long angle;
angle = d / (diameter * pi) * 360.0;
RotateMotorEx(OUT_AC,SPEED_SLOW,angle,0,true,true);
}
void turnAng(long ang){ // 角度ang度の時計回りの旋回
long angle ;
angle = track/diameter*ang;
RotateMotorEx(OUT_AC,SPEED_SLOW,angle,100,true,true);
}
以下のプログラムがボールを探すものである。今回の課題で一...
<一番近い障害物の探し方>
int searchDirection(long ang){ // ボールを探してその方...
long angle, tacho_min;
int d_min;
d_min = 300; // 仮の最...
tacho_min = 0;
まず、角度を指定しその角度の半分を時計回りに旋回する。
angle = (track / diameter) * ang; // 角度か...
turnAng(ang / 2); // 指定さ...
ResetTachoCount(OUT_A); // 角度計...
その後、指定した角度分反時計回りに旋回する。旋回している...
OnFwdSync(OUT_AC,SPEED_SLOW,-100); // 反時計...
while(MotorTachoCount(OUT_A) <= angle){
if(SensorUS(S3) < d_min){
d_min = SensorUS(S3); // 仮の最小値を更新
tacho_min = MotorTachoCount(OUT_A);
}
}
指定した角度を旋回したのち、”d_minに代入された場所=障害物...
OnFwdSyncEx(OUT_AC,SPEED_SLOW,100,RESET_NONE);
until(MotorTachoCount(OUT_A) <= tacho_min || SensorUS(S3...
Wait(15); //微調整
Off(OUT_AC);
Wait(500);
return d_min;
}
void searchDirection2(long ang){ // 缶を探...
long angle, tacho_min;
int d_min;
d_min = 300;
tacho_min = 0;
angle = (track / diameter) * ang;
turnAng(ang/2);
ResetTachoCount(OUT_C);
OnFwdSync(OUT_AC,SPEED_SLOW,-100);
while(MotorTachoCount(OUT_C) >= angle*-1){
if(SensorUS(S3) < d_min){
d_min = SensorUS(S3);
tacho_min = MotorTachoCount(OUT_C);
}
}
OnFwdSyncEx(OUT_AC,SPEED_SLOW,100,RESET_NONE);
until(MotorTachoCount(OUT_C) >= tacho_min || SensorUS(S3...
Wait(15);
Off(OUT_AC);
Wait(500);
}
void line () { // ライントレースのプログラム
float d;
int S = 0; // 交差...
SetSensorLight(S2);
long t_L = CurrentTick();
while(S<3){
while(CurrentTick() - t_L <= 170) { //右旋回の時間...
...
if (SENSOR_2 < 30) {
OnFwd(OUT_C,30);
OnRev(OUT_A,25);
} else if (SENSOR_2 < 38) {
OnFwd(OUT_C,30);
Off(OUT_A);
} else if (SENSOR_2 < 52) {
OnFwd(OUT_AC,30);
t_L = CurrentTick();
} else if (SENSOR_2 < 60) {
OnFwd(OUT_A,30);
Off(OUT_C);
t_L = CurrentTick();
} else {
OnFwd(OUT_A,30);
OnRev(OUT_C,25);
t_L = CurrentTick();
}
Wait(1);
}
S++;
if(S==1){ // 交差点1回目(点P)を左折
Off(OUT_AC); // Q点のボールを狙う
Wait(1000);
RotateMotor(OUT_A,SPEED,210);
OnFwdSync(OUT_AC,SPEED_SLOW,0);
Wait(1000);
d = searchDirection(120); // Q点2つ目のボ...
fwdDist(d - 8.0); // 8cm手前で止...
RotateMotor(OUT_C,SPEED_SLOW,150); // 拾う前微調整()
RotateMotor(OUT_B,33,80); // アームを少し閉じる
OnFwdSync(OUT_AC,SPEED,0); // ボール拾い
Wait(450);
RotateMotor(OUT_B,33,80);
Off(OUT_AC);
t_L = CurrentTick();
} else if(S==2){ // 交差点2回目でライント...
break;
}
}
}
task main(){
SetSensorLowspeed(S3); // 超音波セン...
SetSensorLight(S2); // 光センサー...
int mail = 0;
int d = searchDirection(120); // ボール探し
fwdDist(d - 8.0);
RotateMotor(OUT_C,SPEED_SLOW,125); // 拾う前微調整
OnFwdSync(OUT_AC,SPEED,0); // ボール拾い
Wait(450);
RotateMotor(OUT_B,33,80); // ボールつ...
Off(OUT_AC);
fwdDist(-5); //つかんだ後5...
RotateMotor(OUT_C,SPEED_SLOW,-300); // 缶付近に...
OnFwdSync(OUT_AC,SPEED,0);
Wait(1800);
searchDirection2(90); // 角度合わせ
RotateMotor(OUT_C,SPEED_SLOW,90); // 発射前微調整(超...
ブルートゥースで受け取り側ロボットにメッセージを送る。(...
SendRemoteNumber(1,MAILBOX1,10); // キャッチ側を移動さ...
while(mail != 20){ // キャッチ準備完了待ち
Off(OUT_ABC);
Wait(1);
ReceiveRemoteNumber(MAILBOX1,false,mail);
}
OnFwd(OUT_B,-70); // ボール発射
Wait(800);
Off(OUT_B);
turnAng(210); // 210度旋回しライントレース準備のため...
OnFwd(OUT_AC,1);
Wait(1);
OnFwd(OUT_A,SPEED_SLOW);
OnFwd(OUT_C,SPEED_SLOW - 3);
until(SENSOR_2 < 40);
Off(OUT_A);
line(); // ライントレース
Off(OUT_ABC);
}
**ブルートゥースの説明 [#n7f13714]
上記 task main ()の中からブルートゥースのプログラムの部...
投げて側が親、受け取り側が子となり、親がボールを発射する...
以下は、プログラム内容
受け取り側にメッセージを送信し、投げて側はその場で待機す...
SendRemoteNumber(1,MAILBOX1,10); // キャッチ側を移動さ...
while(mail != 20){ // キャッチ準備完了待ち
Off(OUT_ABC);
Wait(1);
ここで、受け取る準備が出来次第、投げて側に以下のメッセー...
ReceiveRemoteNumber(MAILBOX1,false,mail);
これを受け取り次第、投げて側は缶に向かってボールを投げる。
*工夫点 [#m06927d2]
1.投げる動作
ボールを投げる側のロボットはボールを”確実に”つかみ・遠く...
2.超音波センサーを使用すること。
時間・角度に頼りすぎると微調整が多くなったり、電池の消耗...
3.同期させる
ボール・缶を探す際、近くに受け取り側ロボットに来られてし...
また、なげる側と受け取る側のロボットの動作に正確性がでる...
*改善点 [#i302e617]
+ボールの位置を検知できない。
ボールが小さいため、探索中は遅く旋回させ、さらに一番長い...
*考察 [#r67bf01b]
全体の結果的には投げる側と受け取る側のロボットがしっかり...
投げる側のロボットの結果としては、スタートしたのちボール...
*感想 [#z18e9edd]
最後の課題のこのロボコンで、角度センサー・光センサー・超...
ページ名: