[[2008b/MemberOnly/進行状況A]]

*目次 [#r1303b76]
#contents


*ロボコン 〜男たちの戦い〜(BGM 地上の星) [#l0fbf57d]

CENTER:製作者:たきさ 零崎 Y田

今回我々が挑むロボコンの課題はhttp://yakushi.shinshu-u.ac.jp/robotics/?2008b%2F%A5%ED%A5%DC%A5%B3%A5%F3
である。期末テストで単位が危ないなか私たち三人の戦いは始まった。


*空き缶を掴むコンセプト [#f0e43a5b]
まず考えられる空き缶の取り方は
-一つずつ掴んでもってかえる
-一気に四つもってかえる
の二つが考えられます。


前者の利点は今回のロボコンでは時間無制限であるので何回でも取り直しが可能なのと、ロボットが大きくならないのでステージ内を細かく動くことができること、また複数個展開できることが考えられます。しかし、ロボット同士の連携やステージが複雑なことを考えるとデメリットの方が大きいと思われたので我々は後者の四つ
一気に持っていくことロボットを作る方針で制作を進めていきました。


*ロボット作ります [#o94f0c6c]
-ドライブベース担当零崎


ドライブベース担当しました、零崎です。車体をなるべく低くして、かつタイヤを大きく間をとった形にしギアを大きくかませ移動するスピードをわざと押さえました。これにより空き缶へのアプローチの際の誤差を減らそうという試みでした。

-アーム担当Y田


アーム担当はY田。四つ一気に持っていけるよう安定性+高さの要求を見事にクリア。本人曰くエ○ンゲリオン初号機の足をイメージだそうです。接地面積をふやし摩擦をあげ、一番下と一番上にはタイヤを装着し少ないパーツでアームを完成させることができました。

-アーム上昇機構+我がチームの生ける神 たきさ


この男がいなければロボコンとか絶対むりだったであろう、いつもは雲の上にいる(はず)の絶対神。上昇機構の歯車の噛み合わせに奮闘を続けた。

*モータ・センサに対応する端子 [#r948cb6c]
モータ、センサについては以下の端子に接続してあります。

RCX(1)
-出力側
 A端子 → モータ:タイヤ(正回転:前進,逆回転:後進)
 B端子 → 使用せず
 C端子 → モータ:タイヤ(正回転:前進,逆回転:後進)

-入力側
 1端子 → 回転センサ(前進:値=正、後進:値=負)
 2端子 → 光センサ(左){未使用}
 3端子 → 光センサ(右){未使用}

RCX(2)
-出力側
 A端子 → モータ:アーム(正回転:開く,逆回転:閉じる)
 B端子 → 使用せず
 C端子 → モータ:上下機構{未使用}

-入力側
 1端子 → アームのタッチセンサ{未使用}
 2端子 → 使用せず
 3端子 → 使用せず



*プログラム [#q09064af]

RCX(1)のプログラム
 void move_fwd(int t){
 void move_fwd(int t){    //前進する関数:回転センサの値が入力された値
                //(t)以上になったら止まる
 	ClearSensor(SENSOR_1);
 	OnFwd(OUT_A + OUT_C);
 	until(SENSOR_1 >= t);
 	Off(OUT_A + OUT_C);
 }
 
 void move_rev(int t){
 void move_rev(int t){    //後進する関数:回転センサの値が入力された値
                //の負の値(-t)以下になったら止まる
 	ClearSensor(SENSOR_1);
 	OnRev(OUT_A + OUT_C);
 	until(SENSOR_1 <= -t);
 	Off(OUT_A + OUT_C);
 }
 
 void move_rig(int t){
 void move_rig(int t){    //右折する関数:回転センサの値が入力された値
                //の負の値(-t)以下になったら止まる
  	ClearSensor(SENSOR_1);
 	OnFwd(OUT_A);
 	OnRev(OUT_C);
 	until(SENSOR_1 <= -t);
 	Off(OUT_A + OUT_C);
 }
  
 void move_lef(int t){
 void move_lef(int t){    //左折する関数回転センサの値が入力された値
                //(t)以上になったら止まる
 	ClearSensor(SENSOR_1);
 	OnFwd(OUT_C);
 	OnRev(OUT_A);
 	until(SENSOR_1 >= t);
 	Off(OUT_A + OUT_C);
 }
 	
 task main(){
 	SetSensor(SENSOR_1,SENSOR_ROTATION);  
 	ClearMessage();
 
 	move_fwd(24);
 	move_fwd(24);  //前進
 	
 	move_lef(13);
 	move_lef(13);  //左折
 	
 	move_fwd(30);
 	move_fwd(30);  //前進
 	
 	move_rig(20);
 	move_rig(20);  //右折
 	
 	move_fwd(36);
 	move_fwd(36);  //前進
 	
 	move_lef(8);
 	move_lef(8);  //左折
 	
 	move_fwd(25);
 	move_fwd(25);  //前進
 	
 	move_lef(20);
 	move_lef(20);  //左折
 	
 	move_fwd(18);
 	move_fwd(18);  //前進
 	
 	move_rig(7);
 	move_rig(7);  //右折
 	
 	SendMessage(1);
 	until(Message() == 3);
 	SendMessage(1);  //RCX(2)にメッセージ(値:1)を送る
 	until(Message() == 3); //RCX(2)からメッセージ(値:3)を送られるまで待機
 	ClearMessage();
 	
 	move_fwd(10);
 	move_fwd(10);  //前進
 	
 	SendMessage(5);
 	until(Message() == 7);
 	SendMessage(5);  //RCX(2)にメッセージ(値:5)を送る
 	until(Message() == 7); //RCX(2)からメッセージ(値:7)を送られるまで待機
 	ClearMessage();
 	
 	move_rev(12);
 	move_rev(12);  //後進
 
 	move_lef(6);
 	move_lef(6);  //左折
 	
 	move_rev(15);
 	move_rev(15);  //後進
 	
 	move_rig(6);
 	move_rig(6);  //右折
 	
 	move_rev(5);
 	move_rev(5);  //後進
 	
 	move_rig(7);
 	move_rig(7);  //右折
 	
 	move_rev(4);
 	move_rev(4);  //後進
 	
 	move_rig(7);
 	move_rig(7);  //右折
 	
 	move_rev(25);
 	move_rev(25);  //後進
 	
 	move_rig(9);
 	move_rig(9);  //右折
 	
 	move_rev(33);
 	move_rev(33);  //後進
 	
 	move_lef(20);
 	move_lef(20);  //左折
 	
 	move_rev(15);
 	move_rev(15);  //後進
 	
 	move_lef(20);
 	move_lef(20);  //左折
 	
 	move_fwd(30);
 	move_fwd(30);  //前進
 	
  	SendMessage(9); 	
  	SendMessage(9);  //RCX(2)にメッセージ(値:9)を送る
 	
 }

RCX(2)のプログラム
 task main(){
 	ClearMessage(); 
 
 	until (Message() == 1);
 	until (Message() == 1); //RCX(1)からメッセージ(値:1)を送られるまで待機
 	ClearMessage();
 	
 	OnFwd(OUT_A);
 	OnFwd(OUT_A);  //アームを開く
 	Wait(90);
 	Off( OUT_A);
 	Off(OUT_A);
 	
 	SendMessage(3);
 	SendMessage(3);  //RCX(1)にメッセージ(値:3)を送る
 	ClearMessage();
 	until(Message() == 5);
 	until(Message() == 5); //RCX(1)からメッセージ(値:5)を送られるまで待機
 	ClearMessage();
 	
 	OnRev( OUT_A);
 	OnRev(OUT_A);  //アームを閉じる
 	Wait(85);
 	Off( OUT_A);
 	Off(OUT_A);
 	
 	SendMessage(7);
 	until(Message() == 9);
 	SendMessage(7);  //RCX(1)にメッセージ(値:7)を送る
 	until(Message() == 9); //RCX(1)からメッセージ(値:9)を送られるまで待機
 	ClearMessage();
 	
 	OnFwd(OUT_A);
 	OnFwd(OUT_A);  //アームを開く
 	Wait(90);
 	Off( OUT_A);
 	Off(OUT_A);
 }


*ロボコン中の様子 [#o8bb5526]
缶が少しかぶりますが・・・ご了承ください

COLOR(#808080):&ref(2008b/A7/ロボコン/ロボコン1.jpg,50%,);|
途中まで順調に走行するものの

COLOR(#808080):&ref(2008b/A7/ロボコン/ロボコン2.jpg,50%,);|
ここで引っかかってしまう!

COLOR(#808080):&ref(2008b/A7/ロボコン/ロボコン3.jpg,50%,);|
しかしここで壁を登りはじめ

COLOR(#808080):&ref(2008b/A7/ロボコン/ロボコン4.jpg,50%,);|
なんと立った!

COLOR(#808080):&ref(2008b/A7/ロボコン/ロボコン5.jpg,50%,);|
この後マイペース(?)にもアームを開閉し

COLOR(#808080):&ref(2008b/A7/ロボコン/ロボコン6.jpg,50%,);|
ウィリーを続け

COLOR(#808080):&ref(2008b/A7/ロボコン/ロボコン7.jpg,50%,);|
ついに限界。着地

この間8秒もウィリーをした!!

会場は大いに盛り上がりましたが、結局缶には触れられず・・・

しかしこのパフォーマンスのおかげで

点数は10.4でなんと5位!!!!!


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS