2013b/Member/jogio/Mission1
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2013b/Member]]
* ロボットについて [#wd7c5b84]
#ref(2013b/Member/jogio/Mission1/image-22.jpeg,100%,コース)
今回作ったロボットは、写真のような自作のコースの黒線に沿って走るロボットです。
#ref(2013b/Member/jogio/Mission1/image-10.jpeg,100%,全体像)
こちらがロボットの全体像です。
#ref(2013b/Member/jogio/Mission1/image-11.jpeg,100%,ドライブベース)
こちらはドライブベースになります。
車輪は2つにしました。
前に少し出ている部分に光センサーを取り付けます。
#ref(2013b/Member/jogio/Mission1/image-12.jpeg,100%,ドライブベース下)
* プログラム [#k8a26194]
#define THRESHOLD 42
#define MOVE_TIME1 1385 //1番目の交差点に到着する時間
#define MOVE_TIME2 905 //2番目の交差点に到着する時間
#define MOVE_TIME3 190 //3番目の交差点に到着する時間
#define MOVE_TIME4 973 //4番目の交差点に到着する時間
#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;OnFwd(OUT_AC);
#define turn_left1 set_power_L;OnFwd(OUT_C);OnRev(OUT_A); //左旋回
#define turn_left0 set_power_L;OnFwd(OUT_C);Off(OUT_A); //左折
#define turn_right0 set_power_L;OnFwd(OUT_A);Off(OUT_C); //右折
#define turn_right1 set_power_L;OnFwd(OUT_A);OnRev(OUT_C); //右旋回
#define STEP 1 //1回の判断で動作させる時間
#define nMAX 250 //通常のカーブとして許容できる繰り返しの最大値
#define short_break Off(OUT_AC);Wait(100); //小休止
#define CROSS_TIME 45 //交差点通過にかかる時間
/*交差点を渡る*/
#define cross_line set_power_L;OnFwd(OUT_AC);Wait(CROSS_TIME);short_break;
task main()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
int nOnline=0; //続けて黒になった回数
ClearTimer(0); //0番目のタイマーをリセット
/*1番目の交差点に到着するまで、通常のライントレースをする*/
while(FastTimer(0)<=MOVE_TIME1){
if(SENSOR_2<THRESHOLD-5){
turn_left1;
}else if(SENSOR_2<THRESHOLD-3){
turn_left0;
}else if(SENSOR_2<THRESHOLD+3){
go_forward;
}else if(SENSOR_2<THRESHOLD+8){
turn_right0;
}else{
turn_right1;
}
Wait(STEP);
}
short_break; //小休止
turn_right1;Wait(30); //進行方向修正
cross_line; //交差点を渡る
nOnline=0; //カウンタをリセット
ClearTimer(0); //0番目のタイマーをリセット
/*2番目の交差点に到着するまで、通常のライントレースをする*/
while(FastTimer(0)<=MOVE_TIME2){
if(SENSOR_2<THRESHOLD-5){
turn_left1;
}else if(SENSOR_2<THRESHOLD-3){
turn_left0;
}else if(SENSOR_2<THRESHOLD+3){
go_forward;
}else if(SENSOR_2<THRESHOLD+8){
turn_right0;
}else{
turn_right1;
}
Wait(STEP);
}
short_break;
turn_right1;Wait(30);
cross_line;
nOnline=0;
ClearTimer(0); //0番目のタイマーをリセット
/*3番目の交差点に到着するまで、通常のライントレースをする*/
while(FastTimer(0)<=MOVE_TIME3){
if(SENSOR_2<THRESHOLD-5){
turn_left1;
}else if(SENSOR_2<THRESHOLD-3){
turn_left0;
}else if(SENSOR_2<THRESHOLD+3){
go_forward;
}else if(SENSOR_2<THRESHOLD+8){
turn_right0;
}else{
turn_right1;
}
Wait(STEP);
}
short_break;
turn_right1;Wait(30);
cross_line;
nOnline=0;
ClearTimer(0); //0番目のタイマーをリセット
/*4番目の交差点に到着するまで、通常のライントレースをする*/
while(FastTimer(0)<=MOVE_TIME4){
if(SENSOR_2<THRESHOLD-5){
turn_left1;
}else if(SENSOR_2<THRESHOLD-3){
turn_left0;
}else if(SENSOR_2<THRESHOLD+3){
go_forward;
}else if(SENSOR_2<THRESHOLD+8){
turn_right0;
}else{
turn_right1;
}
Wait(STEP);
}
short_break;
turn_right1;Wait(30);
cross_line;
nOnline=0;
/*ゴールまで、通常のライントレースをする*/
while(true){
while(nOnline<nMAX){
if(SENSOR_2<THRESHOLD-5){
turn_left1;
}else if(SENSOR_2<THRESHOLD-3){
turn_left0;
}else if(SENSOR_2<THRESHOLD+3){
go_forward;
}else if(SENSOR_2<THRESHOLD+8){
turn_right0;
}else{
turn_right1;
}
Wait(STEP);
}
}
}
* 工夫した点 [#r174c7ea]
-課題のコースには急なヘアピンカーブがあるので、ロボットは、上の写真のようにシンプルでコンパクトな形に作りました。車輪も小さめのものを使用し、小回りが利くようにしました。後ろにキャスターのような小さな車輪も付けようかと思っていましたが、なくてもロボットの動きには問題がなかったので、後ろには車輪は付けないことにしました。
-光センサーはなるべく本体の近くに付けたかったので、ドライブベースの構造も工夫しました。
-プログラムについては、交差点に到着する時間を計り、交差点を渡れるようにしました。
* 反省点 [#d5c6e989]
コースを一周させるのに苦労し、空き缶を動かすプログラムを作る時間がほとんどない状態になってしまいました。一周させるのに精一杯でした。
終了行:
[[2013b/Member]]
* ロボットについて [#wd7c5b84]
#ref(2013b/Member/jogio/Mission1/image-22.jpeg,100%,コース)
今回作ったロボットは、写真のような自作のコースの黒線に沿って走るロボットです。
#ref(2013b/Member/jogio/Mission1/image-10.jpeg,100%,全体像)
こちらがロボットの全体像です。
#ref(2013b/Member/jogio/Mission1/image-11.jpeg,100%,ドライブベース)
こちらはドライブベースになります。
車輪は2つにしました。
前に少し出ている部分に光センサーを取り付けます。
#ref(2013b/Member/jogio/Mission1/image-12.jpeg,100%,ドライブベース下)
* プログラム [#k8a26194]
#define THRESHOLD 42
#define MOVE_TIME1 1385 //1番目の交差点に到着する時間
#define MOVE_TIME2 905 //2番目の交差点に到着する時間
#define MOVE_TIME3 190 //3番目の交差点に到着する時間
#define MOVE_TIME4 973 //4番目の交差点に到着する時間
#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;OnFwd(OUT_AC);
#define turn_left1 set_power_L;OnFwd(OUT_C);OnRev(OUT_A); //左旋回
#define turn_left0 set_power_L;OnFwd(OUT_C);Off(OUT_A); //左折
#define turn_right0 set_power_L;OnFwd(OUT_A);Off(OUT_C); //右折
#define turn_right1 set_power_L;OnFwd(OUT_A);OnRev(OUT_C); //右旋回
#define STEP 1 //1回の判断で動作させる時間
#define nMAX 250 //通常のカーブとして許容できる繰り返しの最大値
#define short_break Off(OUT_AC);Wait(100); //小休止
#define CROSS_TIME 45 //交差点通過にかかる時間
/*交差点を渡る*/
#define cross_line set_power_L;OnFwd(OUT_AC);Wait(CROSS_TIME);short_break;
task main()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
int nOnline=0; //続けて黒になった回数
ClearTimer(0); //0番目のタイマーをリセット
/*1番目の交差点に到着するまで、通常のライントレースをする*/
while(FastTimer(0)<=MOVE_TIME1){
if(SENSOR_2<THRESHOLD-5){
turn_left1;
}else if(SENSOR_2<THRESHOLD-3){
turn_left0;
}else if(SENSOR_2<THRESHOLD+3){
go_forward;
}else if(SENSOR_2<THRESHOLD+8){
turn_right0;
}else{
turn_right1;
}
Wait(STEP);
}
short_break; //小休止
turn_right1;Wait(30); //進行方向修正
cross_line; //交差点を渡る
nOnline=0; //カウンタをリセット
ClearTimer(0); //0番目のタイマーをリセット
/*2番目の交差点に到着するまで、通常のライントレースをする*/
while(FastTimer(0)<=MOVE_TIME2){
if(SENSOR_2<THRESHOLD-5){
turn_left1;
}else if(SENSOR_2<THRESHOLD-3){
turn_left0;
}else if(SENSOR_2<THRESHOLD+3){
go_forward;
}else if(SENSOR_2<THRESHOLD+8){
turn_right0;
}else{
turn_right1;
}
Wait(STEP);
}
short_break;
turn_right1;Wait(30);
cross_line;
nOnline=0;
ClearTimer(0); //0番目のタイマーをリセット
/*3番目の交差点に到着するまで、通常のライントレースをする*/
while(FastTimer(0)<=MOVE_TIME3){
if(SENSOR_2<THRESHOLD-5){
turn_left1;
}else if(SENSOR_2<THRESHOLD-3){
turn_left0;
}else if(SENSOR_2<THRESHOLD+3){
go_forward;
}else if(SENSOR_2<THRESHOLD+8){
turn_right0;
}else{
turn_right1;
}
Wait(STEP);
}
short_break;
turn_right1;Wait(30);
cross_line;
nOnline=0;
ClearTimer(0); //0番目のタイマーをリセット
/*4番目の交差点に到着するまで、通常のライントレースをする*/
while(FastTimer(0)<=MOVE_TIME4){
if(SENSOR_2<THRESHOLD-5){
turn_left1;
}else if(SENSOR_2<THRESHOLD-3){
turn_left0;
}else if(SENSOR_2<THRESHOLD+3){
go_forward;
}else if(SENSOR_2<THRESHOLD+8){
turn_right0;
}else{
turn_right1;
}
Wait(STEP);
}
short_break;
turn_right1;Wait(30);
cross_line;
nOnline=0;
/*ゴールまで、通常のライントレースをする*/
while(true){
while(nOnline<nMAX){
if(SENSOR_2<THRESHOLD-5){
turn_left1;
}else if(SENSOR_2<THRESHOLD-3){
turn_left0;
}else if(SENSOR_2<THRESHOLD+3){
go_forward;
}else if(SENSOR_2<THRESHOLD+8){
turn_right0;
}else{
turn_right1;
}
Wait(STEP);
}
}
}
* 工夫した点 [#r174c7ea]
-課題のコースには急なヘアピンカーブがあるので、ロボットは、上の写真のようにシンプルでコンパクトな形に作りました。車輪も小さめのものを使用し、小回りが利くようにしました。後ろにキャスターのような小さな車輪も付けようかと思っていましたが、なくてもロボットの動きには問題がなかったので、後ろには車輪は付けないことにしました。
-光センサーはなるべく本体の近くに付けたかったので、ドライブベースの構造も工夫しました。
-プログラムについては、交差点に到着する時間を計り、交差点を渡れるようにしました。
* 反省点 [#d5c6e989]
コースを一周させるのに苦労し、空き缶を動かすプログラムを作る時間がほとんどない状態になってしまいました。一周させるのに精一杯でした。
ページ名: