2016a/Member/tom/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2016a/Member]]
・目次
#contents
*課題 [#ubab1e3f]
下の図のようなコースを各チームで作成し、「ミッション」を...
*コース図 [#id45d691]
http://yakushi.shinshu-u.ac.jp/robotics/?2016a%2FMission2...
*ミッション [#oc3264ca]
次のいずれかの経路を黒い線にそって動くロボットを作成する ...
•A地点からB地点へ (一人目) ◦A地点 → P直進 → Q...
•B地点からC地点へ (二人目) ◦B地点 → R右折 → Q...
•C地点からA地点へ (三人目) ◦C地点 → S左折 → P...
私は、B地点からC地点のルートを担当した。
*メンバー [#qb973488]
tom・funatsu・tatsuya
*ロボットの説明 [#j547dadf]
私達は、NXTと言う種類のロボットを使用した。
#ref(2016a/Member/tom/Mission2/IMG_2677.JPG)
#ref(2016a/Member/tom/Mission2/IMG_2679.JPG)
<センサー部分>
#ref(2016a/Member/tom/Mission2/IMG_2678.JPG)
*プログラム [#k22b8b3f]
・定義
#define BLACK 43 //黒色の定義
#define WHITE 54 //白色の定義
#define SPEED1 19
#define go_forward OnFwd(OUT_BC,SPEED1); //前進
#define turn_left(t,w1,w2) OnFwd(OUT_B,w1); OnRev(OUT_C,...
#define turn_left1 OnFwd(OUT_B,SPEED1);Off(OUT_C); //?
#define turn_left2 OnFwd(OUT_B,SPEED1);OnRev(OUT_C,SPEED...
#define turn_right(t,w1,w2) OnFwd(OUT_C,w1); OnRev(OUT_A...
#define turn_right1 Off(OUT_B);OnFwd(OUT_C,SPEED1); //?
#define turn_right2 OnRev(OUT_B,SPEED1);OnFwd(OUT_C,SPEE...
#define short_break Off(OUT_BC);Wait(1000);PlaySound(SOU...
#define cross_line go_forward;Wait(200);Off(OUT_BC);Wait...
#define nMAX 350 カーブとみなせる回数の最大値
?は大きく曲がる ?は小さく曲がる
今回はこの定義を使った。
・サブルーチン
void line_trace()//黒い線上に沿って走る
{
SetSensorLight(S1);
int nOnline=0;
while (nOnline < nMAX ) { ////黒がnMAX回続かない限...
if (SENSOR_1 < BLACK-5) {
turn_right2;
nOnline++; //カウンタを増やす
} else {
if (SENSOR_1 < BLACK) {
turn_right1;
} else if (SENSOR_1 < WHITE) {
go_forward;
} else if (SENSOR_1 < WHITE+5) {
turn_left1;
} else {
turn_left2;
}
nOnline=0; //カウンタを0にする
}
Wait(STEP);
}
short_break;
nOnline=0; //カウンタを0にする
Off(OUT_BC);
}
void line_closs()//機体の向きを調整する
{
cross_line;
SetSensorLight(S1);
do{
if (SENSOR_1 < BLACK) {
turn_right1;
} else if (SENSOR_1 > WHITE) {
turn_left2;
}
}
while((SENSOR_1 > BLACK)&&(SENSOR_1 < WHITE));
Off(OUT_BC);
}
光センサーが黒をnMAX(350)回以上連続で判断すると交差点とみ...
void line_right()//交差点で右に曲がる
{
cross_line;
turn_right(1000,40,40);
SetSensorLight(S1);
do{ //線の左端を探す
if (SENSOR_1 < BLACK) {
turn_right1;
} else if (SENSOR_1 > WHITE) {
turn_left2;
}
}
while((SENSOR_1 > BLACK)&&(SENSOR_1 < WHITE));
Off(OUT_BC);
}
交差点を渡り切った後、次のライントレースのためにロボット...
void line_left()交差点で左に曲がる
{
cross_line;
turn_left(1000,40,40) //左に曲がる
SetSensorLight(S1);
do{ //線の左端を探す
if (SENSOR_1 < BLACK) {
turn_right1;
} else if (SENSOR_1 > WHITE) {
turn_left2;
}
}
while((SENSOR_1 > BLACK)&&(SENSOR_1 < WHITE));
Off(OUT_BC);
}
void line_clossの左折版。
void last_move()C地点にゴールする。
{
go_forward;
Wait(1500);
Off(OUT_BC);
}
ゴールしたら、音を鳴らす。
・メインプログラム
task main()
{
line_trace();
line_right();
line_trace();
line_closs();
line_trace();
line_closs();
line_trace();
line_right();
line_trace();
line_right();
line_trace();
last_move();
}
サブルーチンを使用してB地点からC地点へ向かうプログラム。
*反省点 [#o8744fcd]
スタートからゴールするまで4分3秒と時間がかかった。
ゴール地点と認識しないことが多かった。
*感想 [#m3902dd1]
電池の残量によってモーターの出力が変わってしまうことが多...
その度に、プログラムを変更し、調整するのには苦労した。
今度は、センサーによるコース認識の感度を上げ、より確実な...
終了行:
[[2016a/Member]]
・目次
#contents
*課題 [#ubab1e3f]
下の図のようなコースを各チームで作成し、「ミッション」を...
*コース図 [#id45d691]
http://yakushi.shinshu-u.ac.jp/robotics/?2016a%2FMission2...
*ミッション [#oc3264ca]
次のいずれかの経路を黒い線にそって動くロボットを作成する ...
•A地点からB地点へ (一人目) ◦A地点 → P直進 → Q...
•B地点からC地点へ (二人目) ◦B地点 → R右折 → Q...
•C地点からA地点へ (三人目) ◦C地点 → S左折 → P...
私は、B地点からC地点のルートを担当した。
*メンバー [#qb973488]
tom・funatsu・tatsuya
*ロボットの説明 [#j547dadf]
私達は、NXTと言う種類のロボットを使用した。
#ref(2016a/Member/tom/Mission2/IMG_2677.JPG)
#ref(2016a/Member/tom/Mission2/IMG_2679.JPG)
<センサー部分>
#ref(2016a/Member/tom/Mission2/IMG_2678.JPG)
*プログラム [#k22b8b3f]
・定義
#define BLACK 43 //黒色の定義
#define WHITE 54 //白色の定義
#define SPEED1 19
#define go_forward OnFwd(OUT_BC,SPEED1); //前進
#define turn_left(t,w1,w2) OnFwd(OUT_B,w1); OnRev(OUT_C,...
#define turn_left1 OnFwd(OUT_B,SPEED1);Off(OUT_C); //?
#define turn_left2 OnFwd(OUT_B,SPEED1);OnRev(OUT_C,SPEED...
#define turn_right(t,w1,w2) OnFwd(OUT_C,w1); OnRev(OUT_A...
#define turn_right1 Off(OUT_B);OnFwd(OUT_C,SPEED1); //?
#define turn_right2 OnRev(OUT_B,SPEED1);OnFwd(OUT_C,SPEE...
#define short_break Off(OUT_BC);Wait(1000);PlaySound(SOU...
#define cross_line go_forward;Wait(200);Off(OUT_BC);Wait...
#define nMAX 350 カーブとみなせる回数の最大値
?は大きく曲がる ?は小さく曲がる
今回はこの定義を使った。
・サブルーチン
void line_trace()//黒い線上に沿って走る
{
SetSensorLight(S1);
int nOnline=0;
while (nOnline < nMAX ) { ////黒がnMAX回続かない限...
if (SENSOR_1 < BLACK-5) {
turn_right2;
nOnline++; //カウンタを増やす
} else {
if (SENSOR_1 < BLACK) {
turn_right1;
} else if (SENSOR_1 < WHITE) {
go_forward;
} else if (SENSOR_1 < WHITE+5) {
turn_left1;
} else {
turn_left2;
}
nOnline=0; //カウンタを0にする
}
Wait(STEP);
}
short_break;
nOnline=0; //カウンタを0にする
Off(OUT_BC);
}
void line_closs()//機体の向きを調整する
{
cross_line;
SetSensorLight(S1);
do{
if (SENSOR_1 < BLACK) {
turn_right1;
} else if (SENSOR_1 > WHITE) {
turn_left2;
}
}
while((SENSOR_1 > BLACK)&&(SENSOR_1 < WHITE));
Off(OUT_BC);
}
光センサーが黒をnMAX(350)回以上連続で判断すると交差点とみ...
void line_right()//交差点で右に曲がる
{
cross_line;
turn_right(1000,40,40);
SetSensorLight(S1);
do{ //線の左端を探す
if (SENSOR_1 < BLACK) {
turn_right1;
} else if (SENSOR_1 > WHITE) {
turn_left2;
}
}
while((SENSOR_1 > BLACK)&&(SENSOR_1 < WHITE));
Off(OUT_BC);
}
交差点を渡り切った後、次のライントレースのためにロボット...
void line_left()交差点で左に曲がる
{
cross_line;
turn_left(1000,40,40) //左に曲がる
SetSensorLight(S1);
do{ //線の左端を探す
if (SENSOR_1 < BLACK) {
turn_right1;
} else if (SENSOR_1 > WHITE) {
turn_left2;
}
}
while((SENSOR_1 > BLACK)&&(SENSOR_1 < WHITE));
Off(OUT_BC);
}
void line_clossの左折版。
void last_move()C地点にゴールする。
{
go_forward;
Wait(1500);
Off(OUT_BC);
}
ゴールしたら、音を鳴らす。
・メインプログラム
task main()
{
line_trace();
line_right();
line_trace();
line_closs();
line_trace();
line_closs();
line_trace();
line_right();
line_trace();
line_right();
line_trace();
last_move();
}
サブルーチンを使用してB地点からC地点へ向かうプログラム。
*反省点 [#o8744fcd]
スタートからゴールするまで4分3秒と時間がかかった。
ゴール地点と認識しないことが多かった。
*感想 [#m3902dd1]
電池の残量によってモーターの出力が変わってしまうことが多...
その度に、プログラムを変更し、調整するのには苦労した。
今度は、センサーによるコース認識の感度を上げ、より確実な...
ページ名: