[[2013b/MemberOnly/進行状況]] *課題2 [#o47b0ac4] 今回の課題はロボットがライントレースしながら線上に置いてあるアルミ缶をゴール部分まで運び、缶を積み上げる課題である。 今回私達はNQCのロボットを二つ合体させ、缶を運びそして積み上げることにした。理由はロボットを運ぶロボットと積み上げるロボットに分離してしまうとモーターが最大3つまでしか使えないからである。 http://yakushi.shinshu-u.ac.jp/robotics/?plugin=ref&page=2013b%2FMember%2FsatoT%2FMission2&src=kadai2.png *メンバー紹介 [#o77ce12a] **nazan 理学部数理自然情報科学科 数学を知り尽くしてはいない男 [#y21d7d3a] **shinshi 工学部情報工学科 おしゃれでダンディな男 [#z95fce3e] **tomato 工学部電気電子工学科 漫画に精通してる男 [#y7624957] **satoT 農学部応用生命科学科 身長185�僂離好淵ぅ僉次� [#kfac7c03] *ロボットの紹介 [#lfe206b7] 私達のロボットは、缶を積み上げるためにジャッキを使って積み上げる方法を考えた。まずはライントレースがしっかりできるように車輪を考え、後輪は一つにしてなるべく小さいタイヤを使って小回りができるようにした。 &ref(25335.jpg); そして缶を持ち上げ、積み上げるためにメンバーとの話し合いの結果ジャッキを使うことに決定した。最初はエレベーター方式の様に持ち上げようと試みたが、なかなかうまくいかなかった。 また軽量化を図るために色々と試行錯誤の結果このようなロボットになった。 &ref(25327.jpg); *プログラミング [#c67c8bb0] **アームのプログラミング [#lbd50944] #define kurot 37 #define kurok 42 #define kurog 45 #define shiro 47 #define hi 1 #define low 1 #define lift_up OnFwd(OUT_AB); #define lift_down OnRev(OUT_AB); #define tukamu OnRev(OUT_C); #define release OnFwd(OUT_C); #define MOVE_TIMEA 280 #define MOVE_TIMEB 140 #define MOVE_TIMEC 30 #define MOVE_TIMED 250 #define kousin 5 #define pdown 6 #define zensin 7 #define kyatti 8 #define anoraitore 10 #define kankan 11 #define bnoraitore 12 #define cnoraitore 13 #define bniraitore 14 #define kanhanasu 15 #define tyoikousin 16 int p=0; int n=0; int x=0; int y=0; int k=0; task main() { ClearMessage(); while(k < 1){ until(Message() == kyatti); tukamu; Wait(50); lift_up; Wait(300); k++; } ClearMessage(); SendMessage(anoraitore); Wait(10); while(k < 2){ ClearMessage(); until(Message() == kankan); lift_down; Wait(MOVE_TIMEC); Off(OUT_AB); release; Wait(50); Off(OUT_C); release; Wait(50); Off(OUT_C); k++; } ClearMessage(); SendMessage(kousin); Wait(10); ClearMessage(); while(k < 3){ until(Message() == pdown); lift_down; Wait(MOVE_TIMED); Off(OUT_AB); k++; } ClearMessage(); SendMessage(zensin); Wait(10); ClearMessage(); while(k < 4){ until(Message() == kyatti); tukamu; Wait(50); k++; } ClearMessage(); SendMessage(bnoraitore); Wait(10); ClearMessage(); while(k < 5){ until(Message() == kyatti); tukamu; Wait(50); lift_up; Wait(MOVE_TIMEA); k++; } ClearMessage(); SendMessage(cnoraitore); Wait(10); ClearMessage(); while(k < 6){ until(Message() == kankan); lift_down; Wait(MOVE_TIMEC); release; Wait(50); k++; } ClearMessage(); SendMessage(kousin); Wait(10); ClearMessage(); while(k < 7){ until(Message() == pdown); lift_down; Wait(MOVE_TIMED); Off(OUT_AB); k++; } ClearMessage(); SendMessage(zensin); Wait(10); ClearMessage(); while(k < 8){ until(Message() == kyatti); tukamu; Wait(50); k++; } ClearMessage(); SendMessage(bniraitore); ClearMessage(); while(k < 9){ until(Message() == kanhanasu); release; Wait(50); k++; } ClearMessage(); SendMessage(tyoikousin); Wait(10); Off(OUT_ABC); } **タイヤのプログラム [#f8abc9a4] #define kurot 37 #define kurok 42 #define kurog 45 #define shiro 47 #define hi 5 #define low 2 #define sh SetPower(OUT_AC, hi); #define sl SetPower(OUT_AC,low); #define slh SetPower(OUT_A,low); SetPower(OUT_C,hi); #define shl SetPower(OUT_A,hi); SetPower(OUT_C,low); #define sss SetPower(OUT_A,1);SetPower(OUT_C,1); #define mae sh OnFwd(OUT_AC); #define ushiro OnRev(OUT_AC); #define migi0 sl; OnFwd(OUT_C); Off(OUT_A); #define migi1 sl; OnFwd(OUT_C); OnRev(OUT_A); #define hidari0 sl; Off(OUT_C); OnFwd(OUT_A); #define hidari1 sl; OnRev(OUT_C); OnFwd(OUT_A); #define STEP 1 #define nMAX 5 #define yasumi Off(OUT_AC); Wait(100); #define cross 25 #define cross_line sl; OnFwd(OUT_AC); Wait(cross); yasumi; #define kousin 5 #define pdown 6 #define zensin 7 #define kyatti 8 #define anoraitore 10 #define kankan 11 #define bnoraitore 12 #define cnoraitore 13 #define bniraitore 14 #define kanhanasu 15 #define tyoikousin 16 int p=0; int n=0; int x=0; int y=0; sub hidarikan () { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); while(SENSOR_1 > 55){ if (SENSOR_1 < kurot){ hidari0; p++; } else { if(SENSOR_1 < kurok){ hidari0; } else if (SENSOR_1 < kurog){ mae; } else if (SENSOR_1 < shiro){ migi0; } else { migi0; } p=0; } Wait(STEP); } yasumi; migi0; Wait(nMAX*STEP*2); cross_line; n++; p=0; } sub hidaria () { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); while(n < 2){ while(p < nMAX){ if (SENSOR_1 < kurot){ hidari1; p++; } else { if(SENSOR_1 < kurok){ hidari0; } else if (SENSOR_1 < kurog){ mae; } else if (SENSOR_1 < shiro){ migi0; } else { migi1; } p=0; } Wait(STEP); } yasumi; migi1; Wait(nMAX*STEP*2); cross_line; n++; p=0; } } sub hidarib () { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); while(n < 3){ while(p < nMAX){ if (SENSOR_1 < kurot){ hidari1; p++; } else { if(SENSOR_1 < kurok){ hidari0; } else if (SENSOR_1 < kurog){ mae; } else if (SENSOR_1 < shiro){ migi0; } else { migi1; } p=0; } Wait(STEP); } yasumi; migi1; Wait(nMAX*STEP*2); cross_line; n++; p=0; } } sub hidaric () { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); while(n < 4){ while(p < nMAX){ if (SENSOR_1 < kurot){ hidari1; p++; } else { if(SENSOR_1 < kurok){ hidari0; } else if (SENSOR_1 < kurog){ mae; } else if (SENSOR_1 < shiro){ migi0; } else { migi1; } p=0; } Wait(STEP); } yasumi; migi1; Wait(nMAX*STEP*2); cross_line; n++; p=0; } } sub hidarid () { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); while(n < 7){ while(p < nMAX){ if (SENSOR_1 < kurot){ hidari1; p++; } else { if(SENSOR_1 < kurok){ hidari0; } else if (SENSOR_1 < kurog){ mae; } else if (SENSOR_1 < shiro){ migi0; } else { migi1; } p=0; } Wait(STEP); } yasumi; migi1; Wait(nMAX*STEP*2); cross_line; n++; p=0; } } task main () { int p=0; int n=0; int x=0; int y=0; int k=0; migi0;until(SENSOR_1 < 45); Off(OUT_AC); hidarikan(); ClearMessage(); SendMessage(kyatti); Wait(10); ClearMessage(); while(k < 1){ until(Message() == anoraitore); hidaria(); k++; } hidarikan(); ClearMessage(); SendMessage(kankan); Wait(10); ClearMessage(); while(k < 2){ until(Message() == kousin); OnRev(OUT_AC); Wait(10); Off(OUT_AC); k++; } ClearMessage(); SendMessage(pdown); Wait(10); ClearMessage(); while(k < 3){ until(Message() == zensin); OnFwd(OUT_AC); Wait(10); Off(OUT_AC); k++; } ClearMessage(); SendMessage(kyatti); Wait(10); ClearMessage(); while(k < 4){ until(Message() == bnoraitore); hidarib(); hidari1; Wait(50); OnFwd(OUT_AC); Wait(25); OnRev(OUT_AC); Wait(50); Off(OUT_AC); migi0; Wait(50); migi1;until(SENSOR_1 <45); Off(OUT_AC); hidarikan(); k++; } ClearMessage(); SendMessage(kyatti); Wait(10); ClearMessage(); while(k < 5){ until(Message() == cnoraitore); hidaric(); hidarikan(); k++; } ClearMessage(); SendMessage(kankan); Wait(10); ClearMessage(); while(k < 6){ until(Message() == kousin); OnRev(OUT_AC); Wait(10); Off(OUT_AC); k++; } ClearMessage(); SendMessage(pdown); Wait(10); ClearMessage(); while(k < 7){ until(Message() == zensin); OnFwd(OUT_AC); Wait(10); Off(OUT_AC); k++; } ClearMessage(); SendMessage(kyatti); Wait(10); ClearMessage(); while(k < 8){ until(Message() == bniraitore); hidarid(); hidari0; Wait(10); OnFwd(OUT_AC); Wait(15); k++; } ClearMessage(); SendMessage(kanhanasu); Wait(10); ClearMessage(); while(k < 9){ until(Message() == tyoikousin); OnRev(OUT_AC); Wait(100); Off(OUT_AC); k++; } } *結果 [#a6e03c9f] ロボコンの結果は最下位という結果になってしまった。ライントレースが思うようにうまくいかずに、ロボットの缶を積み上げるためにジャッキを動かすことをお見せすることしかできなかった。 *反省 [#h23358e7] **ロボットの製作 [#hdd464c6] ロボットの製作にあたっていくつかの問題点があった。1つにロボットを少し動かすだけで壊れてしむというもろさがあった。もっと強固にすべきであり、工夫しながらパーツを組み立てるべきであった。またジャッキを付けることによって、ロボットが不安定なものになってしまった。これも工夫次第で安定させることができたと思われる。 **プログラミングの製作 [#wcc22ecf] プログラミングではメンバーがとても一生懸命考えてくれて自分は少しのサポートしかできなかった。もう少し自分も協力すればよかったと深く反省している。また、プログラミングの調整する時間があまりなかったので、調整する時間も考えながらプログラミングをしていかなければならないと感じた。 *感想 [#r5aa4dfa] 課題2は不甲斐ない結果で終わってしまって非常に残念だった。もう少し試行錯誤してロボットの製作もプログラミングも慎重にやっていきたかった。しかし、メンバーと集まって色々と話し合うことでロボットを作って操作するという楽しさを味わえたことがとてもうれしかった。