ロボコン日記 8月2日 |
今回は少しも壊れる事なく、以前の状態のままスタートできました。
←以前の状態
まず前回のロボットを第一試作機とし、問題点を考えた。
支柱部分で、アームを付けた板をスライドさせる時のギアのかみ合いが悪く、スライドできない
⇒スライドさせる板を固定するために、パーツを追加して増強。
アームの付いた部分が引っかからないように、ぎりぎりの所に追加した。
アームで持つ前に、紙パックを挟み入れる枠のブロック。
コの形では紙パックが引っかかってしまい、入りづらい。
→→ |
⇒コの先端を斜めに開くようにして、入りやすいようにした。
一部を除いてある程度プログラムができてきました。 1つのロボットに2つのRCXを使う方法でいくので、2つのプログラムを作り通信機能を多様する仕組みになってます。
#define line 40 #define turn_right OnFwd(OUT_C);Off(OUT_A); //右に軌道修正 #define turn_left OnFwd(OUT_A);Off(OUT_C); //左に軌道修正 #define go_straight OnFwd(OUT_A+OUT_C); //直進 #define back OnRev(OUT_A+OUT_C); //後退 #define get 1 //メッセージ #define end 2 //メッセージ #define set 3 //メッセージ #define put 4 //メッセージ #define end_2 5 //メッセージ int through ; //変数
task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_2,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); ClearMessage(); while(true){ while((Message() == 0)||(Message() == end)){ through = 0 ; //変数を0に設定 if((SENSOR_1 >= line )&&(SENSOR_2 >= line)&&(SENSOR_3 >= line)){ go_straight; //直進する } if(SENSOR_1 <= line){ turn_right; //右に修正 } if((SENSOR_2 <= line)&&(SENSOR_3 >= line)){ turn_left; //左に修正 } if(SENSOR_3 <= line){ //中心の円の部分を通過するためのプログラム through = 1 ; //変数を1に設定して、専用プログラムへ if(through == 1){ OnFwd(OUT_A+OUT_C); //一定時間直進 Wait(300); if(SENSOR_1 <= line){ turn_right; //左にずれた場合右に修正 } if((SENSOR_1 >= line)&&(SENSOR_2 <= line)){ turn_left; //右にずれた場合左に修正 through = 0 ; //変数を0に戻して式から抜ける } } } } while(Message() == get){ //ブロックを掴む式 Off(OUT_A+OUT_C); //本体の移動を止める until(Message() == end); } while(Message() == set){ //ブロックを指定の位置に運ぶ式 (所定の位置に本体を移動するプログラムを構想中) SendMessage(put); //putのメッセージを送る until(Message() == end_2); back; //後退する Wait(100); } } }
#define get 1 //メッセージ #define end 2 //メッセージ #define set 3 //メッセージ #define put 4 //メッセージ #define end_2 5 //メッセージ #define t_a 100 //アームの操作に使うタイム #define t_b 150 //アームの上下に使うタイム int box ; //ブロックの数をカウントする変数
sub up() //ブロックを掴みあげる式 { OnRev(OUT_B); //アームを下げる Wait(t_b); Off(OUT_B); OnFwd(OUT_A); //ブロックを掴む Wait(t_a); Off(OUT_A); OnFwd(OUT_B); //アームを上げる Wait(t_b); Off(OUT_B); }
task main() { SetSensor(SENSOR_1,SENSOR_TOUCH); ClearMessage(); box = 0; //変数を0に設定 while(true){ if(SENSOR_1==1){ //タッチセンサが反応する SendMessage(get); //getのメッセージを送る box ++; //ボックスの数をカウントする if(box < 3){ //ボックスの数が3未満なら OnRev(OUT_A); //アームを開く Wait(t_a); Off(OUT_A); up(); //ブロックを掴む SendMessage(end); //endのメッセージを送る } if(box == 3){ //ボックスが3個になる SendMessage(set); //setのメッセージを送る until(Message() == put); //putのメッセージを受信 OnRev(OUT_A); //アームを開く Wait(t_a); Off(OUT_A); SendMessage(end_2); //end_2のメッセージを送る box = 0; //ボックスのカウントをリセット } } } }