2012b/Member/Yuto/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*Mission2レポート [#j5000da1]
[[2012b/Member]]
#contents
**メンバー [#c03cb36e]
-Yuto
-vocalist
-j-abc
**課題 [#ra38e221]
>''フィールドの説明''
#ref(2012b/Member/Yuto/Mission2/robocon2012b.png,50%,フィ...
~フィールドは上図のようになっている([[2012b/ロボコン]]か...
--~フィールドはMission1で使用したコースを2枚つなぎ合わせ...
--~白い紙パックと黒い紙パックがそれぞれ体格のゴールに置か...
<
>''基本ルール''
--~図の白い紙パックと黒い紙パックを入れ替える。
--~スタート時のロボットは2個を越えてはならない。
--~競技が終了するまで、ロボットに触ったり人間が遠隔で操作...
--~最終的にゴールに運び込まれた紙パックの数で点数を計算す...
<
>''得点計算''
--~運びこまれた紙パックに1個つき5点。
--~紙パックが半分以上ゴールからはみ出している場合は1個1点...
--~一部がゴールの外にはみ出た出た紙パックの上に積み上げら...
<
>''技術点の計算方法''
-~以下の動作の精度・スピード・確実性などを含めた技術的な...
>>得点の目安:
--~紙パックまでたどり着く動作 (3点)
--~紙パックを運ぶ動作(2点)
--~障害物を越える動作 (4点)
--~2台以上のロボット、あるいは単体のロボットの場合は2台の...
--~自立型のロボットとしての形や動作の美しさ、斬新さ(3点)
--~その他 (4点)
<<
<
RIGHT:※文章は[[2012b/ロボコン]]から引用
**ロボットについて [#b1ff272f]
>今回の課題では、私達はロボットを2台使用することにした。
<
***機体1 [#dd667a55]
>こちらの本体には手を加えてないので[[2012b/Member/vocalis...
<
***機体2 [#a131c554]
>
&ref(2012b/Member/Yuto/Mission2/IMG_0715.jpg,50%,全体図);
&ref(2012b/Member/Yuto/Mission2/JUNK.jpg,50%,ジャンクマン);
~左上の写真が2台目のロボットの全体図である。
~その隣の画像は某漫画のキャラクターである。このロボットが...
~Aモーターがアームの開閉を制御し、Bモーターが右のタイヤ、...
~初期状態ではアームは閉じた状態である。
~こちらのロボットのベースは私が作成し、手前のアームやその...
~このロボットは前方にあるアームで紙パックを挟むだけの構造...
~何故このような簡素な造りになっているのか。その理由は、も...
~このためこちら側のロボットは紙パックを送る構造を省くこと...
#ref(2012b/Member/Yuto/Mission2/IMG_0720.jpg,50%,アームを...
~上の写真では前方のアームを外して撮影している。
~Mission1の時に反省した点を活かし、タイヤと光センサーの位...
~光センサーの前を囲っている部分は、壁に当ててズレを修正す...
~これを付けていない場合、光センサーにあたってしまうという...
#ref(2012b/Member/Yuto/Mission2/IMG_0717.jpg,50%,紙パック...
~紙パックが1個の場合、上の図のように挟んで取る。
~アーム先端にはゴムを付け、摩擦をおこすことで紙パックが動...
~練習時には輪ゴムを付けて動かしていたが、実際ロボコンでは...
~また、プログラムの方でも説明するが、挟んだ状態で動くとき...
#ref(2012b/Member/Yuto/Mission2/IMG_0719.jpg,50%,倒れた紙...
~もし2個倒れた紙パックを取る場合でも、1個で倒れていない時...
~上の写真を見てわかるかと思うが、アームには左右それぞれ2...
~紙パックが倒れてしまった場合でも下のゴムが当たるので離れ...
<
**プログラムについて [#e1440369]
>
-~機体1のプログラムには手を加えていないので[[2012b/Member...
-~機体2のプログラムは私が作成したので以下で説明する。
#ref(2012b/Member/Yuto/Mission2/robocon2012b-01.png,50%,...
~機体2では赤で囲った方のフィールドを使用する。
>>''機体2のプログラムの大まかな流れ''
+~スタート地点からライントレースをし、壁側の交差点まで行...
+~ゴールの紙パックを手前から順にスタート地点に隔離する(こ...
~この時1回置きに行く度に最初に壁に当てた場所に戻り、壁当...
+~無効のロボットと通信を行い準備ができ次第向こうの紙パッ...
+~スタート地点に残っている紙パックを所定の位置に持ってい...
***定義 [#f42b5c9e]
#define THRESHOLD 40//閾値
#define SPEED 40//通常時の速度
#define SPEED_L 25//低速時の速度
>
~閾値と速度の定義。
~この時の閾値は40であった。
~通常は40のスピードで動作するが、ライントレースをする時な...
<
#define STEP 1//1回の判断で動作させる時間
#define nMAX 200//通常のカーブとして許容できる繰り返しの...
#define turn_left OnRL_(SPEED_L,-SPEED_L);//左旋回
#define turn_right OnRL_(-SPEED_L,SPEED_L);//右旋回
>
~上の定義はライントレースを行うのに使用する。
<
#define B90(speed) RotateMotor(OUT_B,speed,337);Off(OUT_...
#define C90(speed) RotateMotor(OUT_C,speed,337);Off(OUT_...
#define OnRL(speed,angle) RotateMotor(OUT_BC,speed,angle...
#define OnRL_(speedR,speedL) OnFwd(OUT_B,speedR);OnFwd(O...
#define A(speedA) OnFwd(OUT_A,speedA);//速度指定でAモー...
>
~今回のプログラムにおいて上の5つは重要な定義である。
~上3つは角度での制御を行う。角度制御は時間制御よりも正確...
~ただし、時間制御を使用する方が良い場合もあるということで...
***サブルーチン [#m4e0b9bf]
<
~サブルーチンは4つに大別される。
sub get1()//自分のゴールにある紙パックをスタート地点に隔...
{
OnRL(-SPEED,390);//ここから手前の紙パックを回収しに行く
C90(-SPEED);
A(SPEED);
Wait(350);
Off(OUT_A);
OnRL(SPEED,400);
A(SPEED);
Wait(600);//ここで回収終了
C90(-SPEED);//ここからスタート地点に持っていく
B90(SPEED);
OnRL(SPEED,500);
Off(OUT_ABC);
A(-SPEED);
Wait(1000);
Off(OUT_A);//ここで処理終了
OnRL(-SPEED,530);//開始した地点に戻る
B90(SPEED);
OnRL_(SPEED,SPEED);
Wait(2000);
Off(OUT_BC);//壁に当ててズレを修正
}
sub get2()//自分のゴールにある紙パックをスタート地点に隔...
{
OnRL(-SPEED,390);//ここから残りを回収しにいく
C90(-SPEED);
A(SPEED);
Wait(350);
Off(OUT_A);
OnRL(SPEED,650);
A(SPEED);
Wait(600);//ここで回収終了
C90(-SPEED);//ここからスタート地点に持っていく
B90(SPEED);
OnRL(SPEED,580);
Off(OUT_ABC);
A(-SPEED);
Wait(1000);
Off(OUT_A);//ここで処理終了
OnRL(-SPEED,340);//開始した地点に戻る
B90(SPEED);
OnRL_(SPEED,SPEED);
Wait(2000);//壁に当ててズレを修正
Off(OUT_BC);
Wait(500);
OnRL(-SPEED,390);
Off(OUT_BC);
A(SPEED);
Wait(350);
Off(OUT_A);//向こうの紙パックを受けられる状態で待機
}
>
~ここではおおまかな流れの2番を2つに分けて行っている。
~始めに向こうの紙パックを受けるので、ゴールを空けるために...
<
sub car1()//反対側のロボットから紙パックを受け取って所定...
{
OnRL(SPEED,140);
A(SPEED);//受け取った後掴み直す
Wait(800);
OnRL(-SPEED,90);
A(-SPEED);
Wait(1000);
Off(OUT_A);
OnRL(SPEED,50);
A(SPEED);
Wait(1000);
OnRL(-SPEED,90);//紙パックを受け取って所定の位置に置き...
C90(-SPEED);
OnRL(SPEED,570);
A(-SPEED);
Wait(1000);
Off(OUT_A);//開始した地点に戻る
C90(-SPEED);
B90(SPEED);
OnRL(SPEED,160);
B90(SPEED);
OnRL_(SPEED,SPEED);
Wait(2000);//壁に当ててズレを修正
Off(OUT_BC);
Wait(500);
OnRL(-SPEED,390);
Off(OUT_BC);
A(SPEED);
Wait(350);
Off(OUT_A);//向こうの紙パックを受けられる状態で待機
}
sub car2()//反対側のロボットから紙パックを受け取って所定...
{
OnRL(SPEED,140);
A(SPEED);//受け取った後掴み直す
Wait(800);
OnRL(-SPEED,90);
A(-SPEED);
Wait(1000);
Off(OUT_A);
OnRL(SPEED,50);
A(SPEED);
Wait(1000);
OnRL(-SPEED,90);//紙パックを受け取って所定の位置に置き...
C90(-SPEED);
OnRL(SPEED,390);
A(-SPEED);
Wait(1000);
Off(OUT_A);//開始した地点に戻る
C90(-SPEED);
B90(SPEED);
OnRL(SPEED,170);
C90(-SPEED);
OnRL_(SPEED,SPEED);
Wait(3000);//壁に当ててズレを修正
Off(OUT_BC);
Wait(500);
}
>
~大まかな流れ3番を2つに分けて行っている。
~向こうから渡される回数は2回なので置きに行く時の進む距離...
<
sub pass1()//隔離した紙パックを渡しにいく(紙パック2個)
{
OnRL(-SPEED,390);//スタート地点に最後に置いた紙パックを...
Off(OUT_BC);
B90(-SPEED);
A(SPEED);
Wait(350);
Off(OUT_A);
OnRL(SPEED,400);
Off(OUT_BC);
Wait(500);
A(SPEED);
Wait(600);//受け渡し場所に持っていく
OnRL(-SPEED,210);
C90(-SPEED);
OnRL_(SPEED,SPEED);
Wait(2000);
Off(OUT_ABC);
Wait(500);
A(-SPEED);
Wait(1000);
Off(OUT_A);
OnRL(-SPEED_L,170);
}
sub pass2()//隔離した紙パックを渡しにいく(紙パック1個)
{
B90(-SPEED);//残りの紙パックを回収しに行く
OnRL(SPEED,580);
Off(OUT_BC);
Wait(500);
A(SPEED);
Wait(600);//受け渡し場所に持っていく
OnRL(-SPEED,330);
C90(-SPEED);
OnRL_(SPEED,SPEED);
Wait(2000);
Off(OUT_ABC);
Wait(500);
A(-SPEED);
Wait(1000);
Off(OUT_A);
OnRL(-SPEED_L,170);
}
>
~最後のここでも2つに分けている。
~受け渡し場所に持っていき、低速で離れることによって反動で...
<
sub connect_slave1()
{
int msg=0;//受け取った数値を格納するための変数
int flag=0;//処理を終了してwhile文を抜けるための変数
while(flag!=1){
ReceiveRemoteNumber(MAILBOX1,true,msg);//MAILBOX1に格...
if(msg==1){//もし読み込んだ数値が1(相手が所定の一に到...
SendResponseNumber(MAILBOX2,1);//MAILBOX2に1という数...
}else if(msg==2){//もし読み込んだ数値が2(相手に通知さ...
repeat(30){
SendResponseNumber(MAILBOX2,2);//MAILBOX2に2という数...
}
flag=1;//whileを抜けるための数値を入れる
}
}
}
sub connect_slave2()
{
int msg=0;//受け取った数値を格納するための変数
int flag=0;//処理を終了してwhile文を抜けるための変数
while(flag!=1){
ReceiveRemoteNumber(MAILBOX3,true,msg);//MAILBOX3に格...
if(msg==1){//もし読み込んだ数値が1(相手が所定の一に到...
SendResponseNumber(MAILBOX4,1);//MAILBOX4に1という数...
}else if(msg==2){//もし読み込んだ数値が2(相手に通知さ...
repeat(30){
SendResponseNumber(MAILBOX4,2);//MAILBOX4に2という数...
}
flag=1;//whileを抜けるための数値を入れる
}
}
}
sub connect_slave3()
{
int msg=0;//受け取った数値を格納するための変数
int flag=0;//処理を終了してwhile文を抜けるための変数
while(flag!=1){
ReceiveRemoteNumber(MAILBOX5,true,msg);//MAILBOX5に格...
if(msg==1){//もし読み込んだ数値が1(相手が所定の一に到...
SendResponseNumber(MAILBOX6,1);//MAILBOX6に1という数...
}else if(msg==2){//もし読み込んだ数値が2(相手に通知さ...
repeat(30){
SendResponseNumber(MAILBOX6,2);//MAILBOX6に2という数...
}
flag=1;//whileを抜けるための数値を入れる
}
}
}
sub connect_slave4()
{
int msg=0;//受け取った数値を格納するための変数
int flag=0;//処理を終了してwhile文を抜けるための変数
while(flag!=1){
ReceiveRemoteNumber(MAILBOX7,true,msg);//MAILBOX7に格...
if(msg==1){//もし読み込んだ数値が1(相手が所定の一に到...
SendResponseNumber(MAILBOX8,1);//MAILBOX8に1という数...
}else if(msg==2){//もし読み込んだ数値が2(相手に通知さ...
repeat(500){
SendResponseNumber(MAILBOX8,2);//MAILBOX2に8という数...
Wait(1);
}
flag=1;//whileを抜けるための数値を入れる
}
}
}
>
~これらは通信をするためのプログラムである。
~4つあるのは1つのプログラムを使いまわした時に上手く動作し...
~サブルーチンの名前から分かるよう、こちらのロボットがslav...
***本体 [#u2199ce8]
<
task main()
{
int gain;//センサの値と閾値の差分を入れる変数
int flag=0;//処理を終了してwhile文を抜けるための変数
int nOnline=0;//黒線を読んだ数
SetSensorLight(S4);
OnRL_(SPEED,SPEED);
Wait(500);
while(flag!=1){
if(nOnline>nMAX){//交差点と判断
OnRL_(SPEED,0);//ラインに平行になるよう修正
Wait(350);
Off(OUT_BC);
OnRL(SPEED,130);
B90(-SPEED);
Off(OUT_BC);
OnRL_(SPEED,SPEED);
Wait(1200);//壁に当ててズレを修正
Off(OUT_BC);
/*これ以下のプログラムはほぼサブルーチンを参照*/
get1();
get2();
connect_slave1();
Wait(3000);
car1();
connect_slave2();
Wait(3000);
car2();
pass1();
connect_slave3();
Wait(30000);
pass2();
connect_slave4();
flag=1;//whileを抜けるための数値を入れる
}else{
if(SENSOR_4<=THRESHOLD-10){//センサーの値が30以下の場合
turn_right;
nOnline++;//カウンタを増やす
}else if(SENSOR_4>=THRESHOLD+10){//センサーの値が50以...
turn_left;
nOnline=0;//カウンタをリセット
}else{//それ以外の場合は比例制御
gain=THRESHOLD-SENSOR_4;//差分計算
OnRL_(SPEED_L+gain,SPEED_L-gain);
nOnline=0;//カウンタをリセット
}
}
Wait(STEP);
}
}
>
~本体はライントレースが主体となっている。
~交差点を判断した後はサブルーチンを処理し、終了する。
~connect_slaveの後にWaitが入っているが、これらは一方のロ...
**感想・考察 [#a7721dc0]
<
~前回の反省も活かすことができた。
~角度制御にすることにより、時間制御よりも安定性が増した。...
~通信や角度制御についてもう少し学んでから挑みたかった。
終了行:
*Mission2レポート [#j5000da1]
[[2012b/Member]]
#contents
**メンバー [#c03cb36e]
-Yuto
-vocalist
-j-abc
**課題 [#ra38e221]
>''フィールドの説明''
#ref(2012b/Member/Yuto/Mission2/robocon2012b.png,50%,フィ...
~フィールドは上図のようになっている([[2012b/ロボコン]]か...
--~フィールドはMission1で使用したコースを2枚つなぎ合わせ...
--~白い紙パックと黒い紙パックがそれぞれ体格のゴールに置か...
<
>''基本ルール''
--~図の白い紙パックと黒い紙パックを入れ替える。
--~スタート時のロボットは2個を越えてはならない。
--~競技が終了するまで、ロボットに触ったり人間が遠隔で操作...
--~最終的にゴールに運び込まれた紙パックの数で点数を計算す...
<
>''得点計算''
--~運びこまれた紙パックに1個つき5点。
--~紙パックが半分以上ゴールからはみ出している場合は1個1点...
--~一部がゴールの外にはみ出た出た紙パックの上に積み上げら...
<
>''技術点の計算方法''
-~以下の動作の精度・スピード・確実性などを含めた技術的な...
>>得点の目安:
--~紙パックまでたどり着く動作 (3点)
--~紙パックを運ぶ動作(2点)
--~障害物を越える動作 (4点)
--~2台以上のロボット、あるいは単体のロボットの場合は2台の...
--~自立型のロボットとしての形や動作の美しさ、斬新さ(3点)
--~その他 (4点)
<<
<
RIGHT:※文章は[[2012b/ロボコン]]から引用
**ロボットについて [#b1ff272f]
>今回の課題では、私達はロボットを2台使用することにした。
<
***機体1 [#dd667a55]
>こちらの本体には手を加えてないので[[2012b/Member/vocalis...
<
***機体2 [#a131c554]
>
&ref(2012b/Member/Yuto/Mission2/IMG_0715.jpg,50%,全体図);
&ref(2012b/Member/Yuto/Mission2/JUNK.jpg,50%,ジャンクマン);
~左上の写真が2台目のロボットの全体図である。
~その隣の画像は某漫画のキャラクターである。このロボットが...
~Aモーターがアームの開閉を制御し、Bモーターが右のタイヤ、...
~初期状態ではアームは閉じた状態である。
~こちらのロボットのベースは私が作成し、手前のアームやその...
~このロボットは前方にあるアームで紙パックを挟むだけの構造...
~何故このような簡素な造りになっているのか。その理由は、も...
~このためこちら側のロボットは紙パックを送る構造を省くこと...
#ref(2012b/Member/Yuto/Mission2/IMG_0720.jpg,50%,アームを...
~上の写真では前方のアームを外して撮影している。
~Mission1の時に反省した点を活かし、タイヤと光センサーの位...
~光センサーの前を囲っている部分は、壁に当ててズレを修正す...
~これを付けていない場合、光センサーにあたってしまうという...
#ref(2012b/Member/Yuto/Mission2/IMG_0717.jpg,50%,紙パック...
~紙パックが1個の場合、上の図のように挟んで取る。
~アーム先端にはゴムを付け、摩擦をおこすことで紙パックが動...
~練習時には輪ゴムを付けて動かしていたが、実際ロボコンでは...
~また、プログラムの方でも説明するが、挟んだ状態で動くとき...
#ref(2012b/Member/Yuto/Mission2/IMG_0719.jpg,50%,倒れた紙...
~もし2個倒れた紙パックを取る場合でも、1個で倒れていない時...
~上の写真を見てわかるかと思うが、アームには左右それぞれ2...
~紙パックが倒れてしまった場合でも下のゴムが当たるので離れ...
<
**プログラムについて [#e1440369]
>
-~機体1のプログラムには手を加えていないので[[2012b/Member...
-~機体2のプログラムは私が作成したので以下で説明する。
#ref(2012b/Member/Yuto/Mission2/robocon2012b-01.png,50%,...
~機体2では赤で囲った方のフィールドを使用する。
>>''機体2のプログラムの大まかな流れ''
+~スタート地点からライントレースをし、壁側の交差点まで行...
+~ゴールの紙パックを手前から順にスタート地点に隔離する(こ...
~この時1回置きに行く度に最初に壁に当てた場所に戻り、壁当...
+~無効のロボットと通信を行い準備ができ次第向こうの紙パッ...
+~スタート地点に残っている紙パックを所定の位置に持ってい...
***定義 [#f42b5c9e]
#define THRESHOLD 40//閾値
#define SPEED 40//通常時の速度
#define SPEED_L 25//低速時の速度
>
~閾値と速度の定義。
~この時の閾値は40であった。
~通常は40のスピードで動作するが、ライントレースをする時な...
<
#define STEP 1//1回の判断で動作させる時間
#define nMAX 200//通常のカーブとして許容できる繰り返しの...
#define turn_left OnRL_(SPEED_L,-SPEED_L);//左旋回
#define turn_right OnRL_(-SPEED_L,SPEED_L);//右旋回
>
~上の定義はライントレースを行うのに使用する。
<
#define B90(speed) RotateMotor(OUT_B,speed,337);Off(OUT_...
#define C90(speed) RotateMotor(OUT_C,speed,337);Off(OUT_...
#define OnRL(speed,angle) RotateMotor(OUT_BC,speed,angle...
#define OnRL_(speedR,speedL) OnFwd(OUT_B,speedR);OnFwd(O...
#define A(speedA) OnFwd(OUT_A,speedA);//速度指定でAモー...
>
~今回のプログラムにおいて上の5つは重要な定義である。
~上3つは角度での制御を行う。角度制御は時間制御よりも正確...
~ただし、時間制御を使用する方が良い場合もあるということで...
***サブルーチン [#m4e0b9bf]
<
~サブルーチンは4つに大別される。
sub get1()//自分のゴールにある紙パックをスタート地点に隔...
{
OnRL(-SPEED,390);//ここから手前の紙パックを回収しに行く
C90(-SPEED);
A(SPEED);
Wait(350);
Off(OUT_A);
OnRL(SPEED,400);
A(SPEED);
Wait(600);//ここで回収終了
C90(-SPEED);//ここからスタート地点に持っていく
B90(SPEED);
OnRL(SPEED,500);
Off(OUT_ABC);
A(-SPEED);
Wait(1000);
Off(OUT_A);//ここで処理終了
OnRL(-SPEED,530);//開始した地点に戻る
B90(SPEED);
OnRL_(SPEED,SPEED);
Wait(2000);
Off(OUT_BC);//壁に当ててズレを修正
}
sub get2()//自分のゴールにある紙パックをスタート地点に隔...
{
OnRL(-SPEED,390);//ここから残りを回収しにいく
C90(-SPEED);
A(SPEED);
Wait(350);
Off(OUT_A);
OnRL(SPEED,650);
A(SPEED);
Wait(600);//ここで回収終了
C90(-SPEED);//ここからスタート地点に持っていく
B90(SPEED);
OnRL(SPEED,580);
Off(OUT_ABC);
A(-SPEED);
Wait(1000);
Off(OUT_A);//ここで処理終了
OnRL(-SPEED,340);//開始した地点に戻る
B90(SPEED);
OnRL_(SPEED,SPEED);
Wait(2000);//壁に当ててズレを修正
Off(OUT_BC);
Wait(500);
OnRL(-SPEED,390);
Off(OUT_BC);
A(SPEED);
Wait(350);
Off(OUT_A);//向こうの紙パックを受けられる状態で待機
}
>
~ここではおおまかな流れの2番を2つに分けて行っている。
~始めに向こうの紙パックを受けるので、ゴールを空けるために...
<
sub car1()//反対側のロボットから紙パックを受け取って所定...
{
OnRL(SPEED,140);
A(SPEED);//受け取った後掴み直す
Wait(800);
OnRL(-SPEED,90);
A(-SPEED);
Wait(1000);
Off(OUT_A);
OnRL(SPEED,50);
A(SPEED);
Wait(1000);
OnRL(-SPEED,90);//紙パックを受け取って所定の位置に置き...
C90(-SPEED);
OnRL(SPEED,570);
A(-SPEED);
Wait(1000);
Off(OUT_A);//開始した地点に戻る
C90(-SPEED);
B90(SPEED);
OnRL(SPEED,160);
B90(SPEED);
OnRL_(SPEED,SPEED);
Wait(2000);//壁に当ててズレを修正
Off(OUT_BC);
Wait(500);
OnRL(-SPEED,390);
Off(OUT_BC);
A(SPEED);
Wait(350);
Off(OUT_A);//向こうの紙パックを受けられる状態で待機
}
sub car2()//反対側のロボットから紙パックを受け取って所定...
{
OnRL(SPEED,140);
A(SPEED);//受け取った後掴み直す
Wait(800);
OnRL(-SPEED,90);
A(-SPEED);
Wait(1000);
Off(OUT_A);
OnRL(SPEED,50);
A(SPEED);
Wait(1000);
OnRL(-SPEED,90);//紙パックを受け取って所定の位置に置き...
C90(-SPEED);
OnRL(SPEED,390);
A(-SPEED);
Wait(1000);
Off(OUT_A);//開始した地点に戻る
C90(-SPEED);
B90(SPEED);
OnRL(SPEED,170);
C90(-SPEED);
OnRL_(SPEED,SPEED);
Wait(3000);//壁に当ててズレを修正
Off(OUT_BC);
Wait(500);
}
>
~大まかな流れ3番を2つに分けて行っている。
~向こうから渡される回数は2回なので置きに行く時の進む距離...
<
sub pass1()//隔離した紙パックを渡しにいく(紙パック2個)
{
OnRL(-SPEED,390);//スタート地点に最後に置いた紙パックを...
Off(OUT_BC);
B90(-SPEED);
A(SPEED);
Wait(350);
Off(OUT_A);
OnRL(SPEED,400);
Off(OUT_BC);
Wait(500);
A(SPEED);
Wait(600);//受け渡し場所に持っていく
OnRL(-SPEED,210);
C90(-SPEED);
OnRL_(SPEED,SPEED);
Wait(2000);
Off(OUT_ABC);
Wait(500);
A(-SPEED);
Wait(1000);
Off(OUT_A);
OnRL(-SPEED_L,170);
}
sub pass2()//隔離した紙パックを渡しにいく(紙パック1個)
{
B90(-SPEED);//残りの紙パックを回収しに行く
OnRL(SPEED,580);
Off(OUT_BC);
Wait(500);
A(SPEED);
Wait(600);//受け渡し場所に持っていく
OnRL(-SPEED,330);
C90(-SPEED);
OnRL_(SPEED,SPEED);
Wait(2000);
Off(OUT_ABC);
Wait(500);
A(-SPEED);
Wait(1000);
Off(OUT_A);
OnRL(-SPEED_L,170);
}
>
~最後のここでも2つに分けている。
~受け渡し場所に持っていき、低速で離れることによって反動で...
<
sub connect_slave1()
{
int msg=0;//受け取った数値を格納するための変数
int flag=0;//処理を終了してwhile文を抜けるための変数
while(flag!=1){
ReceiveRemoteNumber(MAILBOX1,true,msg);//MAILBOX1に格...
if(msg==1){//もし読み込んだ数値が1(相手が所定の一に到...
SendResponseNumber(MAILBOX2,1);//MAILBOX2に1という数...
}else if(msg==2){//もし読み込んだ数値が2(相手に通知さ...
repeat(30){
SendResponseNumber(MAILBOX2,2);//MAILBOX2に2という数...
}
flag=1;//whileを抜けるための数値を入れる
}
}
}
sub connect_slave2()
{
int msg=0;//受け取った数値を格納するための変数
int flag=0;//処理を終了してwhile文を抜けるための変数
while(flag!=1){
ReceiveRemoteNumber(MAILBOX3,true,msg);//MAILBOX3に格...
if(msg==1){//もし読み込んだ数値が1(相手が所定の一に到...
SendResponseNumber(MAILBOX4,1);//MAILBOX4に1という数...
}else if(msg==2){//もし読み込んだ数値が2(相手に通知さ...
repeat(30){
SendResponseNumber(MAILBOX4,2);//MAILBOX4に2という数...
}
flag=1;//whileを抜けるための数値を入れる
}
}
}
sub connect_slave3()
{
int msg=0;//受け取った数値を格納するための変数
int flag=0;//処理を終了してwhile文を抜けるための変数
while(flag!=1){
ReceiveRemoteNumber(MAILBOX5,true,msg);//MAILBOX5に格...
if(msg==1){//もし読み込んだ数値が1(相手が所定の一に到...
SendResponseNumber(MAILBOX6,1);//MAILBOX6に1という数...
}else if(msg==2){//もし読み込んだ数値が2(相手に通知さ...
repeat(30){
SendResponseNumber(MAILBOX6,2);//MAILBOX6に2という数...
}
flag=1;//whileを抜けるための数値を入れる
}
}
}
sub connect_slave4()
{
int msg=0;//受け取った数値を格納するための変数
int flag=0;//処理を終了してwhile文を抜けるための変数
while(flag!=1){
ReceiveRemoteNumber(MAILBOX7,true,msg);//MAILBOX7に格...
if(msg==1){//もし読み込んだ数値が1(相手が所定の一に到...
SendResponseNumber(MAILBOX8,1);//MAILBOX8に1という数...
}else if(msg==2){//もし読み込んだ数値が2(相手に通知さ...
repeat(500){
SendResponseNumber(MAILBOX8,2);//MAILBOX2に8という数...
Wait(1);
}
flag=1;//whileを抜けるための数値を入れる
}
}
}
>
~これらは通信をするためのプログラムである。
~4つあるのは1つのプログラムを使いまわした時に上手く動作し...
~サブルーチンの名前から分かるよう、こちらのロボットがslav...
***本体 [#u2199ce8]
<
task main()
{
int gain;//センサの値と閾値の差分を入れる変数
int flag=0;//処理を終了してwhile文を抜けるための変数
int nOnline=0;//黒線を読んだ数
SetSensorLight(S4);
OnRL_(SPEED,SPEED);
Wait(500);
while(flag!=1){
if(nOnline>nMAX){//交差点と判断
OnRL_(SPEED,0);//ラインに平行になるよう修正
Wait(350);
Off(OUT_BC);
OnRL(SPEED,130);
B90(-SPEED);
Off(OUT_BC);
OnRL_(SPEED,SPEED);
Wait(1200);//壁に当ててズレを修正
Off(OUT_BC);
/*これ以下のプログラムはほぼサブルーチンを参照*/
get1();
get2();
connect_slave1();
Wait(3000);
car1();
connect_slave2();
Wait(3000);
car2();
pass1();
connect_slave3();
Wait(30000);
pass2();
connect_slave4();
flag=1;//whileを抜けるための数値を入れる
}else{
if(SENSOR_4<=THRESHOLD-10){//センサーの値が30以下の場合
turn_right;
nOnline++;//カウンタを増やす
}else if(SENSOR_4>=THRESHOLD+10){//センサーの値が50以...
turn_left;
nOnline=0;//カウンタをリセット
}else{//それ以外の場合は比例制御
gain=THRESHOLD-SENSOR_4;//差分計算
OnRL_(SPEED_L+gain,SPEED_L-gain);
nOnline=0;//カウンタをリセット
}
}
Wait(STEP);
}
}
>
~本体はライントレースが主体となっている。
~交差点を判断した後はサブルーチンを処理し、終了する。
~connect_slaveの後にWaitが入っているが、これらは一方のロ...
**感想・考察 [#a7721dc0]
<
~前回の反省も活かすことができた。
~角度制御にすることにより、時間制御よりも安定性が増した。...
~通信や角度制御についてもう少し学んでから挑みたかった。
ページ名: