- 追加された行はこの色です。
- 削除された行はこの色です。
**ロボコン [#w0e93901]
#contents
**ルール [#lc3c9993]
基本-箱を運びある範囲に積む。
**試作品 ロボット [#d96016e0]
***役割 [#x5a2f535]
4つの箱を積み上げる。&br;
もっとも初めに考えたロボットで1つのロボットを使い4つの箱を横から縦に変えて4つセットなものを四角い場所に運んでくる、もう一つのロボットで4つの箱をつかみ上げ下げを2回行うと成功するのではと思われた。
***構造 [#xcea3fac]
この構造は箱を4つつかむ機構
#ref(2011b/A4/ロボコン/test02_2.gif,100%,掴む機構)
上の絵で解るようにこの機構を使うと多くの面を使い紙パックを押し付けることができる。実際に作くると下のような感じになる。
#ref(2011b/A4/ロボコン/test02_1.jpg,100%,掴む機構)
プーリを使うことによりモータを回転し続け緩まないようになっている。&br;
また1つのモータで前後左右の2つの方向に押すことができる。
***このロボットの問題点 [#a985a887]
-二つのロボットを作るために相対的に部品数が多くなる。
-移動に必要なモーターの数が多くなり必要な動作ができなくなる。
-作ってから気づきましたがこれだと積んでも抜けません。
-かなりの精度で箱4つを運んでくる必要があります。
**ロボット 1つの場合(試作) [#pdd59aae]
***役割 [#af1371a5]
このロボットの役割は箱をつかんで後ろの籠に積みながら入れていくものです。
#ref(2011b/A4/ロボコン/yakuwari.gif,50%,役割)
***構造 [#ef895993]
#ref(2011b/A4/ロボコン/test001_1.jpg,100%,ロボット試作)
試作品なのでアームと籠を付けただけの簡単なものです。
この時点でいくつかの問題点がありました。
-全体的にバランスが悪くタイヤの空転があり動かないことが多々ある。
-籠が地面と設置しているために抵抗が大きく動かないことがある。
-つかんで後ろに持っていてもうまく落ちない。
これらの事から運命に委ねず制御可能なロボットにするためには大きなフォルムチェンジが必要でした。
**ロボット 1つの場合(試合用) [#led8400c]
前回の失敗を改善、何とか動く。
#ref(2011b/A4/ロボコン/kanseirobo.jpg,100%,ロボット完成品)
***役割 [#sc55e3d3]
上記の役割はそのままに
***構造 [#n678d064]
-アーム&br;
今回の大きな失敗の一つとなったこの構造。下の写真のようにあまりにでかい。&br;
#ref(2011b/A4/ロボコン/ude_04.jpg,30%,アーム)
主に重さの原因となったのはアームの先端にある掴むために必要なタイヤ、アーム開閉用のモーター。モーメントでアームの先端はなるべく軽くする必要がありました。
初めに作ったアームは左のようなモータが先についているパターンで改良後は右のようにアームの根本にモータを配置しました。
#ref(2011b/A4/ロボコン/ude_2.gif,100%,アーム改善)
この重さを上げ下げするのに必要なモーターの力は無理な力をかけ部品を破損させる原因とないました。アームの上げ過ぎ防止にタッチセンサを使いましたが固定が不十分で誤差が大きく作動しないことがあった。このことで必要以上の力がギヤにかかったと考えられる。&br;
-籠&br;
#ref(2011b/A4/ロボコン/kago.jpg,100%,籠)
前回の長さを短くし設置位置も改善、強固とは言えないもの動いても取れない固定に&br;
籠には扉をつけて必要な場所におけるようにしました。&br;
また、この扉を紙パックを落とすときにわしゃわしゃすることで紙パックが引っかかることなく落ちるようにしました。
#ref(2011b/A4/ロボコン/kago2.jpg,100%,籠の開閉用モータ)
-動力&br;
前回より車幅を広くとりタイヤの上に重みがかかるように改善。
-NXT本体&br;
前回の位置から大きく改善、左のタイヤに重心をかけれるようにしました。
#ref(2011b/A4/ロボコン/NXC配置.jpg,60%,NXCの位置)
-センサ&br;
--光センサ:コース上のラインを判断しライントレースするためのセンサ。
--超音波センサ:壁との距離を測り自分の位置を認識する。
#ref(2011b/A4/ロボコン/超音波センサー.jpg,75%,超音波センサ)
--タッチセンサ:このタッチセンサにあたるまでアームを上げる。&br;
配置は次の図のような感じです。
#ref(2011b/A4/ロボコン/sensa.gif,100%,センサの位置)
***構造の問題点[#jbbac249]
数々の失敗をしてしまいましたがいくつか大きなもの紹介します。
-初めの失敗は重いことです。何より重い、構造からもう少しシンプルなものにすべきでした。
-キャスターの強度不足。かなり部品を少なくしたために歪みが大きくロボットが回転するときに大きな負荷を与えてしまいました。
-アーム保持用モーターの負荷の大きさ。アームがかなり重い仕様になってしまいモーターにかかる力がものすごいことになってしまいました。ギヤ比をかなり高くしたために力がかかるとギヤが壊れてしまいます。
#ref(2011b/A4/ロボコン/hakai.jpg,100%,破損されたギヤ)
-アームが上がりすぎるのを防止するためのタッチセンサの不確実さ。うまく落とすためにアームが止まる位置を正確にしなくてはいけません。タッチセンサをしっかり固定しなかったことでアームが籠に押し付けられる形になりギヤが破損にいたりました。
-右側にモーターやアーム、籠が集中し重心が大きく傾き真直ぐ進むことができない状態でした。NXT本体を左よりにいましたが少し足りなかったようです。
-アーム保持モーターの保持の不安定さ。紙パックを持った状態でアームを上下するとモーターが左右にねじれてしまいうまく籠に落とすことができない。
**プログラム [#e34d9110]
[[2011b/A4/Bluetoothを使った通信方法]]
***アームを操作する側のNXT(マスター) [#n1639e0c]
#define BT_CONN 1
#define IN_BOX 1
#define OUT_BOX 5
#define BT_CONN 1 //接続するスレーブの番号(ポート1)
#define IN_BOX 1 //受信するメールボックス(1)
#define OUT_BOX 5 //送信するメールボックス(5)
int washaflag=0;
sub Mblock(){
int washaflag=0; //後ろの籠を動かすか否かのフラグ
/*
スレーブ側からメッセージが届くまでマスターのプログラムを停止させる。
*/
sub Mblock(){
int in;
while(true){
ReceiveRemoteNumber(IN_BOX,true,in);
ReceiveRemoteNumber(IN_BOX,true,in);//メッセージを受けるまで無限ループ
if(in==1){
break;
}
}
}
/*
スレーブへメッセージを送り、スレーブ側のプログラムを動かす。
*/
sub Mokay(){
SendRemoteNumber(BT_CONN,OUT_BOX,1);
}
/*
後ろの籠を動かすタスク(submainと同時起動)
*/
task washawasha(){
while(true){
if(washaflag){
OnFwd(OUT_C,100);
Wait(300);
OnRev(OUT_C,100);
Wait(250);
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);
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);
OnRev(OUT_A,60); //Sensor1が押されるまで
while(!Sensor(IN_1)); //アームを上げる
Off(OUT_A); //
OnRev(OUT_B,100); //アーム先を開ける
Wait(30000);
Off(OUT_B);
Mokay();
Mblock();
Mokay(); //スレーブに制御を渡す
Mblock(); //
RotateMotor(OUT_A,60,2700);
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);
}
Wait(5000);
Mokay();
Mblock();
washaflag=0;
OnRev(OUT_C,75);
Mokay();
Mblock();
Off(OUT_C);
Mokay();
}
task main(){
Precedes(submain, washawasha);
Precedes(submain, washawasha); //タスクsubmain, washawashaを並列起動。
}
***移動を制御する側のNXT(スレーブ) [#e7a58d0d]
ロボット完成が遅く実際のコースを体験することなく試合当日になってしまいました。
申し訳ありませんでした。
**感想 と来年以降NXTを使用する皆様へ一言[#u2498896]
***志村 [#l646ebff]
今回は時間を多くかけたにもかかわらずこのような結果を招いたことを申し訳なく思います。もう少しレゴの負担を少なくするべきでした。試作品が完成し実走させて動かないことを確認した後で大きなフォルムチェンジをしコース走行可能な状態になったのが試合3日前、テスト走行は試合当日になってから、部分的なテストはしていたものの、実際の動きは大きくずれがありとても制御することができるものではありませんでした。&br;
来年以降の人にアドバイスするなら無理な構造は早くあきらめて他の方法についてしっかり考えることだと思います。あまり焦って作ってもいいものはできません。予想される問題についてもしっかり吟味する必要があります。NXTの部品はピンを使用した固定が主になると思います。ピンはせん断には強いですが引張りにはあまり効果がありませんのでそのことをよく考えて作ってください。
最後に、NXTはRCXに比べて部品数が少ない気がしますが弱音を吐かずに頑張ってください。
***中村 [#s6c608a4]
まずはギアの破損についてお詫び申し上げたいと思います。すみませんでした。原因や、機械的なことは志村君が書いたもので十分だと思うので、プログラムについてと感想を書きます。
まず、プログラムについて。NXCは割と癖のある言語です。C言語やC++言語に非常に似てはいるのですが、ポインタが存在しないなどの大きな違いがあります。これには戸惑うこともあると思いますが、割と何とかなります。NXTはかなり高性能なので、無理な記述も可能でしょう。とにかく本番と同じ条件で何度も動かすことが重要です。誤差が出たら何回も修正していきましょう。
次に、感想を。結局あのような結果になってしまったものの、今回私はかなりの達成感を得ることができました。土日を挟んだために実際のコースで走らせられる時間は少なかったものの、ロボット製作は楽しいものでしたし、紙パックをかごに入れることができたときにはとてもうれしかったです。
**コメント [#nd3e1c28]
気になったこと等ありましたらお気軽にコメントして下さい。
#comment