2017b/Member/Taka/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
目次
#contents
*課題 [#b3508a12]
黒い線に沿って動き、紙コップを移動させるロボットを製作す...
&ref(2017b/Member/Taka/Mission2/2017b-mission2.png,640x48...
**コース [#k32f7ed7]
私は第2コースを選択した。
Dをスタート→Cを直進→Bを左折→Pを左折(一時停止)→Qを直進→Rを...
→Fを左折→Sを直進(一時停止)→Y地点の紙コップを取得してコー...
→Qを左折(一時停止)→Rを直進→X地点に紙コップを置いてコース...
ラインは真ん中の方が黒が濃くなるように作成した。
*ロボットの説明 [#m72a0782]
**ロボット全体 [#y11022aa]
&ref(2017b/Member/Taka/Mission2/1515606271846.jpg,320x240...
基本的には小回りがなるべくきくようにロボットを作成した。...
**紙コップをとる機構 [#pdd59be6]
&ref(2017b/Member/Taka/Mission2/1515606249111.jpg,320x240...
←下ろす前
紙コップを取るためのアームは、枠を下ろして紙コップを取る...
&ref(2017b/Member/Taka/Mission2/1515606229654.jpg,240x320...
←下ろした後
*プログラムの説明 [#n48c211d]
&ref(2017b/Member/Taka/Mission2/ロボ 資料.png,240x320,明...
線の明るさや範囲はこのようになっていて、通常時(直線や緩...
スピードや閾値を定義した。タイヤのスピードはモーターによ...
#define speedA 38 //右タイヤのスピード
#define speedB 36 //左タイヤのスピード
#define THRESHOLD 50 //閾値
#define STEP 1 //Waitの引数
#define sA2 speedA/2 //スピードを遅くする時に使用
#define sB2 speedB/2 //スピードを遅くする時に使用
サブルーチンで前進や旋回などの基本動作、ライントレースの...
sub go_forward(long x,long y) //前進
{
OnFwd(OUT_A,speedA-x);OnFwd(OUT_B,speedB-y);
}
sub go_right1(long x,long y) //右カーブ
{
OnFwd(OUT_B,speedB-y);Off(OUT_A);
}
sub go_left1(long x,long y) //左カーブ
{
OnFwd(OUT_A,speedA-x);Off(OUT_B);
}
sub go_right2(long x,long y) //右旋回
{
OnFwd(OUT_A,-speedA-x);OnFwd(OUT_B,speedB-y);
}
sub go_left2(long x,long y) //左旋回
{
OnFwd(OUT_A,speedA-x);OnFwd(OUT_B,-speedB-y);
}
コースの場所によって交差点判定の時間などの細かいところを...
急カーブは右折と左折で分かれている。
sub L_Turn1(long x,long y) //急カーブ(左折)
{
long n = 0; //続けて直進した回数
while (n < 300){
if (SENSOR_1 < THRESHOLD -17) {
go_left2(x,y);n=0; //nをリ...
} else if (SENSOR_1 < THRESHOLD -13) {
go_left1(x,y);
} else if (SENSOR_1 < THRESHOLD-9) {
go_forward(x,y);n=n+1; //nを+1...
} else if (SENSOR_1 < THRESHOLD +15) {
go_right1(x,y);
} else {
go_right1(x,y);n=0; //nをリ...
}
Wait(STEP);
}
PlayTone(523,50);
}
sub L_Turn2(long x,long y) //急カーブ(右折)
{
long n = 0; //続けて直進した回数
while (n < 300){
if (SENSOR_1 < THRESHOLD -17) {
go_left2(x,y);n=0; //nをリ...
} else if (SENSOR_1 < THRESHOLD -13) {
go_left1(x,y);
} else if (SENSOR_1 < THRESHOLD-9) {
go_forward(x,y);n=n+1; //nを+1...
} else if (SENSOR_1 < THRESHOLD +15) {
go_right1(x,y);
} else {
go_right2(x,y);n=0; //nをリ...
}
Wait(STEP);
}
PlayTone(523,50);
}
通常時に関しては、?が直線、?が円、?が2つの急カーブのつな...
sub L_Straight1(long x,long y) //通常時?(直線及び直角...
{
long n =0; //続けて左旋回した(黒になった)回数
while (n < 250){
if (SENSOR_1 < THRESHOLD -13) {
go_left2(x,y);n=n+1; //nを+1カウ...
} else if (SENSOR_1 < THRESHOLD) {
go_forward(x,y);
} else {
go_right1(x,y);n=0; //nをリセット
}
Wait(STEP);
}
PlayTone(523,50);
}
sub L_Straight2(long x,long y) //通常時?(円)
{
long n =0; //続けて左カーブした(黒になった)回数
while (n < 250){
if (SENSOR_1 < THRESHOLD -13) {
go_left1(x,y);n=n+1; //nを+1カウ...
} else if (SENSOR_1 < THRESHOLD) {
go_forward(x,y);
} else {
go_right1(x,y);n=0; //nをリセット
}
Wait(STEP);
}
PlayTone(523,50);
}
sub L_Straight3(long x,long y) //通常時?(急カーブ間の...
{
long n =0; //続けて右カーブした(白になった)回数
while (n < 300){
if (SENSOR_1 < THRESHOLD -13) {
go_left2(x,y);n=0; //nをリセット
} else if (SENSOR_1 < THRESHOLD) {
go_forward(x,y);
} else {
go_right1(x,y);n=n+1; //nを+1カウ...
}
Wait(STEP);
}
PlayTone(523,50);
}
sub L_Straight4(long x,long y) //通常時?(紙コップを取...
{
long n =0; //続けて直進した(黒になった)回数
while (n < 300){
if (SENSOR_1 < THRESHOLD -13) {
go_forward(x,y);n=n+1; //nを+1カウ...
} else if (SENSOR_1 < THRESHOLD) {
go_forward(x,y);n=n+1; //nを+1カウ...
} else {
go_right1(x,y);n=0; //nをリセット
}
Wait(STEP);
}
PlayTone(523,50);
}
nについて何も書かれていないところはnをリセットもカウント...
&ref(2017b/Member/Taka/Mission2/ロボ 資料2.png,240x320,...
スタートの準備のプログラム。
sub Start_Set(long x,long y) //Dからスタートの線まで
{
while (SENSOR_1 > THRESHOLD -9) {
go_forward(x,y);
Wait(STEP);
}
PlayTone(523,50);
go_right1(x,y);Wait(300);
PlayTone(740,300);
}
紙コップに関するプログラム。
sub Cup_Catch() //紙コップを取る
{
OnFwd(OUT_C,20);Wait(1300);
Off(OUT_C);
PlayTone(880,100);
}
sub Cup_Release() //紙コップを離す
{
OnFwd(OUT_C,-20);Wait(1300);
Off(OUT_C);
PlayTone(880,100);
}
メインのプログラムである。次のプログラミングがスムーズに...
task main()
{
SetSensorLight(S1); //センサーをセット
Start_Set(0,0); //D〜スタート
L_Straight1(0,0); //スタート〜C
go_right1(0,0);Wait(300); //C地点直進
L_Straight1(0,0); //C〜B
go_left2(0,0);Wait(200); //軌道修正
L_Straight1(0,0); //B〜P
Off(OUT_AB);Wait(1000); //一時停止
go_left1(0,0);Wait(350); //軌道修正
L_Straight2(0,0); //P〜Q
go_right1(0,0);Wait(300); //Q地点直進
L_Straight2(0,0); //Q〜R
go_left1(0,0);Wait(200); //軌道修正
L_Straight1(0,0); //R〜E
go_left2(0,0);Wait(300); //軌道修正
L_Straight1(0,0); //E〜急カーブの入り
L_Turn1(sA2,sB2); //急カーブ
L_Straight3(0,0); //直線
L_Turn2(sA2,sB2); //急カーブ
L_Straight1(0,0); //急カーブの出〜F
go_left2(0,0);Wait(150); //軌道修正
L_Straight1(0,0); //F〜S
Off(OUT_AB);Wait(1000); //一時停止
go_right1(0,0);Wait(300); //S地点直進
L_Straight4(0,0); S〜
go_right2(0,0);Wait(900);Off(OUT_AB); //紙コップを...
Cup_Catch();
go_left2(0,0);Wait(1100);Off(OUT_AB); //完了
L_Straight2(0,0); //〜S
Off(OUT_AB);Wait(1000); //一時停止
go_right1(0,0);Wait(300); //S地点直進
L_Straight1(0,0); //S〜Q
Off(OUT_AB);Wait(1000); //一時停止
go_left1(0,0);Wait(350); //軌道修正
L_Straight2(0,0); //Q〜R
go_right1(0,0);Wait(300); //R地点直進
go_right2(0,0);Wait(1000);Off(OUT_AB); //紙コップを...
Cup_Release();
go_left2(0,0);Wait(1000);Off(OUT_AB); //完了
L_Straight2(0,0); //R〜P
L_Straight1(0,0); //P〜B
go_left2(0,0);Wait(150); //軌道修正
Off(OUT_AB);Wait(1000); //一時停止
L_Straight1(0,0); //B〜ゴール
PlayTone(740,300);
go_right1(0,0);Wait(200);
go_forward(0,0);Wait(500); //ゴールからA
}
*まとめ [#o055941e]
**反省 [#s093df6f]
本番では初めのP地点でうまくいかず、その後の2、3個のプロ...
**感想 [#u75efa78]
序盤はコース作りで改善することがあったり、プログラムを一...
終了行:
目次
#contents
*課題 [#b3508a12]
黒い線に沿って動き、紙コップを移動させるロボットを製作す...
&ref(2017b/Member/Taka/Mission2/2017b-mission2.png,640x48...
**コース [#k32f7ed7]
私は第2コースを選択した。
Dをスタート→Cを直進→Bを左折→Pを左折(一時停止)→Qを直進→Rを...
→Fを左折→Sを直進(一時停止)→Y地点の紙コップを取得してコー...
→Qを左折(一時停止)→Rを直進→X地点に紙コップを置いてコース...
ラインは真ん中の方が黒が濃くなるように作成した。
*ロボットの説明 [#m72a0782]
**ロボット全体 [#y11022aa]
&ref(2017b/Member/Taka/Mission2/1515606271846.jpg,320x240...
基本的には小回りがなるべくきくようにロボットを作成した。...
**紙コップをとる機構 [#pdd59be6]
&ref(2017b/Member/Taka/Mission2/1515606249111.jpg,320x240...
←下ろす前
紙コップを取るためのアームは、枠を下ろして紙コップを取る...
&ref(2017b/Member/Taka/Mission2/1515606229654.jpg,240x320...
←下ろした後
*プログラムの説明 [#n48c211d]
&ref(2017b/Member/Taka/Mission2/ロボ 資料.png,240x320,明...
線の明るさや範囲はこのようになっていて、通常時(直線や緩...
スピードや閾値を定義した。タイヤのスピードはモーターによ...
#define speedA 38 //右タイヤのスピード
#define speedB 36 //左タイヤのスピード
#define THRESHOLD 50 //閾値
#define STEP 1 //Waitの引数
#define sA2 speedA/2 //スピードを遅くする時に使用
#define sB2 speedB/2 //スピードを遅くする時に使用
サブルーチンで前進や旋回などの基本動作、ライントレースの...
sub go_forward(long x,long y) //前進
{
OnFwd(OUT_A,speedA-x);OnFwd(OUT_B,speedB-y);
}
sub go_right1(long x,long y) //右カーブ
{
OnFwd(OUT_B,speedB-y);Off(OUT_A);
}
sub go_left1(long x,long y) //左カーブ
{
OnFwd(OUT_A,speedA-x);Off(OUT_B);
}
sub go_right2(long x,long y) //右旋回
{
OnFwd(OUT_A,-speedA-x);OnFwd(OUT_B,speedB-y);
}
sub go_left2(long x,long y) //左旋回
{
OnFwd(OUT_A,speedA-x);OnFwd(OUT_B,-speedB-y);
}
コースの場所によって交差点判定の時間などの細かいところを...
急カーブは右折と左折で分かれている。
sub L_Turn1(long x,long y) //急カーブ(左折)
{
long n = 0; //続けて直進した回数
while (n < 300){
if (SENSOR_1 < THRESHOLD -17) {
go_left2(x,y);n=0; //nをリ...
} else if (SENSOR_1 < THRESHOLD -13) {
go_left1(x,y);
} else if (SENSOR_1 < THRESHOLD-9) {
go_forward(x,y);n=n+1; //nを+1...
} else if (SENSOR_1 < THRESHOLD +15) {
go_right1(x,y);
} else {
go_right1(x,y);n=0; //nをリ...
}
Wait(STEP);
}
PlayTone(523,50);
}
sub L_Turn2(long x,long y) //急カーブ(右折)
{
long n = 0; //続けて直進した回数
while (n < 300){
if (SENSOR_1 < THRESHOLD -17) {
go_left2(x,y);n=0; //nをリ...
} else if (SENSOR_1 < THRESHOLD -13) {
go_left1(x,y);
} else if (SENSOR_1 < THRESHOLD-9) {
go_forward(x,y);n=n+1; //nを+1...
} else if (SENSOR_1 < THRESHOLD +15) {
go_right1(x,y);
} else {
go_right2(x,y);n=0; //nをリ...
}
Wait(STEP);
}
PlayTone(523,50);
}
通常時に関しては、?が直線、?が円、?が2つの急カーブのつな...
sub L_Straight1(long x,long y) //通常時?(直線及び直角...
{
long n =0; //続けて左旋回した(黒になった)回数
while (n < 250){
if (SENSOR_1 < THRESHOLD -13) {
go_left2(x,y);n=n+1; //nを+1カウ...
} else if (SENSOR_1 < THRESHOLD) {
go_forward(x,y);
} else {
go_right1(x,y);n=0; //nをリセット
}
Wait(STEP);
}
PlayTone(523,50);
}
sub L_Straight2(long x,long y) //通常時?(円)
{
long n =0; //続けて左カーブした(黒になった)回数
while (n < 250){
if (SENSOR_1 < THRESHOLD -13) {
go_left1(x,y);n=n+1; //nを+1カウ...
} else if (SENSOR_1 < THRESHOLD) {
go_forward(x,y);
} else {
go_right1(x,y);n=0; //nをリセット
}
Wait(STEP);
}
PlayTone(523,50);
}
sub L_Straight3(long x,long y) //通常時?(急カーブ間の...
{
long n =0; //続けて右カーブした(白になった)回数
while (n < 300){
if (SENSOR_1 < THRESHOLD -13) {
go_left2(x,y);n=0; //nをリセット
} else if (SENSOR_1 < THRESHOLD) {
go_forward(x,y);
} else {
go_right1(x,y);n=n+1; //nを+1カウ...
}
Wait(STEP);
}
PlayTone(523,50);
}
sub L_Straight4(long x,long y) //通常時?(紙コップを取...
{
long n =0; //続けて直進した(黒になった)回数
while (n < 300){
if (SENSOR_1 < THRESHOLD -13) {
go_forward(x,y);n=n+1; //nを+1カウ...
} else if (SENSOR_1 < THRESHOLD) {
go_forward(x,y);n=n+1; //nを+1カウ...
} else {
go_right1(x,y);n=0; //nをリセット
}
Wait(STEP);
}
PlayTone(523,50);
}
nについて何も書かれていないところはnをリセットもカウント...
&ref(2017b/Member/Taka/Mission2/ロボ 資料2.png,240x320,...
スタートの準備のプログラム。
sub Start_Set(long x,long y) //Dからスタートの線まで
{
while (SENSOR_1 > THRESHOLD -9) {
go_forward(x,y);
Wait(STEP);
}
PlayTone(523,50);
go_right1(x,y);Wait(300);
PlayTone(740,300);
}
紙コップに関するプログラム。
sub Cup_Catch() //紙コップを取る
{
OnFwd(OUT_C,20);Wait(1300);
Off(OUT_C);
PlayTone(880,100);
}
sub Cup_Release() //紙コップを離す
{
OnFwd(OUT_C,-20);Wait(1300);
Off(OUT_C);
PlayTone(880,100);
}
メインのプログラムである。次のプログラミングがスムーズに...
task main()
{
SetSensorLight(S1); //センサーをセット
Start_Set(0,0); //D〜スタート
L_Straight1(0,0); //スタート〜C
go_right1(0,0);Wait(300); //C地点直進
L_Straight1(0,0); //C〜B
go_left2(0,0);Wait(200); //軌道修正
L_Straight1(0,0); //B〜P
Off(OUT_AB);Wait(1000); //一時停止
go_left1(0,0);Wait(350); //軌道修正
L_Straight2(0,0); //P〜Q
go_right1(0,0);Wait(300); //Q地点直進
L_Straight2(0,0); //Q〜R
go_left1(0,0);Wait(200); //軌道修正
L_Straight1(0,0); //R〜E
go_left2(0,0);Wait(300); //軌道修正
L_Straight1(0,0); //E〜急カーブの入り
L_Turn1(sA2,sB2); //急カーブ
L_Straight3(0,0); //直線
L_Turn2(sA2,sB2); //急カーブ
L_Straight1(0,0); //急カーブの出〜F
go_left2(0,0);Wait(150); //軌道修正
L_Straight1(0,0); //F〜S
Off(OUT_AB);Wait(1000); //一時停止
go_right1(0,0);Wait(300); //S地点直進
L_Straight4(0,0); S〜
go_right2(0,0);Wait(900);Off(OUT_AB); //紙コップを...
Cup_Catch();
go_left2(0,0);Wait(1100);Off(OUT_AB); //完了
L_Straight2(0,0); //〜S
Off(OUT_AB);Wait(1000); //一時停止
go_right1(0,0);Wait(300); //S地点直進
L_Straight1(0,0); //S〜Q
Off(OUT_AB);Wait(1000); //一時停止
go_left1(0,0);Wait(350); //軌道修正
L_Straight2(0,0); //Q〜R
go_right1(0,0);Wait(300); //R地点直進
go_right2(0,0);Wait(1000);Off(OUT_AB); //紙コップを...
Cup_Release();
go_left2(0,0);Wait(1000);Off(OUT_AB); //完了
L_Straight2(0,0); //R〜P
L_Straight1(0,0); //P〜B
go_left2(0,0);Wait(150); //軌道修正
Off(OUT_AB);Wait(1000); //一時停止
L_Straight1(0,0); //B〜ゴール
PlayTone(740,300);
go_right1(0,0);Wait(200);
go_forward(0,0);Wait(500); //ゴールからA
}
*まとめ [#o055941e]
**反省 [#s093df6f]
本番では初めのP地点でうまくいかず、その後の2、3個のプロ...
**感想 [#u75efa78]
序盤はコース作りで改善することがあったり、プログラムを一...
ページ名: