2016a/Member/fujison/Mission3
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2016a/Member]]
*目次 [#t6aa239e]
#contents
*課題3の説明 [#xeb46890]
**基本ルール [#h818305c]
ロボットコンテスト(課題3)は課題2で作成したコースを用...
**注意点 [#h405738f]
-2台のロボットはA地点とB地点からスタートする。
-紙コップは(C地点のコップ)→(D地点のコップ)の順に重ね...
-最終的に紙コップはロボットが触れていない状態で自立してい...
-競技時間は紙コップをすべて(最大6個)重ねるか、審判が続...
-競技が終わるまでロボットに触れてはいけない。
~課題3のルールの詳細は[[こちら:http://yakushi.shinshu-u....
~課題2の詳細は[[こちら:http://yakushi.shinshu-u.ac.jp/ro...
**紙コップの配置 [#y9f21e8b]
今回の課題では各地点の枠内であれば自由に紙コップを配置し...
~私たちの班は次の図のように紙コップを配置した。
#ref(./紙コップ配置.png,50%,紙コップの配置)
*ロボット1 [#jaa4c235]
**役割 [#y6ef6d56]
このロボットはA地点からスタートし、コース中央で待機する。...
~光センサを2個ともロボット2に使ってしまったので、ロボット...
※本来はその予定で作ったが、最初のスタート位置のずれやロボ...
**構造 [#m7793056]
【ロボット全体像】
#ref(./image17.JPG,70%,ロボット1全体像)
【ロボット前側】
#ref(./image16.PNG,25%,ロボット1前側)
【力の向きの変換】
~今回使用したモーターの回転はもともと縦方向である。そのた...
#ref(./image19.PNG,70%,力の変換)
【改良点】
-緑の枠…ロボット2がコップを下すときにロボット1のアームが...
-青の枠…タイヤを小さくし、ロボット2の動作の邪魔にならない...
-赤の枠…留め具はできるだけ小さいものを選び、高さをなくす...
#ref(./image20.JPG,100%,改良点)
**プログラム [#b64112f4]
~【定義】
#define SIGNALON 121 //121の値をロボット2から受信した...
~※値は0〜255までの値をメッセージとして送受信できる。
~【基本動作】
ClearMessage //メッセージ( )の値を0に初期化...
ClearTimer(0) //Timer(0)をリセット
OnFwd(OUT_A) //Aのモータを正回転させる
OnRev(OUT_AC) //AとCのモータを逆回転させる
Wait(t) //前の動作をt秒間行い、その間次...
Off //モータを停止させる
~【メインプログラム】
task main()
{
ClearMessage();
ClearTimer(0);
OnRev(OUT_AC); //Q地点まで移動する
Wait(450);
Off(OUT_AC);
OnRev(OUT_A); //ロボット1の向...
OnFwd(OUT_C);
Wait(5);
Off(OUT_AC);
until(Message() == SIGNALON); //until…ある条件が...
Wait(150); //ロボット2が運...
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);
}
*ロボット2(つかむ・重ねる) [#je00e591]
**役割 [#r1389d1c]
このロボットはB地点からスタートし、ライントレースを行って...
**構造 [#d57fe889]
【ロボット2全体像横側】
#ref(./image25.jpg,90%,全体像横側)
【ロボット2全体像前側】
光センサーをアームと同じ面に付けることで、紙コップをつか...
このロボットは紙コップを重ねる際にロボット1との衝突を減ら...
#ref(./image26.jpg,90%,全体像前側)
【光センサー】
タッチセンサーでは紙コップに反応しない・紙コップがずれる...
上側(赤色の枠で囲まれた)光センサーは紙コップの識別のた...
下側(青色の枠で囲まれた)光センサーはライントレースのた...
※上側に紙コップ用、下側にライントレース用を付けた。この形...
#ref(./image21.jpg,50%,光センサー)
**つかむ・重ねる仕組み [#v8827f28]
紙コップを重ねるまでの手順は以下の通りである。
+アームが(アーム写真?の赤い矢印の方向に)閉じる。
+紙コップをつかむ。
~※紙コップ上側の淵がアームのタイヤ部分に引っかかることで...
#ref(./image24.png,50%,つかみ方)
+限界まで紙コップをつかむ。つまり、アーム写真?の赤い矢印...
+それまで、アームを閉じる方向にかかっていた力が、上向き(...
+アームは上へと動き紙コップが持ち上がる。
+下すときはモーターを逆向きに回せば、自動的に下り、アーム...
~※モーターの力の変換方法(アーム写真?の青い枠)は上側(ロ...
~【アーム写真?】
#ref(./image23.jpg,50%,アーム前側)
【アーム写真?】
#ref(./image11.JPG,50%,アーム横側)
【問題点】
~アームを上下に動かすときのスピードはアームのギア比(各ギ...
**プログラム [#n60595f3]
【定義】
#define SIGNALON 121 ...
#define MIDDLE 50 ...
#define WHITE 50 ...
#define turn_left1 SetPower(OUT_AC,2); Off(OUT_A); OnFwd...
#define turn_left2 SetPower(OUT_A,1); OnRev(OUT_A); OnFw...
#define turn_right1 SetPower(OUT_AC,2); OnFwd(OUT_A); Of...
#define turn_right2 SetPower(OUT_C,1); OnFwd(OUT_A); OnR...
#define go_forward SetPower(OUT_AC,7); OnFwd(OUT_AC); ...
int cup_count=0; //コップのカウント
【サブルーチン】
MIDDLE+3 //上でMIDDLEは50と定義されているので...
While(条件式) //括弧内の条件が満たされている間、指...
if(条件式) //括弧内の条件が成り立つとき、指定さ...
else if(条件式) //if以外の条件を決めることができる
~?ライントレース
~課題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() //CとDのそれぞれの1つ目...
{
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() //2つ目のコップ
{
SetPower(OUT_AC,1); //紙コップまで移動
OnFwd(OUT_AC);
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() //3つ目のコップ
{
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);
}
?コップを下し、ロボット1と通信する
~コップを前に押すことで2つ目以降のコップを重ねるときに、...
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);
}
【メインプログラム】
~ロボットが交差点を判断するたびに変数cの値を増やしていき...
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地点へ
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);
}
*結果 [#uef4b412]
私たちの班は、1回目はロボット1が正しい場所に行かず、その...
~その結果、基本点は3点、技術点は9.2点の合計12.2点を獲得...
*感想及び反省 [#jbbeb619]
今回は今までの技術を組み合わせた課題だった。しかし、プロ...
終了行:
[[2016a/Member]]
*目次 [#t6aa239e]
#contents
*課題3の説明 [#xeb46890]
**基本ルール [#h818305c]
ロボットコンテスト(課題3)は課題2で作成したコースを用...
**注意点 [#h405738f]
-2台のロボットはA地点とB地点からスタートする。
-紙コップは(C地点のコップ)→(D地点のコップ)の順に重ね...
-最終的に紙コップはロボットが触れていない状態で自立してい...
-競技時間は紙コップをすべて(最大6個)重ねるか、審判が続...
-競技が終わるまでロボットに触れてはいけない。
~課題3のルールの詳細は[[こちら:http://yakushi.shinshu-u....
~課題2の詳細は[[こちら:http://yakushi.shinshu-u.ac.jp/ro...
**紙コップの配置 [#y9f21e8b]
今回の課題では各地点の枠内であれば自由に紙コップを配置し...
~私たちの班は次の図のように紙コップを配置した。
#ref(./紙コップ配置.png,50%,紙コップの配置)
*ロボット1 [#jaa4c235]
**役割 [#y6ef6d56]
このロボットはA地点からスタートし、コース中央で待機する。...
~光センサを2個ともロボット2に使ってしまったので、ロボット...
※本来はその予定で作ったが、最初のスタート位置のずれやロボ...
**構造 [#m7793056]
【ロボット全体像】
#ref(./image17.JPG,70%,ロボット1全体像)
【ロボット前側】
#ref(./image16.PNG,25%,ロボット1前側)
【力の向きの変換】
~今回使用したモーターの回転はもともと縦方向である。そのた...
#ref(./image19.PNG,70%,力の変換)
【改良点】
-緑の枠…ロボット2がコップを下すときにロボット1のアームが...
-青の枠…タイヤを小さくし、ロボット2の動作の邪魔にならない...
-赤の枠…留め具はできるだけ小さいものを選び、高さをなくす...
#ref(./image20.JPG,100%,改良点)
**プログラム [#b64112f4]
~【定義】
#define SIGNALON 121 //121の値をロボット2から受信した...
~※値は0〜255までの値をメッセージとして送受信できる。
~【基本動作】
ClearMessage //メッセージ( )の値を0に初期化...
ClearTimer(0) //Timer(0)をリセット
OnFwd(OUT_A) //Aのモータを正回転させる
OnRev(OUT_AC) //AとCのモータを逆回転させる
Wait(t) //前の動作をt秒間行い、その間次...
Off //モータを停止させる
~【メインプログラム】
task main()
{
ClearMessage();
ClearTimer(0);
OnRev(OUT_AC); //Q地点まで移動する
Wait(450);
Off(OUT_AC);
OnRev(OUT_A); //ロボット1の向...
OnFwd(OUT_C);
Wait(5);
Off(OUT_AC);
until(Message() == SIGNALON); //until…ある条件が...
Wait(150); //ロボット2が運...
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);
}
*ロボット2(つかむ・重ねる) [#je00e591]
**役割 [#r1389d1c]
このロボットはB地点からスタートし、ライントレースを行って...
**構造 [#d57fe889]
【ロボット2全体像横側】
#ref(./image25.jpg,90%,全体像横側)
【ロボット2全体像前側】
光センサーをアームと同じ面に付けることで、紙コップをつか...
このロボットは紙コップを重ねる際にロボット1との衝突を減ら...
#ref(./image26.jpg,90%,全体像前側)
【光センサー】
タッチセンサーでは紙コップに反応しない・紙コップがずれる...
上側(赤色の枠で囲まれた)光センサーは紙コップの識別のた...
下側(青色の枠で囲まれた)光センサーはライントレースのた...
※上側に紙コップ用、下側にライントレース用を付けた。この形...
#ref(./image21.jpg,50%,光センサー)
**つかむ・重ねる仕組み [#v8827f28]
紙コップを重ねるまでの手順は以下の通りである。
+アームが(アーム写真?の赤い矢印の方向に)閉じる。
+紙コップをつかむ。
~※紙コップ上側の淵がアームのタイヤ部分に引っかかることで...
#ref(./image24.png,50%,つかみ方)
+限界まで紙コップをつかむ。つまり、アーム写真?の赤い矢印...
+それまで、アームを閉じる方向にかかっていた力が、上向き(...
+アームは上へと動き紙コップが持ち上がる。
+下すときはモーターを逆向きに回せば、自動的に下り、アーム...
~※モーターの力の変換方法(アーム写真?の青い枠)は上側(ロ...
~【アーム写真?】
#ref(./image23.jpg,50%,アーム前側)
【アーム写真?】
#ref(./image11.JPG,50%,アーム横側)
【問題点】
~アームを上下に動かすときのスピードはアームのギア比(各ギ...
**プログラム [#n60595f3]
【定義】
#define SIGNALON 121 ...
#define MIDDLE 50 ...
#define WHITE 50 ...
#define turn_left1 SetPower(OUT_AC,2); Off(OUT_A); OnFwd...
#define turn_left2 SetPower(OUT_A,1); OnRev(OUT_A); OnFw...
#define turn_right1 SetPower(OUT_AC,2); OnFwd(OUT_A); Of...
#define turn_right2 SetPower(OUT_C,1); OnFwd(OUT_A); OnR...
#define go_forward SetPower(OUT_AC,7); OnFwd(OUT_AC); ...
int cup_count=0; //コップのカウント
【サブルーチン】
MIDDLE+3 //上でMIDDLEは50と定義されているので...
While(条件式) //括弧内の条件が満たされている間、指...
if(条件式) //括弧内の条件が成り立つとき、指定さ...
else if(条件式) //if以外の条件を決めることができる
~?ライントレース
~課題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() //CとDのそれぞれの1つ目...
{
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() //2つ目のコップ
{
SetPower(OUT_AC,1); //紙コップまで移動
OnFwd(OUT_AC);
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() //3つ目のコップ
{
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);
}
?コップを下し、ロボット1と通信する
~コップを前に押すことで2つ目以降のコップを重ねるときに、...
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);
}
【メインプログラム】
~ロボットが交差点を判断するたびに変数cの値を増やしていき...
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地点へ
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);
}
*結果 [#uef4b412]
私たちの班は、1回目はロボット1が正しい場所に行かず、その...
~その結果、基本点は3点、技術点は9.2点の合計12.2点を獲得...
*感想及び反省 [#jbbeb619]
今回は今までの技術を組み合わせた課題だった。しかし、プロ...
ページ名: