2018a/Member/hirotaka/Mission3
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2018a/Member]]
目次
#contents
*課題3:空き缶運搬ロボット [#b3a97cf0]
空き缶を分別して所定の場所に運ぶ。
#ref(./ルート.png,50%,コース)
**フィールドの説明 [#ma202b54]
-フィールドは課題2で使用した紙を使用する。
-2種類の空き缶(Aタイプ,Bタイプ)をそれぞれ3個づつ用意し、...
-空き缶には色をつけたり文字や記号を書いてもよい。あるいは...
#ref(./缶の移動1.png,60%,移動1)
缶の初期配置を横から見た図で簡略的に表してみた。缶の移動...
**ルール [#jb4d4a51]
-基本得点の計算方法&br;
運んだ空き缶の数×3点
空き缶を積み重ねて置くことができば場合、2段目の空き缶一つ...
円内からはみ出している場合、半分以下なら1点減点、半分以上...
間違った円内に空き缶を置いた場合は、1個につき1点減点。&br;
間違った円内の2段目に空き缶を置いた場合は1個につき3点減点...
ルールについて詳しくは[[こちら>2018a/Mission3]]。
*機体の説明 [#k7ad3995]
これが機体の全体像です。アームのついてる方が前になります...
#ref(./全体像.jpg,70%,全体像)
この機体は本体とアームの2つの部品に分けることができます。
それぞれに分けて説明していきます。&br;
&ref(./本体側.jpg,70%,本体);
&ref(./アーム.jpg,70%,アーム);
**本体部分の説明 [#l5b4a9e7]
以下の写真で示しているところにセンサーとモータが取り付け...
&ref(./本体センサー類.png,50%,本体センサー類1);
&ref(./本体センサー類2.png,50%,本体センサー類2);
***車輪まわり [#yd04b7cf]
車輪は左右それぞれにモーターを取り付け二輪駆動にした。そ...
ロータリーセンサーは以下のように取り付けておりモーターの...
#ref(./ロータリーセンサー.png,40%,ロータリーセンサー)
***タッチセンサー [#z46d7cd1]
てこの原理を使って小さな衝撃で反応するようにした。また、...
#ref(./タッチセンサー.png,55%,タッチセンサー)
***アームの上下機構 [#q5383f13]
ラックを使って上下動作を行った。上下の高さ制御は時間で行...
&ref(./アーム上下機構.png,30%,アーム上下機構);&ref(./アー...
***光電センサー [#k8f04808]
左右方向の中心から離すことで線に対して垂直に停止できるよ...
**アーム部分の説明 [#vb7e5cdd]
小さいタイヤを取り付けることで摩擦を増やし、缶が滑り落ち...
#ref(./アームの歯車1.png,50%,アームの歯車1)
#ref(./アームの歯車3.png,35%,アームの歯車3)
解決するために下の写真のようにギアを組み替えることで解決...
#ref(./アームの歯車2.png,35%,アームの歯車2)
**接続 [#o110e594]
アーム側にラックを取り付けた柱と距離をとって支柱を取り付...
#ref(./接続1.png,35%,接続1)
*作戦 [#n39dde8a]
前日までは第一案で構想していたが、成功率が安定しないため...
以下はそれぞれの案について説明する。
**第一案 [#z99acf5f]
目標得点を16点(1段目×2本+2段目×2本)として以下の図のよ...
#ref(./缶の移動2.png,60%,移動2)
1番上の缶から分別を行い、最下段の缶はエリア外から出して減...
下の図と合わせて、機体の移動と缶の移動方法について詳しく...
-機体はまずスタート地点Aから出発し、交差点Gへ移動する。
-地点Yの3段目にあるB1缶をつかみ、青の円の中に置く?。
-?〜?も同じように行い分別させる。
#ref(./機体と缶の移動経路.png,50%,経路1)
この方法で制御をしようと考えたが、ロータリーセンサーの精...
**第二案 [#g783430b]
目標点を6点(1段目×2)として以下の図のような配置でフィニ...
#ref(./缶の移動3.png,60%,移動3)
地点Yの上から2つの缶をそれぞれ分別を行い、それ以外の缶は...
下の図と合わせて、機体と缶の移動について詳しく説明する。
-機体はまずスタート地点Aから出発し、交差点Gへ移動する。
-地点YのB1缶をつかみ、地点Xにある缶を機体ごと体当たりして...
-地点Yに戻りA2の缶をつかみ、その下にあるB3の缶を同じよう...
#ref(./機体と缶の移動経路2.png,50%,経路2)
*プログラム [#xda09de5]
プログラムはメンバーのkan777君とDsuke君が作ってくれました...
Risの機体を2つ使い制御をしているのでそれぞれの分けて掲載...
**上の段のRis [#rd90f144]
接続されているコード&br;
入力側&br;
ータッチセンサー(3)&br;
出力側&br;
ーアームの上下モーター(C)&br;
ーアームの開閉モーター(A)&br;
&br;
//上段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 //缶に接近を検知するセンサのしきい値
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
orosu(1);
SendMessage(103); //migi90
until(203==Message()); //終了を受信 はなす
HIRAKU
SendMessage(104); //少し下がらせる
//二段目Aの缶
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
}
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);
}
void orosu(int b){
OnRev(OUT_C);
switch (b){
case 1:
Wait(200);//3から1段目の時間 170➖200 9.1Vで17...
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 [#he8b1f20]
接続されているコード&br;
入力側&br;
ー光電センサー1(1)&br;
ー光電センサー2(3)&br;
ーロータリーセンサー(2)&br;
出力側&br;
ー左タイヤのモーター(C)&br;
ー右タイヤのモーター(A)&br;
&br;
//90度のローテーションセンサの調整 缶をとってからの時間...
//下段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)...
#define BACK Wait(80);OnRev(OUT_AC);ClearSensor(SENSOR_2...
#define FCAN Wait(80);OnFwd(OUT_AC);ClearTimer(0);until(...
int S,time;
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); //4か5
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); //100から増やしていく
until(SENSOR_1>777||SENSOR_3>777);
Wait(10);
Off(OUT_AC);
//移動終わり
PlaySound(SOUND_DOUBLE_BEEP);
Wait(100);
//三段目Aの缶をCの1段目へ
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
//2段目Aの缶をAの1段目へ
TURNL
SendMessage(201); //アームを開けて2段目へ
until(101==Message()); //終わりを検知
TURNL
FCAN
until(102==Message()); //掴み終わったら
TURNL
SendMessage(202);
until(103==Message()); //
TURNR
BACK
BACK
SendMessage(203); //置かせる
}
*反省・感想 [#ld604967]
うまくいかないことが多く、前日からオールして制作をし、...
今回、機体をメインで制作に関わりました。課題1,2に比べ素...
最後に、この4人のチームで取り組めて良かったと思っていま...
終了行:
[[2018a/Member]]
目次
#contents
*課題3:空き缶運搬ロボット [#b3a97cf0]
空き缶を分別して所定の場所に運ぶ。
#ref(./ルート.png,50%,コース)
**フィールドの説明 [#ma202b54]
-フィールドは課題2で使用した紙を使用する。
-2種類の空き缶(Aタイプ,Bタイプ)をそれぞれ3個づつ用意し、...
-空き缶には色をつけたり文字や記号を書いてもよい。あるいは...
#ref(./缶の移動1.png,60%,移動1)
缶の初期配置を横から見た図で簡略的に表してみた。缶の移動...
**ルール [#jb4d4a51]
-基本得点の計算方法&br;
運んだ空き缶の数×3点
空き缶を積み重ねて置くことができば場合、2段目の空き缶一つ...
円内からはみ出している場合、半分以下なら1点減点、半分以上...
間違った円内に空き缶を置いた場合は、1個につき1点減点。&br;
間違った円内の2段目に空き缶を置いた場合は1個につき3点減点...
ルールについて詳しくは[[こちら>2018a/Mission3]]。
*機体の説明 [#k7ad3995]
これが機体の全体像です。アームのついてる方が前になります...
#ref(./全体像.jpg,70%,全体像)
この機体は本体とアームの2つの部品に分けることができます。
それぞれに分けて説明していきます。&br;
&ref(./本体側.jpg,70%,本体);
&ref(./アーム.jpg,70%,アーム);
**本体部分の説明 [#l5b4a9e7]
以下の写真で示しているところにセンサーとモータが取り付け...
&ref(./本体センサー類.png,50%,本体センサー類1);
&ref(./本体センサー類2.png,50%,本体センサー類2);
***車輪まわり [#yd04b7cf]
車輪は左右それぞれにモーターを取り付け二輪駆動にした。そ...
ロータリーセンサーは以下のように取り付けておりモーターの...
#ref(./ロータリーセンサー.png,40%,ロータリーセンサー)
***タッチセンサー [#z46d7cd1]
てこの原理を使って小さな衝撃で反応するようにした。また、...
#ref(./タッチセンサー.png,55%,タッチセンサー)
***アームの上下機構 [#q5383f13]
ラックを使って上下動作を行った。上下の高さ制御は時間で行...
&ref(./アーム上下機構.png,30%,アーム上下機構);&ref(./アー...
***光電センサー [#k8f04808]
左右方向の中心から離すことで線に対して垂直に停止できるよ...
**アーム部分の説明 [#vb7e5cdd]
小さいタイヤを取り付けることで摩擦を増やし、缶が滑り落ち...
#ref(./アームの歯車1.png,50%,アームの歯車1)
#ref(./アームの歯車3.png,35%,アームの歯車3)
解決するために下の写真のようにギアを組み替えることで解決...
#ref(./アームの歯車2.png,35%,アームの歯車2)
**接続 [#o110e594]
アーム側にラックを取り付けた柱と距離をとって支柱を取り付...
#ref(./接続1.png,35%,接続1)
*作戦 [#n39dde8a]
前日までは第一案で構想していたが、成功率が安定しないため...
以下はそれぞれの案について説明する。
**第一案 [#z99acf5f]
目標得点を16点(1段目×2本+2段目×2本)として以下の図のよ...
#ref(./缶の移動2.png,60%,移動2)
1番上の缶から分別を行い、最下段の缶はエリア外から出して減...
下の図と合わせて、機体の移動と缶の移動方法について詳しく...
-機体はまずスタート地点Aから出発し、交差点Gへ移動する。
-地点Yの3段目にあるB1缶をつかみ、青の円の中に置く?。
-?〜?も同じように行い分別させる。
#ref(./機体と缶の移動経路.png,50%,経路1)
この方法で制御をしようと考えたが、ロータリーセンサーの精...
**第二案 [#g783430b]
目標点を6点(1段目×2)として以下の図のような配置でフィニ...
#ref(./缶の移動3.png,60%,移動3)
地点Yの上から2つの缶をそれぞれ分別を行い、それ以外の缶は...
下の図と合わせて、機体と缶の移動について詳しく説明する。
-機体はまずスタート地点Aから出発し、交差点Gへ移動する。
-地点YのB1缶をつかみ、地点Xにある缶を機体ごと体当たりして...
-地点Yに戻りA2の缶をつかみ、その下にあるB3の缶を同じよう...
#ref(./機体と缶の移動経路2.png,50%,経路2)
*プログラム [#xda09de5]
プログラムはメンバーのkan777君とDsuke君が作ってくれました...
Risの機体を2つ使い制御をしているのでそれぞれの分けて掲載...
**上の段のRis [#rd90f144]
接続されているコード&br;
入力側&br;
ータッチセンサー(3)&br;
出力側&br;
ーアームの上下モーター(C)&br;
ーアームの開閉モーター(A)&br;
&br;
//上段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 //缶に接近を検知するセンサのしきい値
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
orosu(1);
SendMessage(103); //migi90
until(203==Message()); //終了を受信 はなす
HIRAKU
SendMessage(104); //少し下がらせる
//二段目Aの缶
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
}
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);
}
void orosu(int b){
OnRev(OUT_C);
switch (b){
case 1:
Wait(200);//3から1段目の時間 170➖200 9.1Vで17...
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 [#he8b1f20]
接続されているコード&br;
入力側&br;
ー光電センサー1(1)&br;
ー光電センサー2(3)&br;
ーロータリーセンサー(2)&br;
出力側&br;
ー左タイヤのモーター(C)&br;
ー右タイヤのモーター(A)&br;
&br;
//90度のローテーションセンサの調整 缶をとってからの時間...
//下段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)...
#define BACK Wait(80);OnRev(OUT_AC);ClearSensor(SENSOR_2...
#define FCAN Wait(80);OnFwd(OUT_AC);ClearTimer(0);until(...
int S,time;
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); //4か5
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); //100から増やしていく
until(SENSOR_1>777||SENSOR_3>777);
Wait(10);
Off(OUT_AC);
//移動終わり
PlaySound(SOUND_DOUBLE_BEEP);
Wait(100);
//三段目Aの缶をCの1段目へ
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
//2段目Aの缶をAの1段目へ
TURNL
SendMessage(201); //アームを開けて2段目へ
until(101==Message()); //終わりを検知
TURNL
FCAN
until(102==Message()); //掴み終わったら
TURNL
SendMessage(202);
until(103==Message()); //
TURNR
BACK
BACK
SendMessage(203); //置かせる
}
*反省・感想 [#ld604967]
うまくいかないことが多く、前日からオールして制作をし、...
今回、機体をメインで制作に関わりました。課題1,2に比べ素...
最後に、この4人のチームで取り組めて良かったと思っていま...
ページ名: