2016a/Member/Unredeemedsoul/Mission3
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
#contents
*課題の説明 [#ea3af44c]
課題3はっ課題2の時作った図を使い、C地点とD地点にコ...
課題2の時作った図:
#ref(99AA.jpg)
また、RIS1を使っている班とRIS2を使っているグルー...
グループメンバー:
・[[yamamoto>http://yakushi.shinshu-u.ac.jp/robotics/?201...
・[[fujison>http://yakushi.shinshu-u.ac.jp/robotics/?2016...
・[[kuzusan>http://yakushi.shinshu-u.ac.jp/robotics/?2016...
・[[yamazaki>http://yakushi.shinshu-u.ac.jp/robotics/?201...
・yui
と私の6人のグループ
*ロボットの説明 [#a34f18c5]
二つのロボットを作り、一つには二つの光センサーを付けた。...
壁になっているロボット
#ref(Doba.JPG)
紙コップを運ぶロボット
#ref(Dabadebo.JPG)
**紙コップを運ぶロボット [#x61256fb]
光センサーについて
このロボットに以上書いたように、光センサーを二つつけた。...
ロボットのアーム
作ったロボットのアームの仕組みは先生が授業で話していた...
以下の写真のようにアームを作りました。
#ref(nine.JPG)
**壁のロボット。 [#l5fa1233]
壁のロボットはQ地点で待ち、そして紙コップが落ちないよ...
#ref(AAA.JPG)
*問題点 [#ae0e2d14]
紙を運ぶロボットの光センサーの位置で問題があり、時々アー...
また、壁になっているロボットは後ろに行くとプログラムした...
赤い線のようにまっすぐ行くはずだったが、青い線のようにな...
#ref(al7ob.png)
競技の前に良い位置を見つけようとして、その位置に置いたら...
*プログラム [#o64329e6]
プログラムのほとんどは山崎さんがやったので、詳しい説明の...
そして以下の写真で示されている順番で紙コップを運んで行く。
#ref(37.jpg)
#ref(38.jpg)
**壁になっているロボット [#h9eed36d]
このロボットで紙コップを支える。紙コップを支えるために認...
***マクロの定義 [#gbb65482]
#define SIGNALON 121 //通信用
***メインプログラム [#ecb01950]
task main()
{
ClearMessage();
ClearTimer(0);
OnRev(OUT_AC); //Q地点まで移動
Wait(450);
Off(OUT_AC);
OnRev(OUT_A); //向き調整
OnFwd(OUT_C);
Wait(5);
Off(OUT_AC);
until(Message() == SIGNALON); //通信するまで動作停止
Wait(150); //紙コップが置かれたらアームで調整
OnFwd(OUT_B);
Wait(10);
Off(OUT_B);
Wait(30000); //紙コップが集め終わるまで動作停止(あま...
OnRev(OUT_B); //アームを広げる
Wait(20);
Off(OUT_B);
OnRev(OUT_AC); //紙コップから離れる
Wait(30);
Off(OUT_AC);
}
**紙を運ぶロボット [#c0c793e7]
***マクロの定義 [#x655efe3]
#define SIGNALON 121 ...
#define MIDDLE 50 ...
#define WHITE 50 ...
#define turn_left1 SetPower(OUT_AC,2); Off(OUT_A); OnF...
#define turn_left2 SetPower(OUT_A,1); OnRev(OUT_A); On...
#define turn_right1 SetPower(OUT_AC,2); OnFwd(OUT_A); ...
#define turn_right2 SetPower(OUT_C,1); OnFwd(OUT_A); O...
#define go_forward SetPower(OUT_AC,7); OnFwd(OUT_AC); ...
***数値の定義 [#wdbb56e7]
以下の定義でどのコップの集める動作をやるか判断できるよう...
int cup_count=0; //コップのカウント
***サブルーチン [#zad2e9d5]
ライントレースは課題2の時、作ったプログラムを使ってやっ...
sub trace() //ライントレース
{
while(FastTimer(0) < 26) //左旋回が一定時間続くまでループ
{
if(SENSOR_2 < MIDDLE-5) //黒
{
turn_left2; //左旋回
}
else
{
if(SENSOR_2 < MIDDLE-2) //中間に近い黒
{
turn_left1; //左曲がり
}
else if(SENSOR_2 < MIDDLE+3) //中間
{
go_forward; //直進
}
else if(SENSOR_2 < MIDDLE+6) //中間に近い白
{
turn_right1; //右曲がり
}
else //白
{
turn_right2; //右旋回
}
ClearTimer(0);
}
}
}
sub i_forward() //直進
{
turn_right2;
Wait(30);
go_forward;
Wait(50);
Off(OUT_AC);
}
sub i_left() //左折
{
turn_left2;
Wait(45);
Off(OUT_AC);
}
sub i_right() //右折
{
turn_right2;
Wait(30);
go_forward;
Wait(30);
turn_right2;
Wait(80);
Off(OUT_AC);
}
CとDのそれぞれの1つ目のコップの動作
sub cup1()
{
turn_right2; //紙コップまで方向調整
Wait(25);
SetPower(OUT_AC,1); //紙コップまで移動
OnFwd(OUT_AC);
while(SENSOR_3 <= WHITE);
Off(OUT_AC);
OnRev(OUT_B); //紙コップをつかむ
Wait(150);
Off(OUT_B);
turn_right2; //ラインまで移動
Wait(180);
go_forward;
Wait(20);
}
CとDのそれぞれの2つ目のコップの動作
sub cup2()
{
SetPower(OUT_AC,1); //紙コップまで移動
OnFwd(OUT_AC);
while(SENSOR_3 <= WHITE);
Off(OUT_AC);
OnRev(OUT_B); //紙コップをつかむ
Wait(150);
Off(OUT_B);
turn_right2; //ラインまで移動
Wait(180);
go_forward;
Wait(120);
}
CとDのそれぞれの3つ目のコップの動作
sub cup3()
{
turn_right2; //紙コップまで方向調整
Wait(45);
SetPower(OUT_AC,1); //紙コップまで移動
OnFwd(OUT_AC);
while(SENSOR_3 <= WHITE);
Off(OUT_AC);
OnRev(OUT_B); //紙コップをつかむ
Wait(150);
Off(OUT_B);
turn_right2; //ラインまで移動
Wait(170);
go_forward;
Wait(100);
}
そしてコップを下すときの動作
sub cup_down()
{
turn_left2; //コップを下す位置まで移動
Wait(5);
OnRev(OUT_AC);
Wait(5);
Off(OUT_AC);
if(cup_count == 1) //最初のコップを置くとき
{
SendMessage(SIGNALON); //もう一台の動作を再開する
}
OnFwd(OUT_B);
Wait(50);
Off(OUT_B);
if(cup_count == 1) //最初のコップを置いたとき
{
OnFwd(OUT_AC); //コップを少し前に押す
Wait(10);
}
OnRev(OUT_AC); //ラインまで移動
Wait(60);
turn_left2;
Wait(120);
go_forward;
Wait(50);
}
***メインプログラム [#k848d930]
以下はメインプログラムで、交差点を認識するときcの値が増...
詳しく[[こちら>http://yakushi.shinshu-u.ac.jp/robotics/?2...
task main()
{
SetSensor(SENSOR_2, SENSOR_LIGHT);
SetSensor(SENSOR_3, SENSOR_LIGHT);
int c=1; //交差点の確認
int d=0; //1になったら動作停止
int course_check=0; //0ならC地点へ、1ならD地点へ
SetPower(OUT_B,1); //コップをつかむときのモータをできる...
go_forward; //ラインまで直進
Wait(80);
while(d == 0)
{
ClearTimer(0);
trace(); //ライントレース
Off(OUT_AC); //交差点確認
PlaySound(SOUND_UP);
Wait(100);
switch(c)
{
case 1: //最初の交差点
i_left(); //S地点へ
break;
case 2: //S地点の交差点
if(course_check == 0)
{
i_right(); //C地点へ
}
else
{
i_left(); //D地点へ
}
break;
case 3: //C地点かD地点
if(cup_count < 2) //集めたコップが2つより少ないなら
{
cup1();
}
else if(cup_count < 4) //集めたコップが4つより少ない...
{
cup2();
}
else //集めたコップが4つ以上なら
{
cup3();
}
cup_count++;
break;
case 4:
if(course_check == 0) //C地点から戻ってきたら
{
i_left(); //P地点へ
course_check = 1; //次はD地点へ
}
else //D地点から戻ってきたら
{
i_right(); //P地点へ
course_check = 0; //次はC地点へ
}
break;
case 5: //P地点の交差点
i_left(); //Q地点へ
break;
case 6: //Q地点の交差点
cup_down();
if(cup_count == 6) //コップを集め終わったら
{
d = 1; //動作停止
}
break;
case 7: //P地点の交差点
i_right(); //S地点へ
c = 1; //case 2に戻る
break;
}
c++;
}
Off(OUT_ABC);
}
*結果 [#ff181846]
私たちのグループは競技で一回目は紙コップを運んだが、壁の...
*感想 [#c3353c28]
今回の課題は本当に難しくて、完成するために時間がたくさん...
この授業を通して、私はプログラミングについていろいろなこ...
終了行:
#contents
*課題の説明 [#ea3af44c]
課題3はっ課題2の時作った図を使い、C地点とD地点にコ...
課題2の時作った図:
#ref(99AA.jpg)
また、RIS1を使っている班とRIS2を使っているグルー...
グループメンバー:
・[[yamamoto>http://yakushi.shinshu-u.ac.jp/robotics/?201...
・[[fujison>http://yakushi.shinshu-u.ac.jp/robotics/?2016...
・[[kuzusan>http://yakushi.shinshu-u.ac.jp/robotics/?2016...
・[[yamazaki>http://yakushi.shinshu-u.ac.jp/robotics/?201...
・yui
と私の6人のグループ
*ロボットの説明 [#a34f18c5]
二つのロボットを作り、一つには二つの光センサーを付けた。...
壁になっているロボット
#ref(Doba.JPG)
紙コップを運ぶロボット
#ref(Dabadebo.JPG)
**紙コップを運ぶロボット [#x61256fb]
光センサーについて
このロボットに以上書いたように、光センサーを二つつけた。...
ロボットのアーム
作ったロボットのアームの仕組みは先生が授業で話していた...
以下の写真のようにアームを作りました。
#ref(nine.JPG)
**壁のロボット。 [#l5fa1233]
壁のロボットはQ地点で待ち、そして紙コップが落ちないよ...
#ref(AAA.JPG)
*問題点 [#ae0e2d14]
紙を運ぶロボットの光センサーの位置で問題があり、時々アー...
また、壁になっているロボットは後ろに行くとプログラムした...
赤い線のようにまっすぐ行くはずだったが、青い線のようにな...
#ref(al7ob.png)
競技の前に良い位置を見つけようとして、その位置に置いたら...
*プログラム [#o64329e6]
プログラムのほとんどは山崎さんがやったので、詳しい説明の...
そして以下の写真で示されている順番で紙コップを運んで行く。
#ref(37.jpg)
#ref(38.jpg)
**壁になっているロボット [#h9eed36d]
このロボットで紙コップを支える。紙コップを支えるために認...
***マクロの定義 [#gbb65482]
#define SIGNALON 121 //通信用
***メインプログラム [#ecb01950]
task main()
{
ClearMessage();
ClearTimer(0);
OnRev(OUT_AC); //Q地点まで移動
Wait(450);
Off(OUT_AC);
OnRev(OUT_A); //向き調整
OnFwd(OUT_C);
Wait(5);
Off(OUT_AC);
until(Message() == SIGNALON); //通信するまで動作停止
Wait(150); //紙コップが置かれたらアームで調整
OnFwd(OUT_B);
Wait(10);
Off(OUT_B);
Wait(30000); //紙コップが集め終わるまで動作停止(あま...
OnRev(OUT_B); //アームを広げる
Wait(20);
Off(OUT_B);
OnRev(OUT_AC); //紙コップから離れる
Wait(30);
Off(OUT_AC);
}
**紙を運ぶロボット [#c0c793e7]
***マクロの定義 [#x655efe3]
#define SIGNALON 121 ...
#define MIDDLE 50 ...
#define WHITE 50 ...
#define turn_left1 SetPower(OUT_AC,2); Off(OUT_A); OnF...
#define turn_left2 SetPower(OUT_A,1); OnRev(OUT_A); On...
#define turn_right1 SetPower(OUT_AC,2); OnFwd(OUT_A); ...
#define turn_right2 SetPower(OUT_C,1); OnFwd(OUT_A); O...
#define go_forward SetPower(OUT_AC,7); OnFwd(OUT_AC); ...
***数値の定義 [#wdbb56e7]
以下の定義でどのコップの集める動作をやるか判断できるよう...
int cup_count=0; //コップのカウント
***サブルーチン [#zad2e9d5]
ライントレースは課題2の時、作ったプログラムを使ってやっ...
sub trace() //ライントレース
{
while(FastTimer(0) < 26) //左旋回が一定時間続くまでループ
{
if(SENSOR_2 < MIDDLE-5) //黒
{
turn_left2; //左旋回
}
else
{
if(SENSOR_2 < MIDDLE-2) //中間に近い黒
{
turn_left1; //左曲がり
}
else if(SENSOR_2 < MIDDLE+3) //中間
{
go_forward; //直進
}
else if(SENSOR_2 < MIDDLE+6) //中間に近い白
{
turn_right1; //右曲がり
}
else //白
{
turn_right2; //右旋回
}
ClearTimer(0);
}
}
}
sub i_forward() //直進
{
turn_right2;
Wait(30);
go_forward;
Wait(50);
Off(OUT_AC);
}
sub i_left() //左折
{
turn_left2;
Wait(45);
Off(OUT_AC);
}
sub i_right() //右折
{
turn_right2;
Wait(30);
go_forward;
Wait(30);
turn_right2;
Wait(80);
Off(OUT_AC);
}
CとDのそれぞれの1つ目のコップの動作
sub cup1()
{
turn_right2; //紙コップまで方向調整
Wait(25);
SetPower(OUT_AC,1); //紙コップまで移動
OnFwd(OUT_AC);
while(SENSOR_3 <= WHITE);
Off(OUT_AC);
OnRev(OUT_B); //紙コップをつかむ
Wait(150);
Off(OUT_B);
turn_right2; //ラインまで移動
Wait(180);
go_forward;
Wait(20);
}
CとDのそれぞれの2つ目のコップの動作
sub cup2()
{
SetPower(OUT_AC,1); //紙コップまで移動
OnFwd(OUT_AC);
while(SENSOR_3 <= WHITE);
Off(OUT_AC);
OnRev(OUT_B); //紙コップをつかむ
Wait(150);
Off(OUT_B);
turn_right2; //ラインまで移動
Wait(180);
go_forward;
Wait(120);
}
CとDのそれぞれの3つ目のコップの動作
sub cup3()
{
turn_right2; //紙コップまで方向調整
Wait(45);
SetPower(OUT_AC,1); //紙コップまで移動
OnFwd(OUT_AC);
while(SENSOR_3 <= WHITE);
Off(OUT_AC);
OnRev(OUT_B); //紙コップをつかむ
Wait(150);
Off(OUT_B);
turn_right2; //ラインまで移動
Wait(170);
go_forward;
Wait(100);
}
そしてコップを下すときの動作
sub cup_down()
{
turn_left2; //コップを下す位置まで移動
Wait(5);
OnRev(OUT_AC);
Wait(5);
Off(OUT_AC);
if(cup_count == 1) //最初のコップを置くとき
{
SendMessage(SIGNALON); //もう一台の動作を再開する
}
OnFwd(OUT_B);
Wait(50);
Off(OUT_B);
if(cup_count == 1) //最初のコップを置いたとき
{
OnFwd(OUT_AC); //コップを少し前に押す
Wait(10);
}
OnRev(OUT_AC); //ラインまで移動
Wait(60);
turn_left2;
Wait(120);
go_forward;
Wait(50);
}
***メインプログラム [#k848d930]
以下はメインプログラムで、交差点を認識するときcの値が増...
詳しく[[こちら>http://yakushi.shinshu-u.ac.jp/robotics/?2...
task main()
{
SetSensor(SENSOR_2, SENSOR_LIGHT);
SetSensor(SENSOR_3, SENSOR_LIGHT);
int c=1; //交差点の確認
int d=0; //1になったら動作停止
int course_check=0; //0ならC地点へ、1ならD地点へ
SetPower(OUT_B,1); //コップをつかむときのモータをできる...
go_forward; //ラインまで直進
Wait(80);
while(d == 0)
{
ClearTimer(0);
trace(); //ライントレース
Off(OUT_AC); //交差点確認
PlaySound(SOUND_UP);
Wait(100);
switch(c)
{
case 1: //最初の交差点
i_left(); //S地点へ
break;
case 2: //S地点の交差点
if(course_check == 0)
{
i_right(); //C地点へ
}
else
{
i_left(); //D地点へ
}
break;
case 3: //C地点かD地点
if(cup_count < 2) //集めたコップが2つより少ないなら
{
cup1();
}
else if(cup_count < 4) //集めたコップが4つより少ない...
{
cup2();
}
else //集めたコップが4つ以上なら
{
cup3();
}
cup_count++;
break;
case 4:
if(course_check == 0) //C地点から戻ってきたら
{
i_left(); //P地点へ
course_check = 1; //次はD地点へ
}
else //D地点から戻ってきたら
{
i_right(); //P地点へ
course_check = 0; //次はC地点へ
}
break;
case 5: //P地点の交差点
i_left(); //Q地点へ
break;
case 6: //Q地点の交差点
cup_down();
if(cup_count == 6) //コップを集め終わったら
{
d = 1; //動作停止
}
break;
case 7: //P地点の交差点
i_right(); //S地点へ
c = 1; //case 2に戻る
break;
}
c++;
}
Off(OUT_ABC);
}
*結果 [#ff181846]
私たちのグループは競技で一回目は紙コップを運んだが、壁の...
*感想 [#c3353c28]
今回の課題は本当に難しくて、完成するために時間がたくさん...
この授業を通して、私はプログラミングについていろいろなこ...
ページ名: