2017b/Member/takeshi/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2017b/Member]]
* 課題2 下の図のようなコースを各チームで作成し、「ミッ...
** コースとミッション [#n33fc0ec]
#ref(2017b/Member/takeshi/Mission2/課題2のコース.png,640x...
私は第2コースを選んだ。第2コースのミッションは以下の通り
1.Dをスタート
2.Cを直進
3.Bを左折
4.Pを左折(一時停止)
5.Qを直進
6.Rを左折
7.Fを左折
8.Sを直進(一時停止)
9.Y地点の紙コップを取得してコースに戻る
10.Sを直進(一時停止)
11.Qを左折(一時停止)
12.Rを直進
13.X地点に紙コップを置いてコースに戻る
14.Pを左折
15.B を左折(一時停止)
16.A地点へ(ゴール)
* ロボットの全体図 [#bcfbca0a]
#ref(2017b/Member/takeshi/Mission2/s_s_2.JPG,480x640,ロボ...
光センサーはなるべく地面に近づけるようにして直角に取り付...
#ref(2017b/Member/takeshi/Mission2/s_IMG_4823.JPG,480x640...
ロボットの前方に紙コップを取るためのアームを取り付けた。...
#ref(2017b/Member/takeshi/Mission2/紙コップを取る.png,640...
アームが紙コップの位置に来るようにロボットを移動させてア...
一発勝負なので枠は大きな正方形にした。
#ref(2017b/Member/takeshi/Mission2/s_IMG_4822.JPG,480x640...
相方がロボットの左側にタッチセンサーを利用したスタートボ...
* プログラム [#i1105a68]
** 基本的な動作を行うためのプログラム [#o1e7053c]
まず、直進する、緩やかに曲がる、旋回する、右左折の前に位...
#define go_forward OnFwd(OUT_A,30);OnFwd(OUT_B,30);//直進
#define turn_right1 OnFwd(OUT_A,0);OnFwd(OUT_B,55);//右...
#define turn_left1 OnFwd(OUT_A,50);OnFwd(OUT_B,0);//左に...
#define turn_right2 OnFwd(OUT_A,-50);OnFwd(OUT_B,55);//...
#define turn_left2 OnFwd(OUT_A,50);OnFwd(OUT_B,-55);//左...
#define before_turn OnFwd(OUT_AB,20);Wait(1000);//右左...
そして、紙コップを取るためのプログラムをサブ関数で定義し...
sub arm_down()//アームを下げる
{
ResetTachoCount(OUT_C);
RotateMotor(OUT_C,10,150);//モーターを150度前に回す
Wait(1000);
Off(OUT_C);
}
sub arm_up()//アームを上げる
{
ResetTachoCount(OUT_C);
RotateMotor(OUT_C,-10,150);モーターを150度後ろに回す
Wait(1000);
Off(OUT_C);
}
** 境界線上を走り、交差点を感知するためのプログラム [#i3e...
境界線の上を走り続けるには、境界線の上ならば直進、そうで...
#ref(2017b/Member/takeshi/Mission2/境界線の説明2.png,640x...
私はコース2を選択したので、画像のように黒い線の左側の境界...
#ref(2017b/Member/takeshi/Mission2/交差点の感知.png,640x4...
交差点を感知するためには黒をある一定の時間以上連続して感...
上記のプログラムを組み合わせた物がこれである。
#define threshold 50//境界線の光の強さ
sub follow_line()//境界線上を進む
{
SetSensorLight(S1);//光センサーの準備
long t0 = CurrentTick();//タイマーをセット
while (CurrentTick()-t0 < 80)//タイマーセット後の経過...
{ if (SENSOR_1 < threshold -13) {
turn_left2; }//黒ければ左旋回
else if (SENSOR_1 < threshold -7) {
turn_left1;t0=CurrentTick() }//少し黒ければ左に緩やか...
else if (SENSOR_1 < threshold){
go_forward;t0=CurrentTick() }//境界線上ならば直進し、...
else if (SENSOR_1 < threshold +7){
turn_right1;t0=CurrentTick() }//少し白ければ右に緩や...
else {
turn_right2;t0=CurrentTick() }//白ければ右旋回し、タ...
}
Off(OUT_AB);
}
境界線の光の強さをマクロ関数で定義し、境界線上を進むプロ...
タイマーの部分が重要である。先ほど述べた「ある一定の時間...
*** ヘアピンカーブ問題 [#i44d0a7a]
このコースは、EF間にヘアピンカーブが存在する。EF間におい...
sub follow_line2()//黒を0.8秒以上連続して感知しても無視...
{
SetSensorLight(S1);
long t0 = CurrentTick();
while(CurrentTick()-t0 < 10000)//タイマーセット後の経...
{ if (SENSOR_1 < threshold -13) {
turn_left2; }
else if (SENSOR_1 < threshold -7) {
turn_left1; }
else if (SENSOR_1 < threshold){
go_forward;}
else if (SENSOR_1 < threshold +7){
turn_right1;}
else {
turn_right2;}
}
}
先ほどの「境界線上を進む」プログラムを改編して作った。EF...
#ref(2017b/Member/takeshi/Mission2/ヘアピンカーブ.png,640...
*** 交差点を感知した後、無視して直進するための緩衝材とな...
#ref(2017b/Member/takeshi/Mission2/境界線上に復帰.png,640...
交差点を感知するとロボットは停止するが、直進させようとし...
そのため、停止した後少しだけ前に進ませる単純なプログラム...
#define on_line OnFwd(OUT_B,20);OnFwd(OUT_A,15);Wait(150...
** ミッションを遂行するためのプログラム [#o2a2663b]
これまでに示したプログラムを組み合わせて課題2のミッション...
task main()
{
SetSensorTouch(S4);
while(SENSOR_4 == 0){}//ボタンを押すとwhileの条件を抜...
follow_line();
on_line;//Cを直進
follow_line();
PlaySound(SOUND_LOW_BEEP);//一時停止
before_turn;
turn_left2;//Bを左折
Wait(800);
follow_line();
before_turn;
turn_left2;//Pを左折
Wait(600);
follow_line();
before_turn;
turn_right2;//Qを直進
Wait(400);
follow_line();
before_turn;
turn_left2;//Rを左折
Wait(600);
follow_line();
before_turn;
turn_left2;//Eを左折
Wait(800);
follow_line2();//黒を0.8秒以上連続して感知しても無視...
follow_line();
before_turn;
turn_left2;//Fを左折
Wait(800);
follow_line();
PlaySound(SOUND_LOW_BEEP);//一時停止
on_line;//Sを直進
turn_right2;
Wait(300);
Off(OUT_AB);
arm_down();//アームを下ろす
turn_left2;
Wait(300);
Off(OUT_AB);
follow_line();
PlaySound(SOUND_LOW_BEEP);//一時停止
on_line;//Sを直進
follow_line();
PlaySound(SOUND_LOW_BEEP);//一時停止
before_turn;
turn_left2;//Qを左折
Wait(600);
follow_line();
on_line;//Rを直進
turn_right2;
Wait(1100);
Off(OUT_AB);
arm_up();//アームを上げる
turn_left2;
Wait(1100);
Off(OUT_AB);
follow_line();
before_turn;
turn_left2;//Pを左折
Wait(600);
follow_line();
PlaySound(SOUND_LOW_BEEP);//一時停止
before_turn;
turn_left2;//Bを左折
Wait(800);
follow_line();
on_line;
go_forward;
Wait(2000);
PlaySound(SOUND_UP);//Aに到着
}
スタートボタンを押すとプログラムの実行が始まるようにした。
一時停止しなければならないところと、ゴールしたときはブザ...
* 感想 [#da36f175]
課題1に比べると、ロボット自身が勝手に境界線上を進んでくれ...
終了行:
[[2017b/Member]]
* 課題2 下の図のようなコースを各チームで作成し、「ミッ...
** コースとミッション [#n33fc0ec]
#ref(2017b/Member/takeshi/Mission2/課題2のコース.png,640x...
私は第2コースを選んだ。第2コースのミッションは以下の通り
1.Dをスタート
2.Cを直進
3.Bを左折
4.Pを左折(一時停止)
5.Qを直進
6.Rを左折
7.Fを左折
8.Sを直進(一時停止)
9.Y地点の紙コップを取得してコースに戻る
10.Sを直進(一時停止)
11.Qを左折(一時停止)
12.Rを直進
13.X地点に紙コップを置いてコースに戻る
14.Pを左折
15.B を左折(一時停止)
16.A地点へ(ゴール)
* ロボットの全体図 [#bcfbca0a]
#ref(2017b/Member/takeshi/Mission2/s_s_2.JPG,480x640,ロボ...
光センサーはなるべく地面に近づけるようにして直角に取り付...
#ref(2017b/Member/takeshi/Mission2/s_IMG_4823.JPG,480x640...
ロボットの前方に紙コップを取るためのアームを取り付けた。...
#ref(2017b/Member/takeshi/Mission2/紙コップを取る.png,640...
アームが紙コップの位置に来るようにロボットを移動させてア...
一発勝負なので枠は大きな正方形にした。
#ref(2017b/Member/takeshi/Mission2/s_IMG_4822.JPG,480x640...
相方がロボットの左側にタッチセンサーを利用したスタートボ...
* プログラム [#i1105a68]
** 基本的な動作を行うためのプログラム [#o1e7053c]
まず、直進する、緩やかに曲がる、旋回する、右左折の前に位...
#define go_forward OnFwd(OUT_A,30);OnFwd(OUT_B,30);//直進
#define turn_right1 OnFwd(OUT_A,0);OnFwd(OUT_B,55);//右...
#define turn_left1 OnFwd(OUT_A,50);OnFwd(OUT_B,0);//左に...
#define turn_right2 OnFwd(OUT_A,-50);OnFwd(OUT_B,55);//...
#define turn_left2 OnFwd(OUT_A,50);OnFwd(OUT_B,-55);//左...
#define before_turn OnFwd(OUT_AB,20);Wait(1000);//右左...
そして、紙コップを取るためのプログラムをサブ関数で定義し...
sub arm_down()//アームを下げる
{
ResetTachoCount(OUT_C);
RotateMotor(OUT_C,10,150);//モーターを150度前に回す
Wait(1000);
Off(OUT_C);
}
sub arm_up()//アームを上げる
{
ResetTachoCount(OUT_C);
RotateMotor(OUT_C,-10,150);モーターを150度後ろに回す
Wait(1000);
Off(OUT_C);
}
** 境界線上を走り、交差点を感知するためのプログラム [#i3e...
境界線の上を走り続けるには、境界線の上ならば直進、そうで...
#ref(2017b/Member/takeshi/Mission2/境界線の説明2.png,640x...
私はコース2を選択したので、画像のように黒い線の左側の境界...
#ref(2017b/Member/takeshi/Mission2/交差点の感知.png,640x4...
交差点を感知するためには黒をある一定の時間以上連続して感...
上記のプログラムを組み合わせた物がこれである。
#define threshold 50//境界線の光の強さ
sub follow_line()//境界線上を進む
{
SetSensorLight(S1);//光センサーの準備
long t0 = CurrentTick();//タイマーをセット
while (CurrentTick()-t0 < 80)//タイマーセット後の経過...
{ if (SENSOR_1 < threshold -13) {
turn_left2; }//黒ければ左旋回
else if (SENSOR_1 < threshold -7) {
turn_left1;t0=CurrentTick() }//少し黒ければ左に緩やか...
else if (SENSOR_1 < threshold){
go_forward;t0=CurrentTick() }//境界線上ならば直進し、...
else if (SENSOR_1 < threshold +7){
turn_right1;t0=CurrentTick() }//少し白ければ右に緩や...
else {
turn_right2;t0=CurrentTick() }//白ければ右旋回し、タ...
}
Off(OUT_AB);
}
境界線の光の強さをマクロ関数で定義し、境界線上を進むプロ...
タイマーの部分が重要である。先ほど述べた「ある一定の時間...
*** ヘアピンカーブ問題 [#i44d0a7a]
このコースは、EF間にヘアピンカーブが存在する。EF間におい...
sub follow_line2()//黒を0.8秒以上連続して感知しても無視...
{
SetSensorLight(S1);
long t0 = CurrentTick();
while(CurrentTick()-t0 < 10000)//タイマーセット後の経...
{ if (SENSOR_1 < threshold -13) {
turn_left2; }
else if (SENSOR_1 < threshold -7) {
turn_left1; }
else if (SENSOR_1 < threshold){
go_forward;}
else if (SENSOR_1 < threshold +7){
turn_right1;}
else {
turn_right2;}
}
}
先ほどの「境界線上を進む」プログラムを改編して作った。EF...
#ref(2017b/Member/takeshi/Mission2/ヘアピンカーブ.png,640...
*** 交差点を感知した後、無視して直進するための緩衝材とな...
#ref(2017b/Member/takeshi/Mission2/境界線上に復帰.png,640...
交差点を感知するとロボットは停止するが、直進させようとし...
そのため、停止した後少しだけ前に進ませる単純なプログラム...
#define on_line OnFwd(OUT_B,20);OnFwd(OUT_A,15);Wait(150...
** ミッションを遂行するためのプログラム [#o2a2663b]
これまでに示したプログラムを組み合わせて課題2のミッション...
task main()
{
SetSensorTouch(S4);
while(SENSOR_4 == 0){}//ボタンを押すとwhileの条件を抜...
follow_line();
on_line;//Cを直進
follow_line();
PlaySound(SOUND_LOW_BEEP);//一時停止
before_turn;
turn_left2;//Bを左折
Wait(800);
follow_line();
before_turn;
turn_left2;//Pを左折
Wait(600);
follow_line();
before_turn;
turn_right2;//Qを直進
Wait(400);
follow_line();
before_turn;
turn_left2;//Rを左折
Wait(600);
follow_line();
before_turn;
turn_left2;//Eを左折
Wait(800);
follow_line2();//黒を0.8秒以上連続して感知しても無視...
follow_line();
before_turn;
turn_left2;//Fを左折
Wait(800);
follow_line();
PlaySound(SOUND_LOW_BEEP);//一時停止
on_line;//Sを直進
turn_right2;
Wait(300);
Off(OUT_AB);
arm_down();//アームを下ろす
turn_left2;
Wait(300);
Off(OUT_AB);
follow_line();
PlaySound(SOUND_LOW_BEEP);//一時停止
on_line;//Sを直進
follow_line();
PlaySound(SOUND_LOW_BEEP);//一時停止
before_turn;
turn_left2;//Qを左折
Wait(600);
follow_line();
on_line;//Rを直進
turn_right2;
Wait(1100);
Off(OUT_AB);
arm_up();//アームを上げる
turn_left2;
Wait(1100);
Off(OUT_AB);
follow_line();
before_turn;
turn_left2;//Pを左折
Wait(600);
follow_line();
PlaySound(SOUND_LOW_BEEP);//一時停止
before_turn;
turn_left2;//Bを左折
Wait(800);
follow_line();
on_line;
go_forward;
Wait(2000);
PlaySound(SOUND_UP);//Aに到着
}
スタートボタンを押すとプログラムの実行が始まるようにした。
一時停止しなければならないところと、ゴールしたときはブザ...
* 感想 [#da36f175]
課題1に比べると、ロボット自身が勝手に境界線上を進んでくれ...
ページ名: