2018a/Member/illumight/Mission3
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2018a/Member]]
#contents
*課題 [#qa5b444f]
**運搬ロボットの制作[#e9cf3a71]
空き缶をつかみ,所定の位置に移動させる.
**得点方法[#l850d578]
1.課題2で使用したものと同じコースを使用する.
#ref(./コース.png,70%,コース)
2.2種類の空き缶を用意し,上図のX,Yの位置に交互に重ねる.
#ref(./初期位置.png,70%,初期位置)
3.指定の位置に移動させ,円内に収める.
#ref(./移動後.png,70%,移動後)
4.運んだ空き缶の数×3点.空き缶を積み重ねて置くことがで...
円内からはみ出している場合、半分以下なら1点減点、半分以上...
間違った円内に空き缶を置いた場合は、1個につき1点減点。
間違った円内の2段目に空き缶を置いた場合は1個につき3点減点...
2種類の空き缶は区別ができれば良い.また,そのために缶の周...
*製作したロボット [#t02581d5]
**全体像 [#m4d855c3]
#ref(./全体像3.png,70%,全体像)
この機体は以下の2つの部品(本体及びアーム)からできてい...
**本体 [#g56d3e51]
&ref(./本体.png.jpg,70%,本体);
&ref(./差し込み部.png.jpg,70%,本体横);
&ref(./機体下部.png.jpg,70%,本体下部);
&ref(./回転センサー.png.jpg,70%,回転センサー);
&ref(./光センサー.png,70%,光センサー);
↑本体:小回りをしやすいよう2輪にした.左右に一つづつモー...
**アーム [#c89c52c7]
#ref(./アーム3.png,70%,アーム)
↑アーム:アームの上下にはラックを使用し,本体の上下用モー...
**本体とアームの接続方法[#qe69361c]
&ref(./接続.png,70%,接続方法);
&ref(./接続上部.png,70%,接続方法);
上の図のようにアームを本体のスリットに滑り込ませるように...
*得点のためのプロセス [#hb3bdd5a]
前日までは第一案,しかし実際には第二案で得点を目指した.
**第一案 [#y4819b09]
第一案では,交互に並べられた缶を一度中間地点にそれぞれの...
**第二案 [#nb130581]
第二案では,Y地点の缶上二段をそれぞれ指定地点に入れる,と...
*プログラム [#d02dfa98]
私たちの班は,ハードウェア担当が私とhirotaka君で,ソフト...
**上側のRIS [#q13e4c57]
上側のRISの端子には,3番端子にタッチセンサー,A端子に開...
***使用したマクロ [#t32ce4b9]
//上段ris sendは100番代
#define TOJIRU Wait(50);OnFwd(OUT_A);Wait(100);
#define HIRAKU Wait(50);OnRev(OUT_A);Wait(30);Off(OUT_A);
#define THR 1000 //缶に接近を検知するセンサのしきい値
***端子の入出力の定義 [#rdc6451b]
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_2,SENSOR_ROTATION);
SetSensor(SENSOR_3,SENSOR_LIGHT);
SetSensorMode(SENSOR_1,SENSOR_MODE_RAW);
SetSensorMode(SENSOR_3,SENSOR_MODE_RAW);
SetPower(OUT_A,2); //4か5
SetPower(OUT_C,2);
*** 3段目の缶の操作[#q207fb85]
ClearMessage();
SendMessage(1); //三段目Aの缶
until(201==Message()); //移動終了を受信したらアームを開...
ageru(1); //3段目の位置までアームを移動
HIRAKU
SendMessage(101); //右に90度 前進させる
until(THR>SENSOR_3); //缶に接近したら
SendMessage(100); //缶に接近したメッセージ
TOJIRU
ageru(10); //少し上げる
SendMessage(102); //少し下がって右に90
until(202==Message()); //終了を受信 orosu
orosu(1);
SendMessage(103); //migi90
until(203==Message()); //終了を受信 はなす
HIRAKU
SendMessage(104); //少し下がらせる
***2段目の缶の操作 [#t131ffc9]
until(201==Message()); //おいた後
ageru(2);
HIRAKU
SendMessage(101); //右に90度 前進させる
until(THR>SENSOR_3); //缶に接近したら
SendMessage(100); //缶に接近したメッセージ
TOJIRU
ageru(10); //少し上げる
SendMessage(102); //少し下がって左に90度させる
until(202==Message());
orosu(2); //2-1
SendMessage(103);
until(203==Message());
HIRAKU
}
***サブルーチン・あげる [#j99d81a2]
void ageru(int a){
OnFwd(OUT_C);
switch (a){
case 1:
Wait(320);//1から3段目の時間 270-300の間 9.2Vで270は...
break;
case 2:
Wait(130);//1から2へ 110-130 9.1Vで130が丁度いい
break;
case 10:
Wait(55);//ちょっと上げる時間 30-50 9.1Vで30は足りない
break;
}
Off(OUT_C);
}
***サブルーチン・おろす [#c4518623]
void orosu(int b){
OnRev(OUT_C);
switch (b){
case 1:
Wait(200);//3から1段目の時間 170➖200 9.1Vで170...
break;
case 2:
Wait(80);
break;
case 3:
Wait(60);//2から1.5へ 40➖55 9.1Vでは足りない
break;
case 20:
Wait(20);//ちょっと下げる時間 20➖50 下がらなさ...
break;
}
Off(OUT_C);
Wait(100);
}
**下側のRIS [#b2416641]
下側のRISの端子には1番及び3番端子に光センサー,2番端子に...
***使用したマクロ [#j8fa45a4]
//下段ris sendは200番代
#define TURNL
Wait(80);OnFwd(OUT_C);OnRev(OUT_A);ClearSensor(SENSOR_2)...
#define TURNR
Wait(80);OnFwd(OUT_A);OnRev(OUT_C);ClearSensor(SENSOR_2)...
#define FOR
Wait(80);OnFwd(OUT_AC);ClearSensor(SENSOR_2);until(SENSO...
#define BACK
Wait(80);OnRev(OUT_AC);ClearSensor(SENSOR_2);until(SENSO...
#define FCAN
Wait(80);OnFwd(OUT_AC);ClearTimer(0);until(100==Message(...
int S,time;
***端子の入出力の定義 [#i19214b8]
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_2,SENSOR_ROTATION);
SetSensor(SENSOR_3,SENSOR_LIGHT);
SetSensorMode(SENSOR_1,SENSOR_MODE_RAW);
SetSensorMode(SENSOR_3,SENSOR_MODE_RAW);
SetPower(OUT_A,2); //4か5
SetPower(OUT_C,2);
***X,Yの中間地点までの移動 [#n28471be]
ClearMessage();
until(1==Message()); //移動開始 //53センチ前進
OnFwd(OUT_AC);
ClearSensor(SENSOR_2);
until(SENSOR_2<=-165);
Off(OUT_AC);
TURNL//左に90度旋回 //真ん中まで前進
OnFwd(OUT_AC);
Wait(180); //100から増やしていく
until(SENSOR_1>777||SENSOR_3>777);
Wait(10);
Off(OUT_AC); //移動終わり
PlaySound(SOUND_DOUBLE_BEEP);
Wait(100);
***上のRISに連動した移動1 [#p054ddec]
SendMessage(201); //メッセージを送りアームを開き3段目...
until(101==Message()); //左に90度 缶の直前まで前進
TURNL
Wait(50);
FCAN
until(102==Message());
OnRev(OUT_AC);
Wait(time);
Off(OUT_AC);
TURNR
SendMessage(202);
until(103==Message());
Wait(80);
TURNR
OnFwd(OUT_A);OnRev(OUT_C);ClearSensor(SENSOR_2);until(SE...
FOR
SendMessage(203); //はなす
until(104==Message()); //おいたのを検知
BACK
***上のRISに連動した移動2 [#n611c5a5]
TURNL
SendMessage(201); //アームを開けて2段目へ
until(101==Message()); //終わりを検知
TURNL
FCAN
until(102==Message()); //掴み終わったら
TURNL
SendMessage(202);
until(103==Message()); //
TURNR
BACK
BACK
SendMessage(203); //置かせる
}
*反省・感想 [#af4668bc]
本当は最初に考えていた第一案で競技に参加したかったのだが...
終了行:
[[2018a/Member]]
#contents
*課題 [#qa5b444f]
**運搬ロボットの制作[#e9cf3a71]
空き缶をつかみ,所定の位置に移動させる.
**得点方法[#l850d578]
1.課題2で使用したものと同じコースを使用する.
#ref(./コース.png,70%,コース)
2.2種類の空き缶を用意し,上図のX,Yの位置に交互に重ねる.
#ref(./初期位置.png,70%,初期位置)
3.指定の位置に移動させ,円内に収める.
#ref(./移動後.png,70%,移動後)
4.運んだ空き缶の数×3点.空き缶を積み重ねて置くことがで...
円内からはみ出している場合、半分以下なら1点減点、半分以上...
間違った円内に空き缶を置いた場合は、1個につき1点減点。
間違った円内の2段目に空き缶を置いた場合は1個につき3点減点...
2種類の空き缶は区別ができれば良い.また,そのために缶の周...
*製作したロボット [#t02581d5]
**全体像 [#m4d855c3]
#ref(./全体像3.png,70%,全体像)
この機体は以下の2つの部品(本体及びアーム)からできてい...
**本体 [#g56d3e51]
&ref(./本体.png.jpg,70%,本体);
&ref(./差し込み部.png.jpg,70%,本体横);
&ref(./機体下部.png.jpg,70%,本体下部);
&ref(./回転センサー.png.jpg,70%,回転センサー);
&ref(./光センサー.png,70%,光センサー);
↑本体:小回りをしやすいよう2輪にした.左右に一つづつモー...
**アーム [#c89c52c7]
#ref(./アーム3.png,70%,アーム)
↑アーム:アームの上下にはラックを使用し,本体の上下用モー...
**本体とアームの接続方法[#qe69361c]
&ref(./接続.png,70%,接続方法);
&ref(./接続上部.png,70%,接続方法);
上の図のようにアームを本体のスリットに滑り込ませるように...
*得点のためのプロセス [#hb3bdd5a]
前日までは第一案,しかし実際には第二案で得点を目指した.
**第一案 [#y4819b09]
第一案では,交互に並べられた缶を一度中間地点にそれぞれの...
**第二案 [#nb130581]
第二案では,Y地点の缶上二段をそれぞれ指定地点に入れる,と...
*プログラム [#d02dfa98]
私たちの班は,ハードウェア担当が私とhirotaka君で,ソフト...
**上側のRIS [#q13e4c57]
上側のRISの端子には,3番端子にタッチセンサー,A端子に開...
***使用したマクロ [#t32ce4b9]
//上段ris sendは100番代
#define TOJIRU Wait(50);OnFwd(OUT_A);Wait(100);
#define HIRAKU Wait(50);OnRev(OUT_A);Wait(30);Off(OUT_A);
#define THR 1000 //缶に接近を検知するセンサのしきい値
***端子の入出力の定義 [#rdc6451b]
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_2,SENSOR_ROTATION);
SetSensor(SENSOR_3,SENSOR_LIGHT);
SetSensorMode(SENSOR_1,SENSOR_MODE_RAW);
SetSensorMode(SENSOR_3,SENSOR_MODE_RAW);
SetPower(OUT_A,2); //4か5
SetPower(OUT_C,2);
*** 3段目の缶の操作[#q207fb85]
ClearMessage();
SendMessage(1); //三段目Aの缶
until(201==Message()); //移動終了を受信したらアームを開...
ageru(1); //3段目の位置までアームを移動
HIRAKU
SendMessage(101); //右に90度 前進させる
until(THR>SENSOR_3); //缶に接近したら
SendMessage(100); //缶に接近したメッセージ
TOJIRU
ageru(10); //少し上げる
SendMessage(102); //少し下がって右に90
until(202==Message()); //終了を受信 orosu
orosu(1);
SendMessage(103); //migi90
until(203==Message()); //終了を受信 はなす
HIRAKU
SendMessage(104); //少し下がらせる
***2段目の缶の操作 [#t131ffc9]
until(201==Message()); //おいた後
ageru(2);
HIRAKU
SendMessage(101); //右に90度 前進させる
until(THR>SENSOR_3); //缶に接近したら
SendMessage(100); //缶に接近したメッセージ
TOJIRU
ageru(10); //少し上げる
SendMessage(102); //少し下がって左に90度させる
until(202==Message());
orosu(2); //2-1
SendMessage(103);
until(203==Message());
HIRAKU
}
***サブルーチン・あげる [#j99d81a2]
void ageru(int a){
OnFwd(OUT_C);
switch (a){
case 1:
Wait(320);//1から3段目の時間 270-300の間 9.2Vで270は...
break;
case 2:
Wait(130);//1から2へ 110-130 9.1Vで130が丁度いい
break;
case 10:
Wait(55);//ちょっと上げる時間 30-50 9.1Vで30は足りない
break;
}
Off(OUT_C);
}
***サブルーチン・おろす [#c4518623]
void orosu(int b){
OnRev(OUT_C);
switch (b){
case 1:
Wait(200);//3から1段目の時間 170➖200 9.1Vで170...
break;
case 2:
Wait(80);
break;
case 3:
Wait(60);//2から1.5へ 40➖55 9.1Vでは足りない
break;
case 20:
Wait(20);//ちょっと下げる時間 20➖50 下がらなさ...
break;
}
Off(OUT_C);
Wait(100);
}
**下側のRIS [#b2416641]
下側のRISの端子には1番及び3番端子に光センサー,2番端子に...
***使用したマクロ [#j8fa45a4]
//下段ris sendは200番代
#define TURNL
Wait(80);OnFwd(OUT_C);OnRev(OUT_A);ClearSensor(SENSOR_2)...
#define TURNR
Wait(80);OnFwd(OUT_A);OnRev(OUT_C);ClearSensor(SENSOR_2)...
#define FOR
Wait(80);OnFwd(OUT_AC);ClearSensor(SENSOR_2);until(SENSO...
#define BACK
Wait(80);OnRev(OUT_AC);ClearSensor(SENSOR_2);until(SENSO...
#define FCAN
Wait(80);OnFwd(OUT_AC);ClearTimer(0);until(100==Message(...
int S,time;
***端子の入出力の定義 [#i19214b8]
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_2,SENSOR_ROTATION);
SetSensor(SENSOR_3,SENSOR_LIGHT);
SetSensorMode(SENSOR_1,SENSOR_MODE_RAW);
SetSensorMode(SENSOR_3,SENSOR_MODE_RAW);
SetPower(OUT_A,2); //4か5
SetPower(OUT_C,2);
***X,Yの中間地点までの移動 [#n28471be]
ClearMessage();
until(1==Message()); //移動開始 //53センチ前進
OnFwd(OUT_AC);
ClearSensor(SENSOR_2);
until(SENSOR_2<=-165);
Off(OUT_AC);
TURNL//左に90度旋回 //真ん中まで前進
OnFwd(OUT_AC);
Wait(180); //100から増やしていく
until(SENSOR_1>777||SENSOR_3>777);
Wait(10);
Off(OUT_AC); //移動終わり
PlaySound(SOUND_DOUBLE_BEEP);
Wait(100);
***上のRISに連動した移動1 [#p054ddec]
SendMessage(201); //メッセージを送りアームを開き3段目...
until(101==Message()); //左に90度 缶の直前まで前進
TURNL
Wait(50);
FCAN
until(102==Message());
OnRev(OUT_AC);
Wait(time);
Off(OUT_AC);
TURNR
SendMessage(202);
until(103==Message());
Wait(80);
TURNR
OnFwd(OUT_A);OnRev(OUT_C);ClearSensor(SENSOR_2);until(SE...
FOR
SendMessage(203); //はなす
until(104==Message()); //おいたのを検知
BACK
***上のRISに連動した移動2 [#n611c5a5]
TURNL
SendMessage(201); //アームを開けて2段目へ
until(101==Message()); //終わりを検知
TURNL
FCAN
until(102==Message()); //掴み終わったら
TURNL
SendMessage(202);
until(103==Message()); //
TURNR
BACK
BACK
SendMessage(203); //置かせる
}
*反省・感想 [#af4668bc]
本当は最初に考えていた第一案で競技に参加したかったのだが...
ページ名: