今回の課題は積み上げられた缶を特定の場所へ移動させるもの。ロボットはA,A'からスタートする。X,Yに三段に積み上げられたアルミ缶の一段目と三段目を反対側の円の中に移動させる。移動させた際、積み上げると加点が入る。短い期間では、全てを積み上げるといった高度な動きを目指すのは危険と判断し、堅実に移動させることを目標とした。二つのロボットに役割分担をさせている。一つ目のロボットが二段目をつかんでいる間にもう片方が一、三段目を引っ張り移動させる。二段目をつかむためのロボット。センサーはついていないため、移動する距離、角度は一定である。ギアを使うことで左右同時に開閉する。一、三段目をつかむためのロボット。一段目と三段目をつかむ機構はシャフトを介して連動するようになっている。一段目をつかめる高さにアームを調節するためNXT本体をひっくり返す形となっている。一段目と三段目が離れているためシャフトが離れたりして三段目をつかむ力が弱くなるなどの課題も出てきた。こちらは、超音波センサーがついているため動き出しの初めに積み上がっている缶を探す動作が入る。二つのロボットを連携させて動かすため、無線通信によって動きを制御している。全体の流れとしては、二段目をつかむ→一、三段目を引き抜く→掴んでる二段目を離す→反対側へ移動し二段目をつかむ→掴んだ一、三段目を運ぶ→移動させた側の一、三段目を引き抜く→二段目離す→一。三段目移動となっている。msg,frg1=1,frg2=1;zen(51);kair;zen(75);kair;zeny(20);armc();//xに移動SendRemoteNumber(1,MAILBOX1,11);//送信while(frg1){ReceiveRemoteNumber(MAILBOX1,true,msg);//受信if(msg==12){armo();kou(20);kair;zen(44);kail;zeny(20);armc();//yに移動frg1=0;SendRemoteNumber(1,MAILBOX1,13);//送信}}while(frg2){ReceiveRemoteNumber(MAILBOX1,true,msg);//受信if(msg==14){armo();frg2=0;}}}アームを閉じるプログラムは、当初RotateMotorで行おうとしたが、缶を挟むと回転角が所定の角度まで足らなくなりそこでプログラムが止まってしまうという事態になってしまった。アームを閉じるときはOnFwdで記述することにした。二段目を掴むロボットがずれてアルミ缶を倒してしまい、その後の動きが全て上手くいかず0点となった。今度は二段目を掴むロボットは缶を掴むことができたが、もう片方のロボットがうまくいかず2点という結果に終わった。技術点は平均12.2点で合計14.2点、順位は13組中7位となった。†グループメンバーの予定がうまく合わず、二つのロボットの動きを合わせる時間が少なく最高の出来とは、言えないが、時間のない中では最大限頑張れたと思う。可能であれば、もっと動きの検証をしたかった。†この講義が私の初めてのプログラミングで、わからないことも多く、コンパイルに失敗しては何度も原因は何かと頭を悩ませた。ほんの少しの、それこそ一字の間違いでプログラムが動かなかったり、完璧だと思ったプログラムが動いたとしても望み通りの動きをしなかったりと、プログラミングの難しさをよく知ることができた。今回の経験を今後のプログラミングにぜひ生かしていきたいと思う。