2017b/Member/smith/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*ライントレースをしながらゴールまで移動するロボット [#a65...
#contents
**1 ロボット [#n8016b9d]
***ロボット全体 [#ub8431c5]
&ref(2017b/Member/smith/Mission2/kadai2-2.jpg,30%,ロボッ...
&ref(2017b/Member/smith/Mission2/kadai2-3.jpg,30%,ロボッ...
・今回作ったロボットは、掲載ガイドにある2つのモータで4...
***タイヤの問題と解決 [#f6f6032a]
&ref(2017b/Member/smith/Mission2/kadai2-5.jpg,30%,ロボッ...
・ガイドのロボットのままだとE〜F間のS字カーブが曲がり切れ...
***紙コップをつかむ機構 [#na4eb7a4]
&ref(2017b/Member/smith/Mission2/kadai2-6.jpg,30%,紙コッ...
&ref(2017b/Member/smith/Mission2/kadai2-7.jpg,30%,紙コッ...
・紙コップをつかむ機構は上図一番右のように、紙コップのす...
**2 プログラム [#v88f3c69]
・今回の課題は、最初の課題よりもより複雑になり、その分プ...
***基礎部分 [#j07930c0]
#define Threshold 40 //センサの読み取れる範囲の中央値
#define Hp 7 //パワー大
#define Mp 1 //パワー中
#define Lp 0 //パワー小
#define Cross_time 15 //交差点を横切る時間
#define Set_power_h SetPower(OUT_AC,Hp); //左右のパワー大
#define Set_power_m SetPower(OUT_AC,Mp); //左右のパワー中
#define Set_power_l SetPower(OUT_AC,Lp); //左右のパワー小
#define Go_forward Set_power_h; OnFwd(OUT_AC); //パワー...
#define Back Set_power_h; OnRev(OUT_AC); //パワー大で後進
#define Turn_right_l Set_power_m; OnFwd(OUT_A); Off(OUT_...
#define Turn_right_h Set_power_l; OnFwd(OUT_A); OnRev(OU...
#define Turn_left_l Set_power_m; Off(OUT_A); OnFwd(OUT_C...
#define Turn_left_h Set_power_l; OnRev(OUT_A); OnFwd(OUT...
#define Break Off(OUT_AC); Wait(100); //小休憩
#define Cross Set_power_h; OnFwd(OUT_AC); Wait(Cross_tim...
#define Step 1 //ラインの検知間隔
#define Max 5 //交差点の判定するときの本体が左折する時間
#define N2_time 200 //サブルーチンN2の動作する時間
#define S_time 1000 //サブルーチンSの動作する時間
・この部分は、ここから下のサブルーチン・メインプログラム...
・光の範囲の基準値は40にして、そこから一定値足したり引い...
・光の明るさによる本体の動きは5パターンであり、直進の場合...
・光センサの検知する間隔は0.01秒ごとにしている。
***交差点横断のサブルーチン [#s42b216f]
sub C()
{
SetSensor(SENSOR_2, SENSOR_LIGHT); //センサの定義
int Online=0; //左旋回のカウント
int Cross_count=0; //交差点を通過した回数
while (Cross_count < 1) { //交差点を通過するまで
while (Online < Max) { //左旋回を5回連続するまで
if (SENSOR_2 < Threshold - 5) { //センサの値...
Turn_left_h;
PlayTone(523,1);
Online++;
} else {
if (SENSOR_2 < Threshold - 2) { //センサ...
Turn_left_l;
} else if (SENSOR_2 < Threshold + 2) { /...
Go_forward;
} else if (SENSOR_2 < Threshold + 5) { /...
Turn_right_l;
} else { //センサの値が45以上の時、右旋回
Turn_right_h;
}
Online=0; //左旋回以外の時、Onlineの値を...
}
Wait(Step); //0.01秒ごとに線を検知
}
Break; //小休憩
Turn_right_h; //0.3秒間右旋回
Wait(30);
Cross; //交差点を横断
Online=0; //Onlineの値をリセット
Cross_count++; //Cross_countを1足してこのルーチンを...
}
}
・交差点を横断するときのサブルーチン。光センサが〜34では...
・交差点横断は、このサブルーチン内で左旋回を0.05秒間連続...
・「Online」の値が5になるとライントレースのループから外れ...
***交差点左折のサブルーチン? [#h98b52a3]
sub N1()
{
SetSensor(SENSOR_2, SENSOR_LIGHT); //センサの定義
int Online=0; //左旋回のカウント
int Cross_count=0; //交差点を通過した回数
while (Cross_count < 1) { //交差点を通過するまで
while (Online < Max) { //左旋回を5回連続するまで
if (SENSOR_2 < Threshold - 5) { //左旋回(範...
Turn_left_h;
PlayTone(523,1);
Online++;
} else {
if (SENSOR_2 < Threshold - 2) { //左折
Turn_left_l;
} else if (SENSOR_2 < Threshold + 2) { //...
Go_forward;
} else if (SENSOR_2 < Threshold + 5) { //...
Turn_right_l;
} else { //右旋回
Turn_right_h;
}
Online=0; //左旋回以外の時、Onlineの値を...
}
Wait(Step); //0.01秒ごとに線を検知
}
Break; //小休憩
Cross_count++; //Cross_countを1足してこのルーチンを終...
}
}
・交差点を左折するときのサブルーチン。ライントレースのプ...
***交差点左折のサブルーチン? [#x5f2f3af]
sub N2()
{
SetSensor(SENSOR_2, SENSOR_LIGHT); //センサを定義
ClearTimer(0); //タイマをリセット
while (FastTimer(0) < N2_time) { //タイマが2秒になる...
if (SENSOR_2 < Threshold - 5) { //左旋回
Turn_left_h;
} else if (SENSOR_2 < Threshold - 2) { //左折
Turn_left_l;
} else if (SENSOR_2 < Threshold + 2) { //直進
Go_forward;
} else if (SENSOR_2 < Threshold + 5) { //右折
Turn_right_l;
} else { //右旋回
Turn_right_h;
}
}
}
・サブルーチンN1だけで実行すると、交差点左折直後に線上に...
***E〜F間のS字カーブ部分のサブルーチン [#h6e8519f]
sub S()
{
SetSensor(SENSOR_2, SENSOR_LIGHT); //センサを定義
ClearTimer(0); //タイマをリセット
while (FastTimer(0) < S_time) { //タイマが10秒になる...
if (SENSOR_2 < Threshold - 5) { //左旋回
Turn_left_h;
} else if (SENSOR_2 < Threshold - 2) { //左折
Turn_left_l;
} else if (SENSOR_2 < Threshold + 2) { //直進
Go_forward;
} else if (SENSOR_2 < Threshold + 5) { //右折
Turn_right_l;
} else { //右旋回
Turn_right_h;
}
}
}
・E〜F間は急なS字カーブになっていて、ここも左旋回が起こり...
***紙コップをつかむサブルーチン・はなすサブルーチン [#f76...
sub MFwd()
{
OnFwd(OUT_B); //機構を0.5秒間上げる
Wait(50);
Off(OUT_B);
}
sub MRev()
{
OnRev(OUT_B); //機構を0.5秒間下げる
Wait(50);
Off(OUT_B);
}
・紙コップをつかむ・はなすサブルーチン。MFwdがつかみ、MRe...
***紙コップを置くために円PQRの中心に移動するサブルーチン...
sub R1()
{
Turn_right_h; //1.2秒間右旋回
Wait(120);
Go_forward; //0.5秒間直進
Wait(50);
Break; //小休憩
}
sub R2()
{
Back; //0.5秒間後進
Wait(50);
Turn_left_h; //1.2秒間左旋回
Wait(120);
Break; //小休憩
}
・ルート2の場合円Sで紙コップをつかみ、円PQRの中央ではな...
***メインプログラム [#o4faff30]
task main() //メインのプログラム
{
Go_forward;
Wait(30);
C(); //Cを直進
N1(); //Bを左折
N2();
N1(); //Pを左折
N2();
C(); //Qを直進
N1(); //Rを左折
N2();
N1(); //Eを曲がる
N2();
S(); //S字カーブ
N1(); //Fを左折
N2();
C(); //Sを直進
MRev(); //紙コップをつかむ
C(); //Sを直進
N1(); //Qを左折
N2();
C(); //Rを直進
R1(); //円PQRの中心に向かう
MFwd(); //紙コップを置く
R2(); //線上に戻る
N1(); //Pを左折
N2();
N1(); //Bを左折
N2();
C(); //Aに侵入
Go_forward;
Wait(30);
Break;
}
・これらの8つのサブルーチンを組み合わせて、
D → Cを直進 → Bを左折 → Pを左折 → Qを直進 → Rを...
の行動順になるようにした。
**3 実行結果 [#sa02b435]
・このロボットを本番で実行した結果、モータBの接触不良で紙...
終了行:
*ライントレースをしながらゴールまで移動するロボット [#a65...
#contents
**1 ロボット [#n8016b9d]
***ロボット全体 [#ub8431c5]
&ref(2017b/Member/smith/Mission2/kadai2-2.jpg,30%,ロボッ...
&ref(2017b/Member/smith/Mission2/kadai2-3.jpg,30%,ロボッ...
・今回作ったロボットは、掲載ガイドにある2つのモータで4...
***タイヤの問題と解決 [#f6f6032a]
&ref(2017b/Member/smith/Mission2/kadai2-5.jpg,30%,ロボッ...
・ガイドのロボットのままだとE〜F間のS字カーブが曲がり切れ...
***紙コップをつかむ機構 [#na4eb7a4]
&ref(2017b/Member/smith/Mission2/kadai2-6.jpg,30%,紙コッ...
&ref(2017b/Member/smith/Mission2/kadai2-7.jpg,30%,紙コッ...
・紙コップをつかむ機構は上図一番右のように、紙コップのす...
**2 プログラム [#v88f3c69]
・今回の課題は、最初の課題よりもより複雑になり、その分プ...
***基礎部分 [#j07930c0]
#define Threshold 40 //センサの読み取れる範囲の中央値
#define Hp 7 //パワー大
#define Mp 1 //パワー中
#define Lp 0 //パワー小
#define Cross_time 15 //交差点を横切る時間
#define Set_power_h SetPower(OUT_AC,Hp); //左右のパワー大
#define Set_power_m SetPower(OUT_AC,Mp); //左右のパワー中
#define Set_power_l SetPower(OUT_AC,Lp); //左右のパワー小
#define Go_forward Set_power_h; OnFwd(OUT_AC); //パワー...
#define Back Set_power_h; OnRev(OUT_AC); //パワー大で後進
#define Turn_right_l Set_power_m; OnFwd(OUT_A); Off(OUT_...
#define Turn_right_h Set_power_l; OnFwd(OUT_A); OnRev(OU...
#define Turn_left_l Set_power_m; Off(OUT_A); OnFwd(OUT_C...
#define Turn_left_h Set_power_l; OnRev(OUT_A); OnFwd(OUT...
#define Break Off(OUT_AC); Wait(100); //小休憩
#define Cross Set_power_h; OnFwd(OUT_AC); Wait(Cross_tim...
#define Step 1 //ラインの検知間隔
#define Max 5 //交差点の判定するときの本体が左折する時間
#define N2_time 200 //サブルーチンN2の動作する時間
#define S_time 1000 //サブルーチンSの動作する時間
・この部分は、ここから下のサブルーチン・メインプログラム...
・光の範囲の基準値は40にして、そこから一定値足したり引い...
・光の明るさによる本体の動きは5パターンであり、直進の場合...
・光センサの検知する間隔は0.01秒ごとにしている。
***交差点横断のサブルーチン [#s42b216f]
sub C()
{
SetSensor(SENSOR_2, SENSOR_LIGHT); //センサの定義
int Online=0; //左旋回のカウント
int Cross_count=0; //交差点を通過した回数
while (Cross_count < 1) { //交差点を通過するまで
while (Online < Max) { //左旋回を5回連続するまで
if (SENSOR_2 < Threshold - 5) { //センサの値...
Turn_left_h;
PlayTone(523,1);
Online++;
} else {
if (SENSOR_2 < Threshold - 2) { //センサ...
Turn_left_l;
} else if (SENSOR_2 < Threshold + 2) { /...
Go_forward;
} else if (SENSOR_2 < Threshold + 5) { /...
Turn_right_l;
} else { //センサの値が45以上の時、右旋回
Turn_right_h;
}
Online=0; //左旋回以外の時、Onlineの値を...
}
Wait(Step); //0.01秒ごとに線を検知
}
Break; //小休憩
Turn_right_h; //0.3秒間右旋回
Wait(30);
Cross; //交差点を横断
Online=0; //Onlineの値をリセット
Cross_count++; //Cross_countを1足してこのルーチンを...
}
}
・交差点を横断するときのサブルーチン。光センサが〜34では...
・交差点横断は、このサブルーチン内で左旋回を0.05秒間連続...
・「Online」の値が5になるとライントレースのループから外れ...
***交差点左折のサブルーチン? [#h98b52a3]
sub N1()
{
SetSensor(SENSOR_2, SENSOR_LIGHT); //センサの定義
int Online=0; //左旋回のカウント
int Cross_count=0; //交差点を通過した回数
while (Cross_count < 1) { //交差点を通過するまで
while (Online < Max) { //左旋回を5回連続するまで
if (SENSOR_2 < Threshold - 5) { //左旋回(範...
Turn_left_h;
PlayTone(523,1);
Online++;
} else {
if (SENSOR_2 < Threshold - 2) { //左折
Turn_left_l;
} else if (SENSOR_2 < Threshold + 2) { //...
Go_forward;
} else if (SENSOR_2 < Threshold + 5) { //...
Turn_right_l;
} else { //右旋回
Turn_right_h;
}
Online=0; //左旋回以外の時、Onlineの値を...
}
Wait(Step); //0.01秒ごとに線を検知
}
Break; //小休憩
Cross_count++; //Cross_countを1足してこのルーチンを終...
}
}
・交差点を左折するときのサブルーチン。ライントレースのプ...
***交差点左折のサブルーチン? [#x5f2f3af]
sub N2()
{
SetSensor(SENSOR_2, SENSOR_LIGHT); //センサを定義
ClearTimer(0); //タイマをリセット
while (FastTimer(0) < N2_time) { //タイマが2秒になる...
if (SENSOR_2 < Threshold - 5) { //左旋回
Turn_left_h;
} else if (SENSOR_2 < Threshold - 2) { //左折
Turn_left_l;
} else if (SENSOR_2 < Threshold + 2) { //直進
Go_forward;
} else if (SENSOR_2 < Threshold + 5) { //右折
Turn_right_l;
} else { //右旋回
Turn_right_h;
}
}
}
・サブルーチンN1だけで実行すると、交差点左折直後に線上に...
***E〜F間のS字カーブ部分のサブルーチン [#h6e8519f]
sub S()
{
SetSensor(SENSOR_2, SENSOR_LIGHT); //センサを定義
ClearTimer(0); //タイマをリセット
while (FastTimer(0) < S_time) { //タイマが10秒になる...
if (SENSOR_2 < Threshold - 5) { //左旋回
Turn_left_h;
} else if (SENSOR_2 < Threshold - 2) { //左折
Turn_left_l;
} else if (SENSOR_2 < Threshold + 2) { //直進
Go_forward;
} else if (SENSOR_2 < Threshold + 5) { //右折
Turn_right_l;
} else { //右旋回
Turn_right_h;
}
}
}
・E〜F間は急なS字カーブになっていて、ここも左旋回が起こり...
***紙コップをつかむサブルーチン・はなすサブルーチン [#f76...
sub MFwd()
{
OnFwd(OUT_B); //機構を0.5秒間上げる
Wait(50);
Off(OUT_B);
}
sub MRev()
{
OnRev(OUT_B); //機構を0.5秒間下げる
Wait(50);
Off(OUT_B);
}
・紙コップをつかむ・はなすサブルーチン。MFwdがつかみ、MRe...
***紙コップを置くために円PQRの中心に移動するサブルーチン...
sub R1()
{
Turn_right_h; //1.2秒間右旋回
Wait(120);
Go_forward; //0.5秒間直進
Wait(50);
Break; //小休憩
}
sub R2()
{
Back; //0.5秒間後進
Wait(50);
Turn_left_h; //1.2秒間左旋回
Wait(120);
Break; //小休憩
}
・ルート2の場合円Sで紙コップをつかみ、円PQRの中央ではな...
***メインプログラム [#o4faff30]
task main() //メインのプログラム
{
Go_forward;
Wait(30);
C(); //Cを直進
N1(); //Bを左折
N2();
N1(); //Pを左折
N2();
C(); //Qを直進
N1(); //Rを左折
N2();
N1(); //Eを曲がる
N2();
S(); //S字カーブ
N1(); //Fを左折
N2();
C(); //Sを直進
MRev(); //紙コップをつかむ
C(); //Sを直進
N1(); //Qを左折
N2();
C(); //Rを直進
R1(); //円PQRの中心に向かう
MFwd(); //紙コップを置く
R2(); //線上に戻る
N1(); //Pを左折
N2();
N1(); //Bを左折
N2();
C(); //Aに侵入
Go_forward;
Wait(30);
Break;
}
・これらの8つのサブルーチンを組み合わせて、
D → Cを直進 → Bを左折 → Pを左折 → Qを直進 → Rを...
の行動順になるようにした。
**3 実行結果 [#sa02b435]
・このロボットを本番で実行した結果、モータBの接触不良で紙...
ページ名: