2015b/Member/North/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
* ルール [#i0c03715]
#ref(2015b/Member/North/Mission2/2015b-mission2.png,100%)
上図のコースを~
B → P右折 → Q右折 → P左折 → Q左折 → Q直進 → P直進 → A~
のように走行する
* ロボット [#ea63a0d2]
#ref(2015b/Member/North/Mission2/IMG_1320.JPG,50%)
特に工夫等はなし。光センサーを取り付けただけ
* プログラム [#c0117fed]
#define SPEED 30
#define go_forward OnFwd(OUT_BC,SPEED);
#define turn_left OnFwd(OUT_B,SPEED);Off(OUT_C);
#define turn_right OnFwd(OUT_C,SPEED);Off(OUT_B);
#define turn_left2 OnFwd(OUT_B,SPEED);OnRev(OUT_C,SPEED);
#define turn_right2 OnFwd(OUT_C,SPEED);OnRev(OUT_B,SPEED);
#define STEP 50 //ライントレースの回数
#define TMAX 150 //旋回する最大の時間
task main()
{
SetSensorLight(S1);
long t = CurrentTick();
int n=0; //交差点を通過する回数
while(true){
while(CurrentTick()-t<TMAX){
if(SENSOR_1<30){
turn_left2;
}else if(SENSOR_1<35){
turn_left;
t = CurrentTick();
}else if(SENSOR_1<40){
go_forward;
t = CurrentTick();
}else if(SENSOR_1<45){
turn_right;
t = CurrentTick();
}else{
turn_right2;
t = CurrentTick();
}
}
if(n<2){
Off(OUT_BC);
Wait(1000);
turn_right; //交差点を右折
until(SENSOR_1>50);
n++;
t = CurrentTick();
}else if(n<7){
Off(OUT_BC);
Wait(1000);
turn_left; //交差点を左折 直角や急カーブも含む
Wait(600);
n++;
t = CurrentTick();
}else{
Off(OUT_BC);
Wait(1000);
turn_right; //交差点を直進
Wait(600);
t = CurrentTick();
}
}
Wait(STEP);
}
* 感想 [#q50314ed]
単純なライントレースではなく、回数などを利用するために様々なプログラムを利用したため、完全に理解しているとは言い難い状態になってしまった。~
動作の確実性にも欠けるため、どうすれば成功しやすいかをもう少し追求する必要がある。
終了行:
* ルール [#i0c03715]
#ref(2015b/Member/North/Mission2/2015b-mission2.png,100%)
上図のコースを~
B → P右折 → Q右折 → P左折 → Q左折 → Q直進 → P直進 → A~
のように走行する
* ロボット [#ea63a0d2]
#ref(2015b/Member/North/Mission2/IMG_1320.JPG,50%)
特に工夫等はなし。光センサーを取り付けただけ
* プログラム [#c0117fed]
#define SPEED 30
#define go_forward OnFwd(OUT_BC,SPEED);
#define turn_left OnFwd(OUT_B,SPEED);Off(OUT_C);
#define turn_right OnFwd(OUT_C,SPEED);Off(OUT_B);
#define turn_left2 OnFwd(OUT_B,SPEED);OnRev(OUT_C,SPEED);
#define turn_right2 OnFwd(OUT_C,SPEED);OnRev(OUT_B,SPEED);
#define STEP 50 //ライントレースの回数
#define TMAX 150 //旋回する最大の時間
task main()
{
SetSensorLight(S1);
long t = CurrentTick();
int n=0; //交差点を通過する回数
while(true){
while(CurrentTick()-t<TMAX){
if(SENSOR_1<30){
turn_left2;
}else if(SENSOR_1<35){
turn_left;
t = CurrentTick();
}else if(SENSOR_1<40){
go_forward;
t = CurrentTick();
}else if(SENSOR_1<45){
turn_right;
t = CurrentTick();
}else{
turn_right2;
t = CurrentTick();
}
}
if(n<2){
Off(OUT_BC);
Wait(1000);
turn_right; //交差点を右折
until(SENSOR_1>50);
n++;
t = CurrentTick();
}else if(n<7){
Off(OUT_BC);
Wait(1000);
turn_left; //交差点を左折 直角や急カーブも含む
Wait(600);
n++;
t = CurrentTick();
}else{
Off(OUT_BC);
Wait(1000);
turn_right; //交差点を直進
Wait(600);
t = CurrentTick();
}
}
Wait(STEP);
}
* 感想 [#q50314ed]
単純なライントレースではなく、回数などを利用するために様々なプログラムを利用したため、完全に理解しているとは言い難い状態になってしまった。~
動作の確実性にも欠けるため、どうすれば成功しやすいかをもう少し追求する必要がある。
ページ名: