基本-箱を運びある範囲に積む。
4つの箱を積み上げる。
もっとも初めに考えたロボットで1つのロボットを使い4つの箱を横から縦に変えて4つセットなものを四角い場所に運んでくる、もう一つのロボットで4つの箱をつかみ上げ下げを2回行うと成功するのではと思われた。
この構造は箱を4つつかむ機構
上の絵で解るようにこの機構を使うと多くの面を使い紙パックを押し付けることができる。実際に作くると下のような感じになる。
プーリを使うことによりモータを回転し続け緩まないようになっている。
また1つのモータで前後左右の2つの方向に押すことができる。
このロボットの役割は箱をつかんで後ろの籠に積みながら入れていくものです。
試作品なのでアームと籠を付けただけの簡単なものです。 この時点でいくつかの問題点がありました。
前回の失敗を改善、何とか動く。
上記の役割はそのままに
数々の失敗をしてしまいましたがいくつか大きなもの紹介します。
#define BT_CONN 1 //接続するスレーブの番号(ポート1) #define IN_BOX 1 //受信するメールボックス(1) #define OUT_BOX 5 //送信するメールボックス(5) int washaflag=0; //後ろの籠を動かすか否かのフラグ /* スレーブ側からメッセージが届くまでマスターのプログラムを停止させる。 */ sub Mblock(){ int in; while(true){ ReceiveRemoteNumber(IN_BOX,true,in);//メッセージを受けるまで無限ループ if(in==1){ break; } } } /* スレーブへメッセージを送り、スレーブ側のプログラムを動かす。 */ sub Mokay(){ SendRemoteNumber(BT_CONN,OUT_BOX,1); } /* 後ろの籠を動かすタスク(submainと同時起動) */ task washawasha(){ while(true){ if(washaflag){ //グローバル変数washaflagによって動かすか判定 OnFwd(OUT_C,100); Wait(300); OnRev(OUT_C,100); Wait(250); } } } /* メインの関数(washawashaと同時起動) */ task submain(){ washaflag=1; SetSensorTouch(IN_1); RotateMotor(OUT_A,60,2700); //アームを下ろす OnFwd(OUT_B,100); //アーム先を閉める Wait(30000); OnRev(OUT_A,60); //Sensor1が押されるまで while(!Sensor(IN_1)); //アームを上げる Off(OUT_A); // OnRev(OUT_B,100); //アーム先を開ける Wait(30000); Off(OUT_B); Mokay(); //スレーブに制御を渡す Mblock(); // RotateMotor(OUT_A,60,2700); //以下同 OnFwd(OUT_B,100); Wait(30000); OnRev(OUT_A,60); while(!Sensor(IN_1)); Off(OUT_A); OnRev(OUT_B,100); Wait(30000); Off(OUT_B); Mokay(); Mblock(); RotateMotor(OUT_A,60,2700); OnFwd(OUT_B,100); Wait(30000); OnRev(OUT_A,60); while(!Sensor(IN_1)); Off(OUT_A); OnRev(OUT_B,100); Wait(30000); Off(OUT_B); } task main(){ Precedes(submain, washawasha); //タスクsubmain, washawashaを並列起動。 }
ロボット完成が遅く実際のコースを体験することなく試合当日になってしまいました。 申し訳ありませんでした。
今回は時間を多くかけたにもかかわらずこのような結果を招いたことを申し訳なく思います。もう少しレゴの負担を少なくするべきでした。試作品が完成し実走させて動かないことを確認した後で大きなフォルムチェンジをしコース走行可能な状態になったのが試合3日前、テスト走行は試合当日になってから、部分的なテストはしていたものの、実際の動きは大きくずれがありとても制御することができるものではありませんでした。
来年以降の人にアドバイスするなら無理な構造は早くあきらめて他の方法についてしっかり考えることだと思います。あまり焦って作ってもいいものはできません。予想される問題についてもしっかり吟味する必要があります。NXTの部品はピンを使用した固定が主になると思います。ピンはせん断には強いですが引張りにはあまり効果がありませんのでそのことをよく考えて作ってください。
最後に、NXTはRCXに比べて部品数が少ない気がしますが弱音を吐かずに頑張ってください。
まずはギアの破損についてお詫び申し上げたいと思います。すみませんでした。原因や、機械的なことは志村君が書いたもので十分だと思うので、プログラムについてと感想を書きます。
まず、プログラムについて。NXCは割と癖のある言語です。C言語やC++言語に非常に似てはいるのですが、ポインタが存在しないなどの大きな違いがあります。これには戸惑うこともあると思いますが、割と何とかなります。NXTはかなり高性能なので、無理な記述も可能でしょう。とにかく本番と同じ条件で何度も動かすことが重要です。誤差が出たら何回も修正していきましょう。
次に、感想を。結局あのような結果になってしまったものの、今回私はかなりの達成感を得ることができました。土日を挟んだために実際のコースで走らせられる時間は少なかったものの、ロボット製作は楽しいものでしたし、紙パックをかごに入れることができたときにはとてもうれしかったです。
気になったこと等ありましたらお気軽にコメントして下さい。