2018a/Member/Dsuke/Mission3
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2018a/Member]]
*目次 [#p4fcb1c1]
#contents
*課題3 [#f1398342]
空き缶を分別して所定の場所に運ぶ。
**フィールドの説明 [#x446a9b2]
フィールドは課題2で使用した紙を使用する。
#ref(コース3.png)
2種類の空き缶(Aタイプ,Bタイプ)をそれぞれ3個づつ用意し、...
#ref(缶の積み方.PNG)
空き缶には色をつけたり文字や記号を書いてもよい。あるい...
**ルール [#q0af4dda]
基本ルール
競技時間は審判が続行不能と判断するまで、あるいはリタイ...
図のA地点または(および)A'地点からスタートする。ただし...
Aタイプの空き缶を円Y内に、Bタイプの空き缶を円X内に運ぶ。
開始の合図から5秒以内にスタートボタンを押す作業を完了...
競技が終了するまで、ロボットに触ったり人間が遠隔で操作...
途中でうまく動かなくなった場合、1回限り再スタートする...
#ref(缶の積み方2.PNG)
この置き方が最大の得点
***基本得点の計算方法 [#u85c45a6]
運んだ空き缶の数×3点
空き缶を積み重ねて置くことができば場合、2段目の空き缶一...
円内からはみ出している場合、半分以下なら1点減点、半分以...
間違った円内に空き缶を置いた場合は、1個につき1点減点。
間違った円内の2段目に空き缶を置いた場合は1個につき3点減...
***技術点の計算方法 [#p4a651f2]
以下の動作の精度・スピード・確実性などを含めた技術的な...
得点の目安:
空き缶を探し取りにいくまでの動作 (3点)
空き缶を掴む動作 (3点)
空き缶を運ぶ動作 (2点)
空き缶を置く動作 (2点)
空き缶を積む動作 (3点)
2台のRCXまたはNXT、EV3の連携の良さ(2点)
自立型のロボットとしての形や動作の美しさ、斬新さ(2点)
その他 (3点)
*ロボットの説明 [#jbe56304]
**全体の説明 [#ab9a2f92]
今回はRISを2台使えたので、通信を使ってロボットを上下2つ...
上部は缶を掴むためのアーム機構で、下部は車体の移動を行...
本体は縦長の箱をイメージしており、旋回しても缶にぶつか...
#ref(全体像.jpg)
**上部(アーム機構)の説明 [#v348164e]
アーム機構は上下スライド式になっており、缶の3段目の位...
RISの特徴である平たいギアを繋げることで高い位置まで可動...
スライドをさせるためにガイドを作った。形はホチキスの針...
また、ガイドとアームの間にわずかな空間ができてしまうた...
#ref(アーム機構.PNG)
アームは缶の位置が多少ずれてもカバーできるように、大き...
#ref(アーム.jpg)
**下部(車体)の説明 [#t5158db6]
車輪は二輪にすることで、その場での旋回ができりようにし...
車輪には回転センサを付けており、90度の回転や180度の回転...
車体の裏には光センサを2つ付けた。これにより、センサが線...
#ref(下のセンサーx.jpg)
車体の前方にはタッチセンサが付いており、缶タワーに当た...
缶が軽いためタッチセンサが反応しなかったが、てこの原理...
#ref(タッチセンサー2.jpg)
*プログラムの説明 [#e5421905]
**戦略 [#p5bd8be8]
戦略は以下の通りである。
Yの円の3段目をXの円に移動。
Xの円にあった缶を円外に出し、掴んだ缶を置く。
Yの円に戻り、2段目の缶を掴む。
少し横にずらし、Yの円内にある残りの缶を押し出す。
掴んだ缶をYの円内に置く。
#ref(移動2.png)
**define [#e9dc2a21]
defineはアーム用・車体用の2つに分け、それぞれ用意した。
上部のdefineは、缶を掴むTOJIRU・缶を離すHIRAKU・タッチ...
TOJIRUにOff(OUT_A);があると缶が落ちてしまうので書いてい...
上部のdefine
#define TOJIRU Wait(50);OnFwd(OUT_A);Wait(100); ...
#define HIRAKU Wait(50);OnRev(OUT_A);Wait(30);Off(OUT_A)...
#define THR 1000 //缶に接...
下部のdefineは、90度左に曲がるTURNL・90度右に曲がるTURN...
下部のdefine
#define TURNL Wait(80);OnFwd(OUT_C);OnRev(OUT_A);ClearSe...
#define TURNR Wait(80);OnFwd(OUT_A);OnRev(OUT_C);ClearSe...
#define FOR Wait(80);OnFwd(OUT_AC);ClearSensor(SENSOR_2)...
#define BACK Wait(80);OnRev(OUT_AC);ClearSensor(SENSOR_2...
#define FCAN Wait(80);OnFwd(OUT_AC);ClearTimer(0);until(...
**上部 [#jee4f262]
上部プログラムは下部からのメッセージを受け取り、アーム...
アームを開閉するプログラムが書いてあるが、缶の高さによ...
//上段risのsendMssageは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 //缶に接...
task main(){
SetSensor(SENSOR_3,SENSOR_TOUCH);
SetSensorMode(SENSOR_3,SENSOR_MODE_RAW);
SetPower(OUT_A,7);
SetPower(OUT_C,7);
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(1); //1段目の高さま...
SendMessage(103); //右に90度回転
until(203==Message()); //終了を受信
HIRAKU //離す
SendMessage(104); //少し後退
//二段目Aの缶
until(201==Message()); //缶をおいて左に90度曲がった後
ageru(2); //アームを2段目の高さま...
HIRAKU //アームを開く
SendMessage(101); //左に90度曲がり 前進させる
until(THR>SENSOR_3); //缶に接近したら
SendMessage(100); //缶に接近したメッセージ
TOJIRU //缶を掴む
ageru(10); //少し上げる
SendMessage(102); //少し後退し 左に90度回転
until(202==Message());
orosu(2); //アームを1段目の高さまで下げる
SendMessage(103); //右に90度回転 円内の缶...
until(203==Message());
HIRAKU //缶を置く
}
void ageru(int a){
OnFwd(OUT_C);
switch (a){
case 1:
Wait(320); //1段目から3段目の時間
break;
case 2:
Wait(130); //1段目から2段目の時間
break;
case 10:
Wait(55); //缶をちょっと持ち上げる時間
break;
}
Off(OUT_C);
}
void orosu(int b){
OnRev(OUT_C);
switch (b){
case 1:
Wait(200); //3段目から1段目の時間
break;
case 2:
Wait(80); //2段目から1段目の時間
break;
case 3:
Wait(60); //2段目から1.5段目の時間
break;
case 20:
Wait(20); //ちょっと下げる時間
break;
}
Off(OUT_C);
Wait(100);
}
**下部 [#s125c9c9]
下部プロゴラムは上部(タッチセンサ)のメッセ―ジを受け取...
交差点の位置まで前進し、曲がって直進、トレースをして止...
下段ris sendは200番代
#define TURNL Wait(80);OnFwd(OUT_C);OnRev(OUT_A);ClearSe...
#define TURNR Wait(80);OnFwd(OUT_A);OnRev(OUT_C);ClearSe...
#define FOR Wait(80);OnFwd(OUT_AC);ClearSensor(SENSOR_2)...
#define BACK Wait(80);OnRev(OUT_AC);ClearSensor(SENSOR_2...
#define FCAN Wait(80);OnFwd(OUT_AC);ClearTimer(0);until(...
int time; //define FCANで使用
task main(){ //下のRIS用、移動と回転
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);
SetPower(OUT_C,2);
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);
until(SENSOR_1>777||SENSOR_3>777); //交差点で停止
Wait(10);
Off(OUT_AC);
//移動終わり
PlaySound(SOUND_DOUBLE_BEEP);
Wait(100);
3段目Aの缶をCの1段目へ
SendMessage(201); //メッセージを送りアームを開...
until(101==Message());
//左に90度 缶の直前まで前進
TURNL //左に90度回転
Wait(50);
FCAN //缶の位置まで...
until(102==Message());
OnRev(OUT_AC); //缶の位置まで進んだ分下がる
Wait(time);
Off(OUT_AC);
TURNR //右に90度回転
SendMessage(202); //1段目の高さま...
until(103==Message());
Wait(80);
TURNR //右に90度回転 ...
OnFwd(OUT_A);OnRev(OUT_C);ClearSensor(SENSOR_2);until(SE...
FOR
SendMessage(203); //缶を置く
until(104==Message());
BACK
2段目Aの缶をAの1段目へ
TURNL //左に90度回転
SendMessage(201); //アームを開き、2段目の高さま...
until(101==Message()); //終わりを受信
TURNL //左に90度回転
FCAN //缶の位置まで前進
until(102==Message()); //掴み終わったら
TURNL //左に90度回転
SendMessage(202); //1段目の高さま...
until(103==Message()); //終わりを受信
TURNR //右に90度回転
BACK
BACK
SendMessage(203); //置かせる
}
*結果 [#t868494f]
本番ではやり直しの末、無事にロボットが動き、基本点6点+...
テスト明けということもあり、とにかく時間が無かった。テ...
ぎりぎりまで2段目を積むプログラムを試したが、回転センサ...
結果が出てよかったが、やはり2段目・3段目を積むために...
ロボットの軽量化は大切だが、RISを車体に乗せる場合はバラ...
今回の下部プログラムには、音を鳴らすプログラムが書かれ...
どこまでが出来ているのかが把握できるので便利である。
終了行:
[[2018a/Member]]
*目次 [#p4fcb1c1]
#contents
*課題3 [#f1398342]
空き缶を分別して所定の場所に運ぶ。
**フィールドの説明 [#x446a9b2]
フィールドは課題2で使用した紙を使用する。
#ref(コース3.png)
2種類の空き缶(Aタイプ,Bタイプ)をそれぞれ3個づつ用意し、...
#ref(缶の積み方.PNG)
空き缶には色をつけたり文字や記号を書いてもよい。あるい...
**ルール [#q0af4dda]
基本ルール
競技時間は審判が続行不能と判断するまで、あるいはリタイ...
図のA地点または(および)A'地点からスタートする。ただし...
Aタイプの空き缶を円Y内に、Bタイプの空き缶を円X内に運ぶ。
開始の合図から5秒以内にスタートボタンを押す作業を完了...
競技が終了するまで、ロボットに触ったり人間が遠隔で操作...
途中でうまく動かなくなった場合、1回限り再スタートする...
#ref(缶の積み方2.PNG)
この置き方が最大の得点
***基本得点の計算方法 [#u85c45a6]
運んだ空き缶の数×3点
空き缶を積み重ねて置くことができば場合、2段目の空き缶一...
円内からはみ出している場合、半分以下なら1点減点、半分以...
間違った円内に空き缶を置いた場合は、1個につき1点減点。
間違った円内の2段目に空き缶を置いた場合は1個につき3点減...
***技術点の計算方法 [#p4a651f2]
以下の動作の精度・スピード・確実性などを含めた技術的な...
得点の目安:
空き缶を探し取りにいくまでの動作 (3点)
空き缶を掴む動作 (3点)
空き缶を運ぶ動作 (2点)
空き缶を置く動作 (2点)
空き缶を積む動作 (3点)
2台のRCXまたはNXT、EV3の連携の良さ(2点)
自立型のロボットとしての形や動作の美しさ、斬新さ(2点)
その他 (3点)
*ロボットの説明 [#jbe56304]
**全体の説明 [#ab9a2f92]
今回はRISを2台使えたので、通信を使ってロボットを上下2つ...
上部は缶を掴むためのアーム機構で、下部は車体の移動を行...
本体は縦長の箱をイメージしており、旋回しても缶にぶつか...
#ref(全体像.jpg)
**上部(アーム機構)の説明 [#v348164e]
アーム機構は上下スライド式になっており、缶の3段目の位...
RISの特徴である平たいギアを繋げることで高い位置まで可動...
スライドをさせるためにガイドを作った。形はホチキスの針...
また、ガイドとアームの間にわずかな空間ができてしまうた...
#ref(アーム機構.PNG)
アームは缶の位置が多少ずれてもカバーできるように、大き...
#ref(アーム.jpg)
**下部(車体)の説明 [#t5158db6]
車輪は二輪にすることで、その場での旋回ができりようにし...
車輪には回転センサを付けており、90度の回転や180度の回転...
車体の裏には光センサを2つ付けた。これにより、センサが線...
#ref(下のセンサーx.jpg)
車体の前方にはタッチセンサが付いており、缶タワーに当た...
缶が軽いためタッチセンサが反応しなかったが、てこの原理...
#ref(タッチセンサー2.jpg)
*プログラムの説明 [#e5421905]
**戦略 [#p5bd8be8]
戦略は以下の通りである。
Yの円の3段目をXの円に移動。
Xの円にあった缶を円外に出し、掴んだ缶を置く。
Yの円に戻り、2段目の缶を掴む。
少し横にずらし、Yの円内にある残りの缶を押し出す。
掴んだ缶をYの円内に置く。
#ref(移動2.png)
**define [#e9dc2a21]
defineはアーム用・車体用の2つに分け、それぞれ用意した。
上部のdefineは、缶を掴むTOJIRU・缶を離すHIRAKU・タッチ...
TOJIRUにOff(OUT_A);があると缶が落ちてしまうので書いてい...
上部のdefine
#define TOJIRU Wait(50);OnFwd(OUT_A);Wait(100); ...
#define HIRAKU Wait(50);OnRev(OUT_A);Wait(30);Off(OUT_A)...
#define THR 1000 //缶に接...
下部のdefineは、90度左に曲がるTURNL・90度右に曲がるTURN...
下部のdefine
#define TURNL Wait(80);OnFwd(OUT_C);OnRev(OUT_A);ClearSe...
#define TURNR Wait(80);OnFwd(OUT_A);OnRev(OUT_C);ClearSe...
#define FOR Wait(80);OnFwd(OUT_AC);ClearSensor(SENSOR_2)...
#define BACK Wait(80);OnRev(OUT_AC);ClearSensor(SENSOR_2...
#define FCAN Wait(80);OnFwd(OUT_AC);ClearTimer(0);until(...
**上部 [#jee4f262]
上部プログラムは下部からのメッセージを受け取り、アーム...
アームを開閉するプログラムが書いてあるが、缶の高さによ...
//上段risのsendMssageは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 //缶に接...
task main(){
SetSensor(SENSOR_3,SENSOR_TOUCH);
SetSensorMode(SENSOR_3,SENSOR_MODE_RAW);
SetPower(OUT_A,7);
SetPower(OUT_C,7);
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(1); //1段目の高さま...
SendMessage(103); //右に90度回転
until(203==Message()); //終了を受信
HIRAKU //離す
SendMessage(104); //少し後退
//二段目Aの缶
until(201==Message()); //缶をおいて左に90度曲がった後
ageru(2); //アームを2段目の高さま...
HIRAKU //アームを開く
SendMessage(101); //左に90度曲がり 前進させる
until(THR>SENSOR_3); //缶に接近したら
SendMessage(100); //缶に接近したメッセージ
TOJIRU //缶を掴む
ageru(10); //少し上げる
SendMessage(102); //少し後退し 左に90度回転
until(202==Message());
orosu(2); //アームを1段目の高さまで下げる
SendMessage(103); //右に90度回転 円内の缶...
until(203==Message());
HIRAKU //缶を置く
}
void ageru(int a){
OnFwd(OUT_C);
switch (a){
case 1:
Wait(320); //1段目から3段目の時間
break;
case 2:
Wait(130); //1段目から2段目の時間
break;
case 10:
Wait(55); //缶をちょっと持ち上げる時間
break;
}
Off(OUT_C);
}
void orosu(int b){
OnRev(OUT_C);
switch (b){
case 1:
Wait(200); //3段目から1段目の時間
break;
case 2:
Wait(80); //2段目から1段目の時間
break;
case 3:
Wait(60); //2段目から1.5段目の時間
break;
case 20:
Wait(20); //ちょっと下げる時間
break;
}
Off(OUT_C);
Wait(100);
}
**下部 [#s125c9c9]
下部プロゴラムは上部(タッチセンサ)のメッセ―ジを受け取...
交差点の位置まで前進し、曲がって直進、トレースをして止...
下段ris sendは200番代
#define TURNL Wait(80);OnFwd(OUT_C);OnRev(OUT_A);ClearSe...
#define TURNR Wait(80);OnFwd(OUT_A);OnRev(OUT_C);ClearSe...
#define FOR Wait(80);OnFwd(OUT_AC);ClearSensor(SENSOR_2)...
#define BACK Wait(80);OnRev(OUT_AC);ClearSensor(SENSOR_2...
#define FCAN Wait(80);OnFwd(OUT_AC);ClearTimer(0);until(...
int time; //define FCANで使用
task main(){ //下のRIS用、移動と回転
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);
SetPower(OUT_C,2);
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);
until(SENSOR_1>777||SENSOR_3>777); //交差点で停止
Wait(10);
Off(OUT_AC);
//移動終わり
PlaySound(SOUND_DOUBLE_BEEP);
Wait(100);
3段目Aの缶をCの1段目へ
SendMessage(201); //メッセージを送りアームを開...
until(101==Message());
//左に90度 缶の直前まで前進
TURNL //左に90度回転
Wait(50);
FCAN //缶の位置まで...
until(102==Message());
OnRev(OUT_AC); //缶の位置まで進んだ分下がる
Wait(time);
Off(OUT_AC);
TURNR //右に90度回転
SendMessage(202); //1段目の高さま...
until(103==Message());
Wait(80);
TURNR //右に90度回転 ...
OnFwd(OUT_A);OnRev(OUT_C);ClearSensor(SENSOR_2);until(SE...
FOR
SendMessage(203); //缶を置く
until(104==Message());
BACK
2段目Aの缶をAの1段目へ
TURNL //左に90度回転
SendMessage(201); //アームを開き、2段目の高さま...
until(101==Message()); //終わりを受信
TURNL //左に90度回転
FCAN //缶の位置まで前進
until(102==Message()); //掴み終わったら
TURNL //左に90度回転
SendMessage(202); //1段目の高さま...
until(103==Message()); //終わりを受信
TURNR //右に90度回転
BACK
BACK
SendMessage(203); //置かせる
}
*結果 [#t868494f]
本番ではやり直しの末、無事にロボットが動き、基本点6点+...
テスト明けということもあり、とにかく時間が無かった。テ...
ぎりぎりまで2段目を積むプログラムを試したが、回転センサ...
結果が出てよかったが、やはり2段目・3段目を積むために...
ロボットの軽量化は大切だが、RISを車体に乗せる場合はバラ...
今回の下部プログラムには、音を鳴らすプログラムが書かれ...
どこまでが出来ているのかが把握できるので便利である。
ページ名: