2016a/Member/Ari/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2016a/Member]]
*目次 [#l2279707]
#contents
*課題 [#o9e55d5b]
下の図のようなコースを各チームで作成し、
「ミッション」を遂行するためのロボットを作成せよ。
#ref(2016a-mission2-.png)
黒線の幅は20mmでなるべく均等な濃さにすること。
↓↓「ミッション」↓↓
次の経路を黒い線にそって動くロボットを作成する
ただし、なるべく速く正確に動くロボットになるように工夫して、
交差点では1秒間停止すること。
•C地点からA地点へ (三人目)
◦C地点 → S左折 → P左折 → Q直進 → Q直進 → R右折 → P左折 → A地点
#ref(2016a-mission2- - コピー (7).png)
*ロボット本体の説明 [#yb2c36ad]
下の画像のように、ロボット本体の前方に光センサーを取り付けた
前回同様、モーターB,Cでタイヤを動かしている
http://yakushi.shinshu-u.ac.jp/robotics/?plugin=attach&refer=2016a%2FMember%2FEtu%2FMission2&openfile=%A5%ED%A5%DC%CB%DC%C2%CE.JPG
*プログラムの説明 [#rdd5a4c5]
今回使用した定義はこれらである
#define THRES1 38
#define THRES2 43
#define THRES3 53
#define THRES4 59
#define SPEED_H 30
#define SPEED_L 15
#define TIME_CROSS 230
#define move_RL(speedR,speedL) OnFwd(OUT_B,speedR);OnFwd(OUT_C,speedL);
#define STEP 1
#define nMAX 300
#define breaking Off(OUT_BC); Wait(500);
サブルーチンはこちら
sub go_forward()
{
move_RL(SPEED_H,SPEED_H);
} //直進
sub turn_left_A()
{
move_RL(SPEED_L,0);
} //左折
sub turn_left_B()
{
move_RL(SPEED_L,-SPEED_L);
} //左旋回
sub turn_right_A()
{
move_RL(0, SPEED_L);
} //右折
sub turn_right_B()
{
move_RL(-SPEED_L,SPEED_L);
} //右旋回
sub cross_line()
{
move_RL(SPEED_H,SPEED_H);Wait(TIME_CROSS);breaking;
} //交差点直進
task main ()
{
SetSensorLight(S1);
int n_black=0;
int m_kousa=0;
下のプログラムはライントレースしつつ交差点に差し掛かると左折するプログラムである
僕のコースでは、c地点からはじまり、S交差点とP交差点で左折をするので
リピートを使って二回繰り返した
repeat(2){
while (n_black < nMAX) {
if (SENSOR_1 < THRES1) {
turn_left_B();
n_black++;
} else {
if (SENSOR_1 < THRES2) {
turn_left_A();
} else if (SENSOR_1 < THRES3) {
go_forward();
} else if (SENSOR_1 < THRES4) {
turn_right_A();
} else {
turn_right_B();
}
n_black=0;
}
Wait(STEP);
}
breaking;
PlaySound(SOUND_DOWN);
turn_left_B();
Wait(1500);
n_black=0;
}
下のプログラムはライントレースしつつ交差点に差し掛かると直進するプログラムである
P交差点を左折したあと、Q交差点をぐるっと2回通りすぎるコースなので
ここでもリピートを使って2回繰り返した
repeat(2) {
while (n_black < nMAX) {
if (SENSOR_1 < THRES1) {
turn_left_B();
n_black++;
} else {
if (SENSOR_1 < THRES2) {
turn_left_A();
} else if (SENSOR_1 < THRES3) {
go_forward();
} else if (SENSOR_1 < THRES4) {
turn_right_A();
} else {
turn_right_B();
}
n_black=0;
}
Wait(STEP);
}
breaking;
PlaySound(SOUND_DOUBLE_BEEP);
cross_line();
n_black=0;
}
下のプログラムはライントレースしつつ交差点に差し掛かると右折するプログラムである
Q交差点を2回通りすぎたあと、R交差点を右折するコースなので、ここで使った
while (n_black < nMAX) {
if (SENSOR_1 < THRES1) {
turn_left_B();
n_black++;
} else {
if (SENSOR_1 < THRES2) {
turn_left_A();
} else if (SENSOR_1 < THRES3) {
go_forward();
} else if (SENSOR_1 < THRES4) {
turn_right_A();
} else {
turn_right_B();
}
n_black=0;
}
Wait(STEP);
}
breaking;
PlaySound(SOUND_DOWN);
move_RL(0,20);
Wait(1500);
n_black=0;
下のプログラムは最初に使った、
ライントレースしつつ交差点に差し掛かると左折するプログラムである
R交差点を右折したあと、P交差点を左折するために使った
while (n_black < nMAX) {
if (SENSOR_1 < THRES1) {
turn_left_B();
n_black++;
} else {
if (SENSOR_1 < THRES2) {
turn_left_A();
} else if (SENSOR_1 < THRES3) {
go_forward();
} else if (SENSOR_1 < THRES4) {
turn_right_A();
} else {
turn_right_B();
}
n_black=0;
}
Wait(STEP);
}
breaking;
PlaySound(SOUND_DOUBLE_BEEP);
turn_left_B();
Wait(1500);
n_black=0;
下のプログラムはこれも最初に使った
ライントレースしつつ交差点に差し掛かると直進するプログラムであるが
最後にA地点で止まるために1.8秒間直進するプログラムを組み込んだ
P交差点を左折したあとAの場所を交差点とみなし、
A地点で止まるために使った
while (n_black < nMAX) {
if (SENSOR_1 < THRES1) {
turn_left_B();
n_black++;
} else {
if (SENSOR_1 < THRES2) {
turn_left_A();
} else if (SENSOR_1 < THRES3) {
go_forward();
} else if (SENSOR_1 < THRES4) {
turn_right_A();
} else {
turn_right_B();
}
n_black=0;
}
Wait(STEP);
}
breaking;
go_forward();
Wait(1800);
Off(OUT_BC);
}
*課題結果 [#h0c85155]
cコースをすべての交差点を認識しゴールまでたどり着くことはできた
が、成功率は五分五分といった感じだった
また少し時間がかかりすぎた
もっと早く進ませることができたかもしれない
さらに言うと、サブルーチンの関係でプログラム全体が長ったらしくなってしまった
ライントレースのサブルーチンをつくってやるともっと短く出来たかもしれない
タイムは2分32秒だった
*苦労した点 [#mc604dcd]
しきい値の調整に苦労した
また、交差点を認識させるのが難しく
特にR交差点→P交差点→A地点の時のP交差点の認識がうまくいかないことが多かったのと
Q交差点→R交差点→P交差点の時のR交差点は右折で、
今回のライントレースは先の左側をベースにしていたので
右折するとなると曲がる距離の関係でモーターの出力をすこし上げなければならなくて
その調整にも苦労した
*感想 [#mf5546d8]
今回は全体的にプログラムが長くなってしまった
交差点の認識などもむずかしく、友達と協力しながら出来たのはよかった。
終了行:
[[2016a/Member]]
*目次 [#l2279707]
#contents
*課題 [#o9e55d5b]
下の図のようなコースを各チームで作成し、
「ミッション」を遂行するためのロボットを作成せよ。
#ref(2016a-mission2-.png)
黒線の幅は20mmでなるべく均等な濃さにすること。
↓↓「ミッション」↓↓
次の経路を黒い線にそって動くロボットを作成する
ただし、なるべく速く正確に動くロボットになるように工夫して、
交差点では1秒間停止すること。
•C地点からA地点へ (三人目)
◦C地点 → S左折 → P左折 → Q直進 → Q直進 → R右折 → P左折 → A地点
#ref(2016a-mission2- - コピー (7).png)
*ロボット本体の説明 [#yb2c36ad]
下の画像のように、ロボット本体の前方に光センサーを取り付けた
前回同様、モーターB,Cでタイヤを動かしている
http://yakushi.shinshu-u.ac.jp/robotics/?plugin=attach&refer=2016a%2FMember%2FEtu%2FMission2&openfile=%A5%ED%A5%DC%CB%DC%C2%CE.JPG
*プログラムの説明 [#rdd5a4c5]
今回使用した定義はこれらである
#define THRES1 38
#define THRES2 43
#define THRES3 53
#define THRES4 59
#define SPEED_H 30
#define SPEED_L 15
#define TIME_CROSS 230
#define move_RL(speedR,speedL) OnFwd(OUT_B,speedR);OnFwd(OUT_C,speedL);
#define STEP 1
#define nMAX 300
#define breaking Off(OUT_BC); Wait(500);
サブルーチンはこちら
sub go_forward()
{
move_RL(SPEED_H,SPEED_H);
} //直進
sub turn_left_A()
{
move_RL(SPEED_L,0);
} //左折
sub turn_left_B()
{
move_RL(SPEED_L,-SPEED_L);
} //左旋回
sub turn_right_A()
{
move_RL(0, SPEED_L);
} //右折
sub turn_right_B()
{
move_RL(-SPEED_L,SPEED_L);
} //右旋回
sub cross_line()
{
move_RL(SPEED_H,SPEED_H);Wait(TIME_CROSS);breaking;
} //交差点直進
task main ()
{
SetSensorLight(S1);
int n_black=0;
int m_kousa=0;
下のプログラムはライントレースしつつ交差点に差し掛かると左折するプログラムである
僕のコースでは、c地点からはじまり、S交差点とP交差点で左折をするので
リピートを使って二回繰り返した
repeat(2){
while (n_black < nMAX) {
if (SENSOR_1 < THRES1) {
turn_left_B();
n_black++;
} else {
if (SENSOR_1 < THRES2) {
turn_left_A();
} else if (SENSOR_1 < THRES3) {
go_forward();
} else if (SENSOR_1 < THRES4) {
turn_right_A();
} else {
turn_right_B();
}
n_black=0;
}
Wait(STEP);
}
breaking;
PlaySound(SOUND_DOWN);
turn_left_B();
Wait(1500);
n_black=0;
}
下のプログラムはライントレースしつつ交差点に差し掛かると直進するプログラムである
P交差点を左折したあと、Q交差点をぐるっと2回通りすぎるコースなので
ここでもリピートを使って2回繰り返した
repeat(2) {
while (n_black < nMAX) {
if (SENSOR_1 < THRES1) {
turn_left_B();
n_black++;
} else {
if (SENSOR_1 < THRES2) {
turn_left_A();
} else if (SENSOR_1 < THRES3) {
go_forward();
} else if (SENSOR_1 < THRES4) {
turn_right_A();
} else {
turn_right_B();
}
n_black=0;
}
Wait(STEP);
}
breaking;
PlaySound(SOUND_DOUBLE_BEEP);
cross_line();
n_black=0;
}
下のプログラムはライントレースしつつ交差点に差し掛かると右折するプログラムである
Q交差点を2回通りすぎたあと、R交差点を右折するコースなので、ここで使った
while (n_black < nMAX) {
if (SENSOR_1 < THRES1) {
turn_left_B();
n_black++;
} else {
if (SENSOR_1 < THRES2) {
turn_left_A();
} else if (SENSOR_1 < THRES3) {
go_forward();
} else if (SENSOR_1 < THRES4) {
turn_right_A();
} else {
turn_right_B();
}
n_black=0;
}
Wait(STEP);
}
breaking;
PlaySound(SOUND_DOWN);
move_RL(0,20);
Wait(1500);
n_black=0;
下のプログラムは最初に使った、
ライントレースしつつ交差点に差し掛かると左折するプログラムである
R交差点を右折したあと、P交差点を左折するために使った
while (n_black < nMAX) {
if (SENSOR_1 < THRES1) {
turn_left_B();
n_black++;
} else {
if (SENSOR_1 < THRES2) {
turn_left_A();
} else if (SENSOR_1 < THRES3) {
go_forward();
} else if (SENSOR_1 < THRES4) {
turn_right_A();
} else {
turn_right_B();
}
n_black=0;
}
Wait(STEP);
}
breaking;
PlaySound(SOUND_DOUBLE_BEEP);
turn_left_B();
Wait(1500);
n_black=0;
下のプログラムはこれも最初に使った
ライントレースしつつ交差点に差し掛かると直進するプログラムであるが
最後にA地点で止まるために1.8秒間直進するプログラムを組み込んだ
P交差点を左折したあとAの場所を交差点とみなし、
A地点で止まるために使った
while (n_black < nMAX) {
if (SENSOR_1 < THRES1) {
turn_left_B();
n_black++;
} else {
if (SENSOR_1 < THRES2) {
turn_left_A();
} else if (SENSOR_1 < THRES3) {
go_forward();
} else if (SENSOR_1 < THRES4) {
turn_right_A();
} else {
turn_right_B();
}
n_black=0;
}
Wait(STEP);
}
breaking;
go_forward();
Wait(1800);
Off(OUT_BC);
}
*課題結果 [#h0c85155]
cコースをすべての交差点を認識しゴールまでたどり着くことはできた
が、成功率は五分五分といった感じだった
また少し時間がかかりすぎた
もっと早く進ませることができたかもしれない
さらに言うと、サブルーチンの関係でプログラム全体が長ったらしくなってしまった
ライントレースのサブルーチンをつくってやるともっと短く出来たかもしれない
タイムは2分32秒だった
*苦労した点 [#mc604dcd]
しきい値の調整に苦労した
また、交差点を認識させるのが難しく
特にR交差点→P交差点→A地点の時のP交差点の認識がうまくいかないことが多かったのと
Q交差点→R交差点→P交差点の時のR交差点は右折で、
今回のライントレースは先の左側をベースにしていたので
右折するとなると曲がる距離の関係でモーターの出力をすこし上げなければならなくて
その調整にも苦労した
*感想 [#mf5546d8]
今回は全体的にプログラムが長くなってしまった
交差点の認識などもむずかしく、友達と協力しながら出来たのはよかった。
ページ名: