2017b/Member/tono/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
#contents
*課題目的 [#v69fdd5a]
今回の課題の目的は下の図のようなコースを作成し、「ミッシ...
#ref(2017b/Member/tono/Mission2/course.png,center,75%,コ...
次のコース(第1コース)で黒い線に沿って動き、紙コップを...
~Aをスタート ,Bを直進 ,Cを右折 ,Fを直進 ,Rを左折(一時停止...
*ロボットについて [#m7f2d6cc]
**ロボット全体 [#q6260e78]
#ref(2017b/Member/tono/Mission2/ロボット説明1.png,center...
ロボットを作る前にグループの中で様々なことを考えた。例え...
**紙カップを取る部分 [#u6a04e60]
#ref(2017b/Member/tono/Mission2/ロボット説明2.png,center...
また、紙カップを取る部分の構造上の図である。紙カップをと...
*プログラムについて [#l6fe72bd]
コース上に動けるようになるためにはLine Traceを使った。L...
|CENTER:段階|CENTER:白い|CENTER:白いと境界付近の間|CENTER...
|CENTER:明るさ値|CENTER:52以下|CENTER:45−52|CENTER:38−45|...
次に、段階によって違う動くを考えましょう。下の図のように...
#ref(2017b/Member/tono/Mission2/ton1.png,center,75%,line ...
**(A)のときのLine Trace プログラム [#v8123131]
まず(A)の場合は白くなったら右側に戻る動く。そのことから5...
|CENTER:段階|CENTER:方向|CENTER:(左側モータのスピード、...
|CENTER:白い|CENTER:左旋回|CENTER:(SPEED_CURVE,-SPEED_CUR...
|CENTER:白いと境界付近の間|CENTER:左折|CENTER:(SPEED_TURN...
|CENTER:境界付近|CENTER:直進|CENTER:(SPEED_STRAIGHT,SPEED...
|CENTER:黒いと境界付近の間|CENTER:右折|CENTER:(0,SPEED_TU...
|CENTER:黒い|CENTER:右旋回|CENTER:(-SPEED_CURVE,SPEED_CUR...
ただし、SPEED_STRAIGHT=30,SPEED_CURVE=30,SPEED_TURN=40 の...
説明したものより(A)のときのLine Trace のプログラム以下の...
-マクロの説明
#define THRESHOLD 45 //しきいの値
#define SPEED_STRAIGHT 30
#define SPEED_CURVE 30
#define SPEED_TURN 40
#define OnRL(speedR,speedL) OnFwd(OUT_A,speedR);OnFwd(OU...
#define go_forward OnRL(SPEED_STRAIGHT,SPEED_STRAIGHT);...
#define turn_left0 OnRL(SPEED_CURVE,-SPEED_CURVE); //左...
#define turn_left1 OnRL(SPEED_TURN,0); //左折
#define turn_right1 OnRL(0,SPEED_TURN); //右折
#define turn_right0 OnRL(-SPEED_CURVE,SPEED_CURVE); //...
-subスクリプトの説明 このプログラムはLine Traceと交差点...
sub moveA1()
{
SetSensorLight(S1); //端子は1番...
long t0=CurrentTick();
while(CurrentTick()-t0<150){ //時間が150以...
if (SENSOR_1 < THRESHOLD -12) { //黒いなら
turn_right0; //右旋回
}else{
t0=CurrentTick(); //時間リセ...
if (SENSOR_1 < THRESHOLD -7) { //黒いと境界...
turn_right1; //右折
} else if (SENSOR_1 < THRESHOLD +7) { //黒いと境界...
go_forward; //直進
} else if (SENSOR_1 < THRESHOLD +12) { //白いと境界...
turn_left1; //左折
} else { //白いなら
turn_left0; //左旋回
}
}
}
PlaySound(SOUND_LOW_BEEP); //音を出す
}
しかし、このsubスクリプトでは急なカーブのところでは交差点...
sub moveA2(int d)
{
SetSensorLight(S1);
long t0=CurrentTick();
while(CurrentTick()-t0<d){ //時間がd以下...
if (SENSOR_1 < THRESHOLD -12) {
turn_right0;
}
else{
if (SENSOR_1 < THRESHOLD -7) {
turn_right1;
} else if (SENSOR_1 < THRESHOLD +7) {
go_forward;
} else if (SENSOR_1 < THRESHOLD +12) {
turn_left1;
} else {
turn_left0;
}
}
}
PlaySound(SOUND_LOW_BEEP);
}
**(B)のときのLine Trace プログラム [#c9fff65d]
(B)のときのLine Trace プログラム は(A)のときの反対側に動...
sub moveB1()
{
SetSensorLight(S1);
long t0=CurrentTick();
while(CurrentTick()-t0<150){
if (SENSOR_1 < THRESHOLD -12) {
turn_left0;
}
else{
t0=CurrentTick();
if (SENSOR_1 < THRESHOLD -7) {
turn_left1;
} else if (SENSOR_1 < THRESHOLD +7) {
go_forward;
} else if (SENSOR_1 < THRESHOLD +12) {
turn_right1;
} else {
turn_right0;
}
}
}
PlaySound(SOUND_LOW_BEEP);
}
(B)のとき時間kは違うカーブによって設定できる
sub moveB2(int k)
{
SetSensorLight(S1);
long t0=CurrentTick();
while(CurrentTick()-t0<k){
if (SENSOR_1 < THRESHOLD -12) {
turn_left0;
} else{
if (SENSOR_1 < THRESHOLD -7) {
turn_left1;
} else if (SENSOR_1 < THRESHOLD +7) {
go_forward;
} else if (SENSOR_1 < THRESHOLD +12) {
turn_right1;
} else {
turn_right0;
}
}
}
PlaySound(SOUND_LOW_BEEP);
}
**交差点判断した後のプログラム [#baa30c51]
交差点判断した後もちろんコースに戻る必要がある。そのため...
#define left(t) OnFwd(OUT_A,30);Wait(t);Off(OUT_A); //l...
#define leftback(t) OnFwd(OUT_A,-30);Wait(t);Off(OUT_A);...
#define right(t) OnFwd(OUT_B,30);Wait(t);Off(OUT_B); //...
#define rightback(t) OnFwd(OUT_B,-30);Wait(t);Off(OUT_B)...
#define straight(t) OnFwd(OUT_AB,20);Wait(t);Off(OUT_AB)...
#define straightback(t) OnFwd(OUT_AB,-20);Wait(t);Off(OU...
**一時止まるのプログラム [#j7d17633]
今回の課題では一時止まる(1秒)操作がある。そのため、マクロ...
#define short_break Off(OUT_AB); Wait(1000); //1秒止まる
**紙コップを取得すると置くプログラム [#y1aba419]
#define getcup(t) OnFwd(OUT_C,35);Wait(t);Off(OUT_C); /...
#define returncup(t) OnFwd(OUT_C,-35);Wait(t);Off(OUT_C)...
**main内で実行しているの説明 [#q04bd6e0]
私のコースは第一コースだったから下の図のようにオレンジ色...
#ref(2017b/Member/tono/Mission2/コース説明.png,center,75%...
オレンジ色の矢印の順番に沿ってMainプログラムを説明してい...
task main()
{
sub moveA1(); //ここは番号1の移動(Start点)
left(2000); //ここからは番号2の移動
sub moveA2(6000);
sub moveA1(); //ここまでは番号2の移動
sub moveA2(2000); //ここは番号3の移動
sub moveA1(); //ここからは番号4の移動
left(2000);
sub moveA2(15000); //ここまでは番号4の移動
sub moveA1(); //ここからは番号5の移動
sub moveA2(700); //ここまでは番号5の移動
sub moveA1(); //ここからは番号6の移動
short_break; //一時停止
rightback(1300);
left(1700);
sub moveB1();
short_break; //一時停止
leftback(700);
straight(700); //紙コップを取得するためコースの外に...
straight(2000);
right(1300);
leftback(2000);
straight(800);
right(500);
getcup(1200); //紙コップを取得する
straight(800); /ここまでは番号6の移動(コースに戻...
sub moveB2(8000); //ここは番号7の移動
sub moveB1(); //ここからは番号8の移動
leftback(1500);
straight(2500);
short_break; //一時停止
sub moveA1(); //ここまでは番号8の移動
rightback(4000); //紙コップを置くためコースの外に...
straightback(500);
returncup(1800); //紙コップを置く
straight(1000);
right(500); //ここまでは番号8の移動 (コースに戻る)
sub moveA2(1500); //ここからは番号9の移動
sub moveA1();
short_break; //一時停止
left(2000);
sub moveA2(700); //ここまでは番号9の移動
sub moveA1(); //ここからは番号10の移動
short_break; //一時停止
rightback(500);
left(1500);
sub moveA1();
sub moveA1();
sub moveA1();
straight(3000); //Finish点
}
*まとめ [#p64217e3]
以下の動画リンクのように今回の課題は成功したがミッション...
~https://www.youtube.com/watch?v=7jxSA9LWHlA&feature=shar...
*参考文献 [#r055d762]
松本成司(2013)「自律型ロボットを作ろう!(2013年度版)」...
終了行:
#contents
*課題目的 [#v69fdd5a]
今回の課題の目的は下の図のようなコースを作成し、「ミッシ...
#ref(2017b/Member/tono/Mission2/course.png,center,75%,コ...
次のコース(第1コース)で黒い線に沿って動き、紙コップを...
~Aをスタート ,Bを直進 ,Cを右折 ,Fを直進 ,Rを左折(一時停止...
*ロボットについて [#m7f2d6cc]
**ロボット全体 [#q6260e78]
#ref(2017b/Member/tono/Mission2/ロボット説明1.png,center...
ロボットを作る前にグループの中で様々なことを考えた。例え...
**紙カップを取る部分 [#u6a04e60]
#ref(2017b/Member/tono/Mission2/ロボット説明2.png,center...
また、紙カップを取る部分の構造上の図である。紙カップをと...
*プログラムについて [#l6fe72bd]
コース上に動けるようになるためにはLine Traceを使った。L...
|CENTER:段階|CENTER:白い|CENTER:白いと境界付近の間|CENTER...
|CENTER:明るさ値|CENTER:52以下|CENTER:45−52|CENTER:38−45|...
次に、段階によって違う動くを考えましょう。下の図のように...
#ref(2017b/Member/tono/Mission2/ton1.png,center,75%,line ...
**(A)のときのLine Trace プログラム [#v8123131]
まず(A)の場合は白くなったら右側に戻る動く。そのことから5...
|CENTER:段階|CENTER:方向|CENTER:(左側モータのスピード、...
|CENTER:白い|CENTER:左旋回|CENTER:(SPEED_CURVE,-SPEED_CUR...
|CENTER:白いと境界付近の間|CENTER:左折|CENTER:(SPEED_TURN...
|CENTER:境界付近|CENTER:直進|CENTER:(SPEED_STRAIGHT,SPEED...
|CENTER:黒いと境界付近の間|CENTER:右折|CENTER:(0,SPEED_TU...
|CENTER:黒い|CENTER:右旋回|CENTER:(-SPEED_CURVE,SPEED_CUR...
ただし、SPEED_STRAIGHT=30,SPEED_CURVE=30,SPEED_TURN=40 の...
説明したものより(A)のときのLine Trace のプログラム以下の...
-マクロの説明
#define THRESHOLD 45 //しきいの値
#define SPEED_STRAIGHT 30
#define SPEED_CURVE 30
#define SPEED_TURN 40
#define OnRL(speedR,speedL) OnFwd(OUT_A,speedR);OnFwd(OU...
#define go_forward OnRL(SPEED_STRAIGHT,SPEED_STRAIGHT);...
#define turn_left0 OnRL(SPEED_CURVE,-SPEED_CURVE); //左...
#define turn_left1 OnRL(SPEED_TURN,0); //左折
#define turn_right1 OnRL(0,SPEED_TURN); //右折
#define turn_right0 OnRL(-SPEED_CURVE,SPEED_CURVE); //...
-subスクリプトの説明 このプログラムはLine Traceと交差点...
sub moveA1()
{
SetSensorLight(S1); //端子は1番...
long t0=CurrentTick();
while(CurrentTick()-t0<150){ //時間が150以...
if (SENSOR_1 < THRESHOLD -12) { //黒いなら
turn_right0; //右旋回
}else{
t0=CurrentTick(); //時間リセ...
if (SENSOR_1 < THRESHOLD -7) { //黒いと境界...
turn_right1; //右折
} else if (SENSOR_1 < THRESHOLD +7) { //黒いと境界...
go_forward; //直進
} else if (SENSOR_1 < THRESHOLD +12) { //白いと境界...
turn_left1; //左折
} else { //白いなら
turn_left0; //左旋回
}
}
}
PlaySound(SOUND_LOW_BEEP); //音を出す
}
しかし、このsubスクリプトでは急なカーブのところでは交差点...
sub moveA2(int d)
{
SetSensorLight(S1);
long t0=CurrentTick();
while(CurrentTick()-t0<d){ //時間がd以下...
if (SENSOR_1 < THRESHOLD -12) {
turn_right0;
}
else{
if (SENSOR_1 < THRESHOLD -7) {
turn_right1;
} else if (SENSOR_1 < THRESHOLD +7) {
go_forward;
} else if (SENSOR_1 < THRESHOLD +12) {
turn_left1;
} else {
turn_left0;
}
}
}
PlaySound(SOUND_LOW_BEEP);
}
**(B)のときのLine Trace プログラム [#c9fff65d]
(B)のときのLine Trace プログラム は(A)のときの反対側に動...
sub moveB1()
{
SetSensorLight(S1);
long t0=CurrentTick();
while(CurrentTick()-t0<150){
if (SENSOR_1 < THRESHOLD -12) {
turn_left0;
}
else{
t0=CurrentTick();
if (SENSOR_1 < THRESHOLD -7) {
turn_left1;
} else if (SENSOR_1 < THRESHOLD +7) {
go_forward;
} else if (SENSOR_1 < THRESHOLD +12) {
turn_right1;
} else {
turn_right0;
}
}
}
PlaySound(SOUND_LOW_BEEP);
}
(B)のとき時間kは違うカーブによって設定できる
sub moveB2(int k)
{
SetSensorLight(S1);
long t0=CurrentTick();
while(CurrentTick()-t0<k){
if (SENSOR_1 < THRESHOLD -12) {
turn_left0;
} else{
if (SENSOR_1 < THRESHOLD -7) {
turn_left1;
} else if (SENSOR_1 < THRESHOLD +7) {
go_forward;
} else if (SENSOR_1 < THRESHOLD +12) {
turn_right1;
} else {
turn_right0;
}
}
}
PlaySound(SOUND_LOW_BEEP);
}
**交差点判断した後のプログラム [#baa30c51]
交差点判断した後もちろんコースに戻る必要がある。そのため...
#define left(t) OnFwd(OUT_A,30);Wait(t);Off(OUT_A); //l...
#define leftback(t) OnFwd(OUT_A,-30);Wait(t);Off(OUT_A);...
#define right(t) OnFwd(OUT_B,30);Wait(t);Off(OUT_B); //...
#define rightback(t) OnFwd(OUT_B,-30);Wait(t);Off(OUT_B)...
#define straight(t) OnFwd(OUT_AB,20);Wait(t);Off(OUT_AB)...
#define straightback(t) OnFwd(OUT_AB,-20);Wait(t);Off(OU...
**一時止まるのプログラム [#j7d17633]
今回の課題では一時止まる(1秒)操作がある。そのため、マクロ...
#define short_break Off(OUT_AB); Wait(1000); //1秒止まる
**紙コップを取得すると置くプログラム [#y1aba419]
#define getcup(t) OnFwd(OUT_C,35);Wait(t);Off(OUT_C); /...
#define returncup(t) OnFwd(OUT_C,-35);Wait(t);Off(OUT_C)...
**main内で実行しているの説明 [#q04bd6e0]
私のコースは第一コースだったから下の図のようにオレンジ色...
#ref(2017b/Member/tono/Mission2/コース説明.png,center,75%...
オレンジ色の矢印の順番に沿ってMainプログラムを説明してい...
task main()
{
sub moveA1(); //ここは番号1の移動(Start点)
left(2000); //ここからは番号2の移動
sub moveA2(6000);
sub moveA1(); //ここまでは番号2の移動
sub moveA2(2000); //ここは番号3の移動
sub moveA1(); //ここからは番号4の移動
left(2000);
sub moveA2(15000); //ここまでは番号4の移動
sub moveA1(); //ここからは番号5の移動
sub moveA2(700); //ここまでは番号5の移動
sub moveA1(); //ここからは番号6の移動
short_break; //一時停止
rightback(1300);
left(1700);
sub moveB1();
short_break; //一時停止
leftback(700);
straight(700); //紙コップを取得するためコースの外に...
straight(2000);
right(1300);
leftback(2000);
straight(800);
right(500);
getcup(1200); //紙コップを取得する
straight(800); /ここまでは番号6の移動(コースに戻...
sub moveB2(8000); //ここは番号7の移動
sub moveB1(); //ここからは番号8の移動
leftback(1500);
straight(2500);
short_break; //一時停止
sub moveA1(); //ここまでは番号8の移動
rightback(4000); //紙コップを置くためコースの外に...
straightback(500);
returncup(1800); //紙コップを置く
straight(1000);
right(500); //ここまでは番号8の移動 (コースに戻る)
sub moveA2(1500); //ここからは番号9の移動
sub moveA1();
short_break; //一時停止
left(2000);
sub moveA2(700); //ここまでは番号9の移動
sub moveA1(); //ここからは番号10の移動
short_break; //一時停止
rightback(500);
left(1500);
sub moveA1();
sub moveA1();
sub moveA1();
straight(3000); //Finish点
}
*まとめ [#p64217e3]
以下の動画リンクのように今回の課題は成功したがミッション...
~https://www.youtube.com/watch?v=7jxSA9LWHlA&feature=shar...
*参考文献 [#r055d762]
松本成司(2013)「自律型ロボットを作ろう!(2013年度版)」...
ページ名: