2009a/A12/課題2右
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2009a]]課題2 黒い線に沿って動くロボット
*目次 [#n63933ef]
#contents
*メンバー紹介 [#hc046c2b]
-まさと:主にホームページの作成担当
-Y.Y:主にロボットの製作担当
*課題内容 [#ib6c29f4]
1.紙パックを迂回する、あるいは紙パックをもとの位置に戻したのちコースに戻って進む
2.紙パックを次の交差点まで運んで行き、その交差点に紙パックを残してさらに黒い線に沿って進む
*ただしどちらの場合においても速さと正確さを追求し、コースを3周したら自動的に止まらなければならない
*コースの紹介 [#u41c67c5]
ロボが反応しやすいよう交差点を直交させ、できるだけシンプルなコースに。
そのため直線を多用したコースになっている。
&ref(090703_1558~01.jpg);
*ロボットの紹介 [#j7d3fc30]
最終的なロボの全体像。少し大きくなり過ぎてしまった感は否めない。
そのため曲がる際に設置した紙パックを動かしてしまうこともしばしば。
&ref(090703_1620~01.jpg);
初めはタイヤ4つでいこうと思っていたが、もう少しスムーズに曲がれるようにこのような形にした。
ただ、少し強度が弱かったので途中はずれてしまうこともあった。
&ref(090703_1620~02.jpg);
最初は光センサーの反応が悪く、コースに沿って進むことができなかった。光センサーを紙面にできるだけ近づけることで解消された。
コース通りに進んでくれたときは少し感動した。
&ref(090703_1621~01.jpg);
紙パックに対する反応の精度を上げるためにこのような形になった。以前はタッチセンサーが反応せずに、そのまま運んでいってしまっていた。
&ref(090703_1621~02.jpg);
*プログラムの紹介 [#rcd02ec0]
**まさとのプログラム [#l25d8b96]
#define front(t) OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C); //前進の定義
#define back(t) OnRev(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C); //後退の定義
#define turn_left OnFwd(OUT_C);OnRev(OUT_A);Wait(time);Off(OUT_A+OUT_C); //左折の定義
#define turn_right OnFwd(OUT_A);OnRev(OUT_C);Wait(time);Off(OUT_A+OUT_C); //右折の定義
task main ()
{
SetSensor(SENSOR_1, SENSOR_LIGHT);
SetSensor(SENSOR_2, SENSOR_TOUCH);
SetSensor(SENSOR_3, SENSOR_LIGHT);
int n; //交差点を通った回数
n=0;
while(n<12)
{
if ((SENSOR_1>light)&&(SENSOR_3>light)) //左右両方が白の場合
{
OnFwd(OUT_A+OUT_C); //前進
}
if ((SENSOR_1> light)&&(SENSOR_3<light)) //左が白、右が黒の場 合
{
OnFwd(OUT_A);
OnRev(OUT_C); //右折
}
if ((SENSOR_1< light)&&(SENSOR_3>light)) //左が黒、右が白の場合
{
OnFwd(OUT_C);
OnRev(OUT_A); //左折
}
if (SENSOR_2==1) //タッチセンサーが作動する場合
{
front(50); //0,5秒前進
turn_left(90); //左に180度旋回
back(50); //0,5秒後退し、牛乳パックを置く
turn_left(90); //左に180度旋回
}
}
if((SENSOR_1<light)&&(SENSOR_3<light)) //左右両方黒の場合
{
Off(OUT_A+OUT_C); //停止
Wait(200);
OnFwd(OUT_A+OUT_C); //前進
Wait(50);
n=n+1; //関数nに+1する
}
Off(OUT_A+OUT_C); //停止
}
}
**Y.Yのプログラム (紙パック回避)[#w05d9aaa]
#define time 65
#define light 50
#define front(t) OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C); //前進の定義
#define back(t) OnRev(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C); //後退の定義
#define turn_left OnFwd(OUT_C);OnRev(OUT_A);Wait(time);Off(OUT_A+OUT_C); //左折の定義
#define turn_right OnFwd(OUT_A);OnRev(OUT_C);Wait(time);Off(OUT_A+OUT_C); //右折の定義
sub avoid() //紙パックを避ける
{
back(50); //後退
turn_right; //右折
front(150); //前進
turn_left; //左折
front(250); //前進
turn_left; //左折
front(150); //前進
turn_right; //右折
}
task main ()
{
SetSensor(SENSOR_1, SENSOR_LIGHT);
SetSensor(SENSOR_2, SENSOR_TOUCH);
SetSensor(SENSOR_3, SENSOR_LIGHT);
int n; //交差点を通った回数をカウントする
n=0;
while(n<12)
{
if ((SENSOR_1>light)&&(SENSOR_3>light)) //左右両方が白の場合
{
OnFwd(OUT_A+OUT_C); //前進
}
if ((SENSOR_1> light)&&(SENSOR_3<light)) //左が白、右が黒の場合
{
OnFwd(OUT_A);
OnRev(OUT_C); //右折
}
if ((SENSOR_1< light)&&(SENSOR_3>light)) //左が黒、右が白の場合
{
OnFwd(OUT_C);
OnRev(OUT_A); //左折
}
if (SENSOR_2==1) //タッチセンサーが作動する場合
{
avoid(); //紙パック回避
}
if((SENSOR_1<light)&&(SENSOR_3<light)) //左右両方黒の場合
{
Off(OUT_A+OUT_C); //停止
Wait(200);
OnFwd(OUT_A+OUT_C); //前進
Wait(50);
n=n+1; //関数nに+1する
}
Off(OUT_A+OUT_C); //停止
}
}
*感想 [#d4370612]
Mas:プログラミングにおいてもロボ作りにおいても、Y.Y氏に迷惑をかけっぱなしだった。ごめんなさい。
Y.Y:
今回も前回と同じでロボの制作に手間取ってしまい、なかなかプログラムが出来なかった。
4輪を3輪に変えたとき以前よりも遥かによく曲がるようになってびっくりした。
紙パックを避けるプログラムはあまり思い通りにいかないので大変だった。
**コメント [#w84e1655]
コメントをお願いします
- ぜひインデント(ifの階層などごとに入れる字下げ)を入れてください。どこからどこまでがどのifの中身なのかわかりやすくなります。シンプルでわかりやすいプログラムですが、nが何をカウントしているかなどもぜひ説明してください。 -- [[こさか]] &new{2009-07-10 (金) 12:24:32};
- インデントで格段に見やすくなりました。nの説明もOKです(交差点4回で1周なんですよね?)。 -- [[こさか]] &new{2009-07-17 (金) 04:05:24};
- はい、交差点4回で1周です。 -- [[Y.Y]] &new{2009-07-17 (金) 16:37:13};
- シンプルでわかりやすくまとめられています。今のままで十分ですが、欲を言えば淡白すぎるかもしれません。内容はごちゃごちゃしてない方がいいのですが、説明は詳しい方がいいです。図や動画を使って、各部分がロボットのどのような動きと対応しているか、フローチャートなどを用いて全体の動きをわかりやすくするなどです -- [[FI]] &new{2009-07-26 (日) 07:46:19};
#comment
終了行:
[[2009a]]課題2 黒い線に沿って動くロボット
*目次 [#n63933ef]
#contents
*メンバー紹介 [#hc046c2b]
-まさと:主にホームページの作成担当
-Y.Y:主にロボットの製作担当
*課題内容 [#ib6c29f4]
1.紙パックを迂回する、あるいは紙パックをもとの位置に戻したのちコースに戻って進む
2.紙パックを次の交差点まで運んで行き、その交差点に紙パックを残してさらに黒い線に沿って進む
*ただしどちらの場合においても速さと正確さを追求し、コースを3周したら自動的に止まらなければならない
*コースの紹介 [#u41c67c5]
ロボが反応しやすいよう交差点を直交させ、できるだけシンプルなコースに。
そのため直線を多用したコースになっている。
&ref(090703_1558~01.jpg);
*ロボットの紹介 [#j7d3fc30]
最終的なロボの全体像。少し大きくなり過ぎてしまった感は否めない。
そのため曲がる際に設置した紙パックを動かしてしまうこともしばしば。
&ref(090703_1620~01.jpg);
初めはタイヤ4つでいこうと思っていたが、もう少しスムーズに曲がれるようにこのような形にした。
ただ、少し強度が弱かったので途中はずれてしまうこともあった。
&ref(090703_1620~02.jpg);
最初は光センサーの反応が悪く、コースに沿って進むことができなかった。光センサーを紙面にできるだけ近づけることで解消された。
コース通りに進んでくれたときは少し感動した。
&ref(090703_1621~01.jpg);
紙パックに対する反応の精度を上げるためにこのような形になった。以前はタッチセンサーが反応せずに、そのまま運んでいってしまっていた。
&ref(090703_1621~02.jpg);
*プログラムの紹介 [#rcd02ec0]
**まさとのプログラム [#l25d8b96]
#define front(t) OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C); //前進の定義
#define back(t) OnRev(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C); //後退の定義
#define turn_left OnFwd(OUT_C);OnRev(OUT_A);Wait(time);Off(OUT_A+OUT_C); //左折の定義
#define turn_right OnFwd(OUT_A);OnRev(OUT_C);Wait(time);Off(OUT_A+OUT_C); //右折の定義
task main ()
{
SetSensor(SENSOR_1, SENSOR_LIGHT);
SetSensor(SENSOR_2, SENSOR_TOUCH);
SetSensor(SENSOR_3, SENSOR_LIGHT);
int n; //交差点を通った回数
n=0;
while(n<12)
{
if ((SENSOR_1>light)&&(SENSOR_3>light)) //左右両方が白の場合
{
OnFwd(OUT_A+OUT_C); //前進
}
if ((SENSOR_1> light)&&(SENSOR_3<light)) //左が白、右が黒の場 合
{
OnFwd(OUT_A);
OnRev(OUT_C); //右折
}
if ((SENSOR_1< light)&&(SENSOR_3>light)) //左が黒、右が白の場合
{
OnFwd(OUT_C);
OnRev(OUT_A); //左折
}
if (SENSOR_2==1) //タッチセンサーが作動する場合
{
front(50); //0,5秒前進
turn_left(90); //左に180度旋回
back(50); //0,5秒後退し、牛乳パックを置く
turn_left(90); //左に180度旋回
}
}
if((SENSOR_1<light)&&(SENSOR_3<light)) //左右両方黒の場合
{
Off(OUT_A+OUT_C); //停止
Wait(200);
OnFwd(OUT_A+OUT_C); //前進
Wait(50);
n=n+1; //関数nに+1する
}
Off(OUT_A+OUT_C); //停止
}
}
**Y.Yのプログラム (紙パック回避)[#w05d9aaa]
#define time 65
#define light 50
#define front(t) OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C); //前進の定義
#define back(t) OnRev(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C); //後退の定義
#define turn_left OnFwd(OUT_C);OnRev(OUT_A);Wait(time);Off(OUT_A+OUT_C); //左折の定義
#define turn_right OnFwd(OUT_A);OnRev(OUT_C);Wait(time);Off(OUT_A+OUT_C); //右折の定義
sub avoid() //紙パックを避ける
{
back(50); //後退
turn_right; //右折
front(150); //前進
turn_left; //左折
front(250); //前進
turn_left; //左折
front(150); //前進
turn_right; //右折
}
task main ()
{
SetSensor(SENSOR_1, SENSOR_LIGHT);
SetSensor(SENSOR_2, SENSOR_TOUCH);
SetSensor(SENSOR_3, SENSOR_LIGHT);
int n; //交差点を通った回数をカウントする
n=0;
while(n<12)
{
if ((SENSOR_1>light)&&(SENSOR_3>light)) //左右両方が白の場合
{
OnFwd(OUT_A+OUT_C); //前進
}
if ((SENSOR_1> light)&&(SENSOR_3<light)) //左が白、右が黒の場合
{
OnFwd(OUT_A);
OnRev(OUT_C); //右折
}
if ((SENSOR_1< light)&&(SENSOR_3>light)) //左が黒、右が白の場合
{
OnFwd(OUT_C);
OnRev(OUT_A); //左折
}
if (SENSOR_2==1) //タッチセンサーが作動する場合
{
avoid(); //紙パック回避
}
if((SENSOR_1<light)&&(SENSOR_3<light)) //左右両方黒の場合
{
Off(OUT_A+OUT_C); //停止
Wait(200);
OnFwd(OUT_A+OUT_C); //前進
Wait(50);
n=n+1; //関数nに+1する
}
Off(OUT_A+OUT_C); //停止
}
}
*感想 [#d4370612]
Mas:プログラミングにおいてもロボ作りにおいても、Y.Y氏に迷惑をかけっぱなしだった。ごめんなさい。
Y.Y:
今回も前回と同じでロボの制作に手間取ってしまい、なかなかプログラムが出来なかった。
4輪を3輪に変えたとき以前よりも遥かによく曲がるようになってびっくりした。
紙パックを避けるプログラムはあまり思い通りにいかないので大変だった。
**コメント [#w84e1655]
コメントをお願いします
- ぜひインデント(ifの階層などごとに入れる字下げ)を入れてください。どこからどこまでがどのifの中身なのかわかりやすくなります。シンプルでわかりやすいプログラムですが、nが何をカウントしているかなどもぜひ説明してください。 -- [[こさか]] &new{2009-07-10 (金) 12:24:32};
- インデントで格段に見やすくなりました。nの説明もOKです(交差点4回で1周なんですよね?)。 -- [[こさか]] &new{2009-07-17 (金) 04:05:24};
- はい、交差点4回で1周です。 -- [[Y.Y]] &new{2009-07-17 (金) 16:37:13};
- シンプルでわかりやすくまとめられています。今のままで十分ですが、欲を言えば淡白すぎるかもしれません。内容はごちゃごちゃしてない方がいいのですが、説明は詳しい方がいいです。図や動画を使って、各部分がロボットのどのような動きと対応しているか、フローチャートなどを用いて全体の動きをわかりやすくするなどです -- [[FI]] &new{2009-07-26 (日) 07:46:19};
#comment
ページ名: