2012b/Member/j-abc/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
#contents
*メンバー [#j4b177c9]
-j-abc
-vocalist
-Yuto
*課題2の説明 [#c33ef1d9]
**フィールドの説明 [#n020b8ff]
&ref(2012b/Member/j-abc/Mission2/robocon2012b.png,50%,ロ...
--フィールドは課題1で使用した紙を2枚つなぎ合わせる (向き...
--白い紙パックと黒い紙パックがそれぞれ3個づつ対角のゴール...
--2枚の紙のつなぎ目に断面が約3cm×4cmの角材を両面テープま...
--黒い線の幅は20mmとする
**基本ルール [#n4cb0367]
--白い紙パックと黒い紙パックを入れ替える。
--競技時間は審判が続行不能と判断するまで、あるいはリタイ...
--課題1のスタート地点からスタートする。
--スタート時のロボットは2個を越えないこと (スタート後はい...
--開始の合図から5秒以内にスタートボタンを押す作業を完了...
--競技が終了するまで、ロボットに触ったり人間が遠隔で操作...
--途中でうまく動かなくなった場合、1回限り再スタートする...
--最終的にゴールに運び込まれた紙パックの数で点数を計算す...
**基本得点の計算方法 [#xd7d2b1c]
--運びこまれた紙パックに1個つき5点。ただし、紙パックを2段...
--紙パックが半分以上ゴールからはみ出している場合は、1個1...
--一部がゴールの外にはみ出た出た紙パックの上に積み上げら...
**技術点の計算方法 [#z3d23578]
***以下の動作の精度・スピード・確実性などを含めた技術的な...
--紙パックまでたどり着く動作 (3点)
--紙パックを運ぶ動作(2点)
--障害物を越える動作 (4点)
--2台以上のロボット、あるいは単体のロボットの場合は2台のR...
--自立型のロボットとしての形や動作の美しさ、斬新さ(3点)
--その他 (4点)
*ロボット [#n2e3b50e]
**ロボット1 [#d17cc6f8]
#ls2(2012b/Member/Yuto/Mission2,link,こちらを参考)
**ロボット2 [#z78677cd]
CENTER:&ref(2012b/Member/j-abc/Mission2/robot2_1.jpg,100%...
***紙パックを掴む [#p44814a6]
&ref(2012b/Member/j-abc/Mission2/robot2_2.jpg,50%,矢印の...
&ref(2012b/Member/j-abc/Mission2/robot2_3.jpg,50%,紙パッ...
-青の矢印の方向に回ることで、アームが赤の矢印の方向に動き...
***紙パックの受け渡し [#q9da8c11]
&ref(2012b/Member/j-abc/Mission2/robot2_4.jpg,50%,矢印の...
&ref(2012b/Member/j-abc/Mission2/robot2_5.jpg,50%,紙パッ...
&ref(2012b/Member/j-abc/Mission2/robot2_6.jpg,50%,紙パッ...
-青い矢印の方向に進むことで、紙パックを押し出しロボット1...
***タッチセンサーについて [#n397d600]
&ref(2012b/Member/j-abc/Mission2/robot2_7.jpg,50%,タッチ...
-赤い矢印のところがタッチセンサーとなっている。タッチセン...
*プログラム [#a2737eab]
**ロボット1のプログラムについて [#f99e3596]
#ls2(2012b/Member/Yuto/Mission2,link,こちらを参考)
**ロボット2のプログラムについて [#n0c338d3]
***ロボット2の流れ [#dd84cd1e]
+ライントレースをし、壁側の交差点まで行く。
+前1個の紙パックを取りに行き、ロボット1と通信を行い渡す。
+残りの後ろ2個の紙パックを取りに行き、ロボット1と通信を...
+ロボット1と通信を行い、2個の紙パックを受け取り、所定の...
+ロボット1と通信を行い、残り1個の紙パックを受け取り、所...
***プログラムの定義 [#b61a0647]
-モータAはアームの開閉、モータBは右側のタイヤ、モータCは...
-タッチセンサー1は左側、タッチセンサー2は右側 に対応し...
#define THRESHOLD 47
#define SPEED_H 50 //電池あって50
#define SPEED_L 30 //電池あって30
#define OnRL(speedR,speedL) OnFwd(OUT_B,speedR);OnFwd(OU...
#define go_forward OnRL(SPEED_H, SPEED_H);
#define turn_left1 OnRL(SPEED_L, -SPEED_L); // 左旋回
#define turn_right1 OnRL(-SPEED_L, SPEED_L); // 右旋回
#define STEP 1 // 1回の判断で動作させる時間
#define nMAX 200 //通常のブとして許容できる繰り返しの最...
#define short_break Off(OUT_BC); Wait(100); // 小休止
#define CROSS_TIME 600 // 交差点通過にかかる時間
ライトレースに使用する定義
#define go_forward2 OnFwdSync(OUT_BC,70,0) //早い速度で...
#define go_forward3 OnFwdSync(OUT_BC,30,0) //遅い速度で...
#define go_back OnRevSync(OUT_BC,50,0); //後ろに下がる
#define short_break2 Off(OUT_BC);Wait(1500); //中休止
#define short_break3 Off(OUT_BC);Wait(3000); //大休止
#define ONRL(speed,angle) RotateMotor(OUT_BC,speed,angle...
移動に使用する定義(特にONRLは今回とても重要な定義である)
#define simeru OnFwd(OUT_A,30); // アームを閉める(紙パ...
#define simeru2 OnFwd(OUT_A,60); // 紙パックを整えるため...
#define akeru OnRev(OUT_A,30); //アームを開ける
#define akeru2 OnRev(OUT_A,60); //紙パックを整えるために...
アームの開閉に使用する定義
#define CONN 1
通信に使用する定義
***プログラムのサブルーチン [#he9a6129]
sub line(){
SetSensorLight(S3);
int nOnline=0; // 続けて黒になった回数 (カウンタ)
while (nOnline < nMAX){
if (SENSOR_3 < THRESHOLD-12) {
turn_right1;
nOnline++; // カウンタを増やす
} else {
if (SENSOR_3 < THRESHOLD-7) {
turn_right1;
} else if (SENSOR_3 < THRESHOLD+7) {
go_forward;
} else if (SENSOR_3 < THRESHOLD+15) {
turn_left1;
} else {
turn_left1;
}
nOnline=0; // カウンタをリセット
}
Wait(STEP);
}
turn_left1; Wait(nMAX*STEP); //進行方向修正
}
ライントレースを行うサブルーチン
sub kabedon(){
SetSensorTouch(S1);
SetSensorTouch(S2);
go_forward2;
until((SENSOR_1 == 1)&&(SENSOR_2 == 1))
}
タッチセンサー2個が反応するまで前進するサブルーチン
sub okiniiku(){
SetSensorTouch(S1);
SetSensorTouch(S2);
akeru; Wait(2000); // アームを開ける
kabedon(); // 1個目をもらうために壁まで前進
simeru; Wait(2000); // 1個目をつかむ(アームを閉める)
short_break3;
repeat(3){ // 紙パックを整えるためにア...
akeru2; Wait(500);
simeru2; Wait(500);
}
Off(OUT_A);
short_break2;
RotateMotor(OUT_A,30,-9); // アームを少し閉め直す
short_break2;
ONRL(30,-430); // 紙パックを自分のフィールドに持ってく...
short_break2;
akeru; Wait(2000); // 一旦アームを開ける
short_break2;
ONRL(30,180); // 位置調整のために少し前進する
short_break2;
simeru; Wait(2000); // もう一度アームを閉め、紙パック...
short_break3;
RotateMotor(OUT_C,50,-400); // 90度曲がり、所定の位置...
short_break3;
akeru; Wait(4000); //アームを開く
short_break;
}
紙パックを受け取り、置きに行くまでのサブルーチン
sub okiniiku2(){
ONRL(50,-195); // 受け取りの位置まで下がる
short_break;
RotateMotor(OUT_B,50,-430); // 壁に垂直になるように90...
short_break;
akeru; Wait(2000); // 受け取りのためにアームを開けて...
short_break2;
}
紙パックを置いた後、もう一度取りにいけるまでの態勢にし待...
sub master1(){
SetSensorTouch(S1);
int msg=0; // 受け取った数値を格納する...
int flag=0; // 処理を終了してwhile文を...
while(flag!=1){
SendRemoteNumber(CONN,MAILBOX1,1); ...
ReceiveRemoteNumber(MAILBOX2,true,m...
if(msg==1){ // 読み込んだ数値が1な...
go_forward3; // 壁まで前進する
until(SENSOR_1 == 1);
short_break;
akeru; Wait(2000); // アームを開ける
short_break;
go_back; Wait(1500); // 紙パックをアームで押せる距離...
short_break2;
simeru; Wait(500); // アームを閉める
short_break3;
go_forward3; // 紙パックを渡す
until(SENSOR_1 == 1);
akeru; Wait(2000); // アームを開ける
ONRL(50,-360); //2個目を取りにいくために下がる
short_break;
do{
SendRemoteNumber(CONN,MA...
ReceiveRemoteNumber(MAILBOX2,true,msg); // MAILBOX2...
}while(msg!=2);
flag=1; // whileを抜ける...
SendRemoteNumber(CONN,MAILBOX1,1);
SendRemoteNumber(CONN,MAILBOX2,1);
}
}
}
ロボット1と通信をし前1個の紙パックを渡すサブルーチン
sub master2(){
int msg=0; // 受け取った数値を格納する...
int flag=0; // 処理を終了してwhile文を...
while(flag!=1){
SendRemoteNumber(CONN,MAILBOX3,1); ...
ReceiveRemoteNumber(MAILBOX4,true,m...
if(msg==1){
do{
SendRemoteNumber(CONN,MAI...
ReceiveRemoteNumber(MAILBOX4,true,msg); // MAILBOX4...
}while(msg!=2);
flag=1; // whileを抜ける...
SendRemoteNumber(CONN,MAILBOX3,1);
SendRemoteNumber(CONN,MAILBOX4,1);
}
}
}
ロボット1と通信をし後ろ2個の紙パックを渡すサブルーチン
sub master3(){
int msg=0; // 受け取った数値を格納する...
int flag=0; // 処理を終了してwhile文を...
while(flag!=1){
SendRemoteNumber(CONN,MAILBOX5,1); ...
ReceiveRemoteNumber(MAILBOX6,true,m...
if(msg==1){
do{
SendRemoteNumber(CONN,MAI...
ReceiveRemoteNumber(MAILBOX6,true,msg); // MAILBOX6...
}while(msg!=2);
flag=1; // whileを抜ける...
SendRemoteNumber(CONN,MAILBOX5,1);
SendRemoteNumber(CONN,MAILBOX6,1);
}
}
}
sub master4(){
int msg=0; // 受け取った数値を格納する...
int flag=0; // 処理を終了してwhile文を...
while(flag!=1){
SendRemoteNumber(CONN,MAILBOX7,1); ...
ReceiveRemoteNumber(MAILBOX8,true,m...
if(msg==1){
do{
SendRemoteNumber(CONN,MAI...
ReceiveRemoteNumber(MAILBOX8,true,msg); // MAILBOX8...
}while(msg!=2);
flag=1; // whileを抜ける...
SendRemoteNumber(CONN,MAILBOX7,1);
SendRemoteNumber(CONN,MAILBOX8,1);
}
}
}
ロボット1と通信を行うためのサブルーチン
複数用意されているのは、1つのプログラムをうまく使用でき...
***メインプログラム [#k20751ab]
task main(){
SetSensorLight(S3);
SetSensorTouch(S1);
SetSensorTouch(S2);
ONRL(50,270); // ラインに行くまでの動き
RotateMotor(OUT_C,50,420);
line(); // ライントレース
short_break;
RotateMotor(OUT_B,50,-290); // 壁に垂直になるように曲がる
short_break;
kabedon(); // 壁まで前進する
go_back; Wait(900); // 紙パックを取りに行くためにすこし...
short_break;
RotateMotor(OUT_C,50,-357); // 紙パックをとりにくために...
short_break;
ONRL(50,500); // 紙パックの場所まで前進
short_break;
simeru; Wait(4000); // 紙パックを掴む
short_break;
ONRL(50,-250); //渡す位置まで下がる
short_break;
RotateMotor(OUT_B,50,-342); //壁に垂直になる...
short_break;
master1();
/*ここまでが前1個の紙パックを渡すプログラム*/
RotateMotor(OUT_C,50,-357); // 後ろ2個の紙パックを取...
short_break;
ONRL(50,670); // 紙パックがある場所まで前進する
short_break;
simeru; Wait(4000); // 紙パックを掴む
short_break3;
ONRL(50,-390); //渡す位置まで下がる
short_break;
RotateMotor(OUT_B,50,-342); // 壁に垂直になるように90...
short_break;
Off(OUT_BC); Wait(10000); //ロボット1の邪魔にならない...
kabedon();
short_break;
akeru; Wait(2000); // アームを開ける
short_break;
ONRL(50,-300); // 位置調整のために少し下がる
short_break2;
RotateMotor(OUT_A,30,350); // アームを閉める *1
short_break2;
go_forward3; // 壁まで前進
until(SENSOR_2 == 1);
short_break;
akeru; Wait(2000); // アームを開ける
go_back; Wait(1000); // 紙パックを受け取る準備のために...
Off(OUT_BC);
master2(); //ここで通信2
/*ここまでが後ろ2個を渡すプログラム*/
master3(); //ここで通信3
Off(OUT_BC); Wait(20000); // ロボット1の邪魔にならない...
okiniiku(); //2個もっていく
ONRL(50,410);
short_break;
okiniiku2();
/*ここまでが2個の紙パックを所定の位置まで運ぶプ...
master4(); //ここで通信4
Off(OUT_BC); Wait(30000); // ロボット1の邪魔にならな...
okiniiku();
ONRL(50,450); // 残りの1個を置きにいく
short_break;
ONRL(50,-400);
/*ここまでが残り1個の紙パックを所定の位置まで運...
}
--サブルーチンの部分はサブルーチンのところを見てください。
--ロボット1がslaveでロボット2がmasterである。
--*1のアームを閉じるところだけ角度制御を行なっている。...
*感想 [#a99599f7]
初め時間による制御をしていたが電池の残量に大きく左右され...
今回はロボットとプログラムの制作両方がとても大変であった...
終了行:
#contents
*メンバー [#j4b177c9]
-j-abc
-vocalist
-Yuto
*課題2の説明 [#c33ef1d9]
**フィールドの説明 [#n020b8ff]
&ref(2012b/Member/j-abc/Mission2/robocon2012b.png,50%,ロ...
--フィールドは課題1で使用した紙を2枚つなぎ合わせる (向き...
--白い紙パックと黒い紙パックがそれぞれ3個づつ対角のゴール...
--2枚の紙のつなぎ目に断面が約3cm×4cmの角材を両面テープま...
--黒い線の幅は20mmとする
**基本ルール [#n4cb0367]
--白い紙パックと黒い紙パックを入れ替える。
--競技時間は審判が続行不能と判断するまで、あるいはリタイ...
--課題1のスタート地点からスタートする。
--スタート時のロボットは2個を越えないこと (スタート後はい...
--開始の合図から5秒以内にスタートボタンを押す作業を完了...
--競技が終了するまで、ロボットに触ったり人間が遠隔で操作...
--途中でうまく動かなくなった場合、1回限り再スタートする...
--最終的にゴールに運び込まれた紙パックの数で点数を計算す...
**基本得点の計算方法 [#xd7d2b1c]
--運びこまれた紙パックに1個つき5点。ただし、紙パックを2段...
--紙パックが半分以上ゴールからはみ出している場合は、1個1...
--一部がゴールの外にはみ出た出た紙パックの上に積み上げら...
**技術点の計算方法 [#z3d23578]
***以下の動作の精度・スピード・確実性などを含めた技術的な...
--紙パックまでたどり着く動作 (3点)
--紙パックを運ぶ動作(2点)
--障害物を越える動作 (4点)
--2台以上のロボット、あるいは単体のロボットの場合は2台のR...
--自立型のロボットとしての形や動作の美しさ、斬新さ(3点)
--その他 (4点)
*ロボット [#n2e3b50e]
**ロボット1 [#d17cc6f8]
#ls2(2012b/Member/Yuto/Mission2,link,こちらを参考)
**ロボット2 [#z78677cd]
CENTER:&ref(2012b/Member/j-abc/Mission2/robot2_1.jpg,100%...
***紙パックを掴む [#p44814a6]
&ref(2012b/Member/j-abc/Mission2/robot2_2.jpg,50%,矢印の...
&ref(2012b/Member/j-abc/Mission2/robot2_3.jpg,50%,紙パッ...
-青の矢印の方向に回ることで、アームが赤の矢印の方向に動き...
***紙パックの受け渡し [#q9da8c11]
&ref(2012b/Member/j-abc/Mission2/robot2_4.jpg,50%,矢印の...
&ref(2012b/Member/j-abc/Mission2/robot2_5.jpg,50%,紙パッ...
&ref(2012b/Member/j-abc/Mission2/robot2_6.jpg,50%,紙パッ...
-青い矢印の方向に進むことで、紙パックを押し出しロボット1...
***タッチセンサーについて [#n397d600]
&ref(2012b/Member/j-abc/Mission2/robot2_7.jpg,50%,タッチ...
-赤い矢印のところがタッチセンサーとなっている。タッチセン...
*プログラム [#a2737eab]
**ロボット1のプログラムについて [#f99e3596]
#ls2(2012b/Member/Yuto/Mission2,link,こちらを参考)
**ロボット2のプログラムについて [#n0c338d3]
***ロボット2の流れ [#dd84cd1e]
+ライントレースをし、壁側の交差点まで行く。
+前1個の紙パックを取りに行き、ロボット1と通信を行い渡す。
+残りの後ろ2個の紙パックを取りに行き、ロボット1と通信を...
+ロボット1と通信を行い、2個の紙パックを受け取り、所定の...
+ロボット1と通信を行い、残り1個の紙パックを受け取り、所...
***プログラムの定義 [#b61a0647]
-モータAはアームの開閉、モータBは右側のタイヤ、モータCは...
-タッチセンサー1は左側、タッチセンサー2は右側 に対応し...
#define THRESHOLD 47
#define SPEED_H 50 //電池あって50
#define SPEED_L 30 //電池あって30
#define OnRL(speedR,speedL) OnFwd(OUT_B,speedR);OnFwd(OU...
#define go_forward OnRL(SPEED_H, SPEED_H);
#define turn_left1 OnRL(SPEED_L, -SPEED_L); // 左旋回
#define turn_right1 OnRL(-SPEED_L, SPEED_L); // 右旋回
#define STEP 1 // 1回の判断で動作させる時間
#define nMAX 200 //通常のブとして許容できる繰り返しの最...
#define short_break Off(OUT_BC); Wait(100); // 小休止
#define CROSS_TIME 600 // 交差点通過にかかる時間
ライトレースに使用する定義
#define go_forward2 OnFwdSync(OUT_BC,70,0) //早い速度で...
#define go_forward3 OnFwdSync(OUT_BC,30,0) //遅い速度で...
#define go_back OnRevSync(OUT_BC,50,0); //後ろに下がる
#define short_break2 Off(OUT_BC);Wait(1500); //中休止
#define short_break3 Off(OUT_BC);Wait(3000); //大休止
#define ONRL(speed,angle) RotateMotor(OUT_BC,speed,angle...
移動に使用する定義(特にONRLは今回とても重要な定義である)
#define simeru OnFwd(OUT_A,30); // アームを閉める(紙パ...
#define simeru2 OnFwd(OUT_A,60); // 紙パックを整えるため...
#define akeru OnRev(OUT_A,30); //アームを開ける
#define akeru2 OnRev(OUT_A,60); //紙パックを整えるために...
アームの開閉に使用する定義
#define CONN 1
通信に使用する定義
***プログラムのサブルーチン [#he9a6129]
sub line(){
SetSensorLight(S3);
int nOnline=0; // 続けて黒になった回数 (カウンタ)
while (nOnline < nMAX){
if (SENSOR_3 < THRESHOLD-12) {
turn_right1;
nOnline++; // カウンタを増やす
} else {
if (SENSOR_3 < THRESHOLD-7) {
turn_right1;
} else if (SENSOR_3 < THRESHOLD+7) {
go_forward;
} else if (SENSOR_3 < THRESHOLD+15) {
turn_left1;
} else {
turn_left1;
}
nOnline=0; // カウンタをリセット
}
Wait(STEP);
}
turn_left1; Wait(nMAX*STEP); //進行方向修正
}
ライントレースを行うサブルーチン
sub kabedon(){
SetSensorTouch(S1);
SetSensorTouch(S2);
go_forward2;
until((SENSOR_1 == 1)&&(SENSOR_2 == 1))
}
タッチセンサー2個が反応するまで前進するサブルーチン
sub okiniiku(){
SetSensorTouch(S1);
SetSensorTouch(S2);
akeru; Wait(2000); // アームを開ける
kabedon(); // 1個目をもらうために壁まで前進
simeru; Wait(2000); // 1個目をつかむ(アームを閉める)
short_break3;
repeat(3){ // 紙パックを整えるためにア...
akeru2; Wait(500);
simeru2; Wait(500);
}
Off(OUT_A);
short_break2;
RotateMotor(OUT_A,30,-9); // アームを少し閉め直す
short_break2;
ONRL(30,-430); // 紙パックを自分のフィールドに持ってく...
short_break2;
akeru; Wait(2000); // 一旦アームを開ける
short_break2;
ONRL(30,180); // 位置調整のために少し前進する
short_break2;
simeru; Wait(2000); // もう一度アームを閉め、紙パック...
short_break3;
RotateMotor(OUT_C,50,-400); // 90度曲がり、所定の位置...
short_break3;
akeru; Wait(4000); //アームを開く
short_break;
}
紙パックを受け取り、置きに行くまでのサブルーチン
sub okiniiku2(){
ONRL(50,-195); // 受け取りの位置まで下がる
short_break;
RotateMotor(OUT_B,50,-430); // 壁に垂直になるように90...
short_break;
akeru; Wait(2000); // 受け取りのためにアームを開けて...
short_break2;
}
紙パックを置いた後、もう一度取りにいけるまでの態勢にし待...
sub master1(){
SetSensorTouch(S1);
int msg=0; // 受け取った数値を格納する...
int flag=0; // 処理を終了してwhile文を...
while(flag!=1){
SendRemoteNumber(CONN,MAILBOX1,1); ...
ReceiveRemoteNumber(MAILBOX2,true,m...
if(msg==1){ // 読み込んだ数値が1な...
go_forward3; // 壁まで前進する
until(SENSOR_1 == 1);
short_break;
akeru; Wait(2000); // アームを開ける
short_break;
go_back; Wait(1500); // 紙パックをアームで押せる距離...
short_break2;
simeru; Wait(500); // アームを閉める
short_break3;
go_forward3; // 紙パックを渡す
until(SENSOR_1 == 1);
akeru; Wait(2000); // アームを開ける
ONRL(50,-360); //2個目を取りにいくために下がる
short_break;
do{
SendRemoteNumber(CONN,MA...
ReceiveRemoteNumber(MAILBOX2,true,msg); // MAILBOX2...
}while(msg!=2);
flag=1; // whileを抜ける...
SendRemoteNumber(CONN,MAILBOX1,1);
SendRemoteNumber(CONN,MAILBOX2,1);
}
}
}
ロボット1と通信をし前1個の紙パックを渡すサブルーチン
sub master2(){
int msg=0; // 受け取った数値を格納する...
int flag=0; // 処理を終了してwhile文を...
while(flag!=1){
SendRemoteNumber(CONN,MAILBOX3,1); ...
ReceiveRemoteNumber(MAILBOX4,true,m...
if(msg==1){
do{
SendRemoteNumber(CONN,MAI...
ReceiveRemoteNumber(MAILBOX4,true,msg); // MAILBOX4...
}while(msg!=2);
flag=1; // whileを抜ける...
SendRemoteNumber(CONN,MAILBOX3,1);
SendRemoteNumber(CONN,MAILBOX4,1);
}
}
}
ロボット1と通信をし後ろ2個の紙パックを渡すサブルーチン
sub master3(){
int msg=0; // 受け取った数値を格納する...
int flag=0; // 処理を終了してwhile文を...
while(flag!=1){
SendRemoteNumber(CONN,MAILBOX5,1); ...
ReceiveRemoteNumber(MAILBOX6,true,m...
if(msg==1){
do{
SendRemoteNumber(CONN,MAI...
ReceiveRemoteNumber(MAILBOX6,true,msg); // MAILBOX6...
}while(msg!=2);
flag=1; // whileを抜ける...
SendRemoteNumber(CONN,MAILBOX5,1);
SendRemoteNumber(CONN,MAILBOX6,1);
}
}
}
sub master4(){
int msg=0; // 受け取った数値を格納する...
int flag=0; // 処理を終了してwhile文を...
while(flag!=1){
SendRemoteNumber(CONN,MAILBOX7,1); ...
ReceiveRemoteNumber(MAILBOX8,true,m...
if(msg==1){
do{
SendRemoteNumber(CONN,MAI...
ReceiveRemoteNumber(MAILBOX8,true,msg); // MAILBOX8...
}while(msg!=2);
flag=1; // whileを抜ける...
SendRemoteNumber(CONN,MAILBOX7,1);
SendRemoteNumber(CONN,MAILBOX8,1);
}
}
}
ロボット1と通信を行うためのサブルーチン
複数用意されているのは、1つのプログラムをうまく使用でき...
***メインプログラム [#k20751ab]
task main(){
SetSensorLight(S3);
SetSensorTouch(S1);
SetSensorTouch(S2);
ONRL(50,270); // ラインに行くまでの動き
RotateMotor(OUT_C,50,420);
line(); // ライントレース
short_break;
RotateMotor(OUT_B,50,-290); // 壁に垂直になるように曲がる
short_break;
kabedon(); // 壁まで前進する
go_back; Wait(900); // 紙パックを取りに行くためにすこし...
short_break;
RotateMotor(OUT_C,50,-357); // 紙パックをとりにくために...
short_break;
ONRL(50,500); // 紙パックの場所まで前進
short_break;
simeru; Wait(4000); // 紙パックを掴む
short_break;
ONRL(50,-250); //渡す位置まで下がる
short_break;
RotateMotor(OUT_B,50,-342); //壁に垂直になる...
short_break;
master1();
/*ここまでが前1個の紙パックを渡すプログラム*/
RotateMotor(OUT_C,50,-357); // 後ろ2個の紙パックを取...
short_break;
ONRL(50,670); // 紙パックがある場所まで前進する
short_break;
simeru; Wait(4000); // 紙パックを掴む
short_break3;
ONRL(50,-390); //渡す位置まで下がる
short_break;
RotateMotor(OUT_B,50,-342); // 壁に垂直になるように90...
short_break;
Off(OUT_BC); Wait(10000); //ロボット1の邪魔にならない...
kabedon();
short_break;
akeru; Wait(2000); // アームを開ける
short_break;
ONRL(50,-300); // 位置調整のために少し下がる
short_break2;
RotateMotor(OUT_A,30,350); // アームを閉める *1
short_break2;
go_forward3; // 壁まで前進
until(SENSOR_2 == 1);
short_break;
akeru; Wait(2000); // アームを開ける
go_back; Wait(1000); // 紙パックを受け取る準備のために...
Off(OUT_BC);
master2(); //ここで通信2
/*ここまでが後ろ2個を渡すプログラム*/
master3(); //ここで通信3
Off(OUT_BC); Wait(20000); // ロボット1の邪魔にならない...
okiniiku(); //2個もっていく
ONRL(50,410);
short_break;
okiniiku2();
/*ここまでが2個の紙パックを所定の位置まで運ぶプ...
master4(); //ここで通信4
Off(OUT_BC); Wait(30000); // ロボット1の邪魔にならな...
okiniiku();
ONRL(50,450); // 残りの1個を置きにいく
short_break;
ONRL(50,-400);
/*ここまでが残り1個の紙パックを所定の位置まで運...
}
--サブルーチンの部分はサブルーチンのところを見てください。
--ロボット1がslaveでロボット2がmasterである。
--*1のアームを閉じるところだけ角度制御を行なっている。...
*感想 [#a99599f7]
初め時間による制御をしていたが電池の残量に大きく左右され...
今回はロボットとプログラムの制作両方がとても大変であった...
ページ名: