RIGHT:[[2007a/A7/ロボコン]]
&br;&br;
LEFT:|BGCOLOR(#FFFFFF):SIZE(22): ロボコン日記  8月2日 |
&br;
*目次 [#d5253758]
#contents

&br;
*今日の取り組み [#qe192a74]
:&size(17){集合時間、場所};|●9:30から開始……のはず。
&br;●10番教室

:&size(17){進行状況};|●ロボット、プログラム両方作成。
&br;  (ロボット、プログラム共に試作品完成。)
&br;●初めてロボットにプログラムを送り作動させましたが、問題が続出。
&br;  なので主にロボットに手を加え、改良します。


*ロボット作成 [#b4631841]
**前回の状態 [#x26748eb]
 今回は少しも壊れる事なく、以前の状態のままスタートできました。
&br;&ref(TS390010-2.JPG,nolink,60%);←以前の状態
&br;
**今日の仕事 [#a2b7cc7e]
まず前回のロボットを第一試作機とし、問題点を考えた。
***問題点1 [#v84f5370]
支柱部分で、アームを付けた板をスライドさせる時のギアのかみ合いが悪く、スライドできない
&br;
|&ref(gear1.jpg,nolink,60%);|&ref(TS390015.JPG,nolink,60%);|&ref(TS390014.JPG,nolink,60%);|

&br;  ⇒スライドさせる板を固定するために、パーツを追加して増強。
  ⇒スライドさせる板を固定するために、パーツを追加して増強。
&br;   アームの付いた部分が引っかからないように、ぎりぎりの所に追加した。

***問題点2 [#db4516ca]
アームで持つ前に、紙パックを挟み入れる枠のブロック。
&br; コの形では紙パックが引っかかってしまい、入りづらい。
|&ref(ko2.jpg,nolink,120%);|→→|&ref(ko1.JPG,nolink,45%);|
  ⇒コの先端を斜めに開くようにして、入りやすいようにした。








&br;&br;
*プログラム作成 [#y3f7f23e]
一部を除いてある程度プログラムができてきました。
1つのロボットに2つのRCXを使う方法でいくので、2つのプログラムを作り通信機能を多様する仕組みになってます。

**&size(18){1つ目:タイヤを操作してロボット本体を動かすプログラム}; [#d8818f5e]

 #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);
       }
    }
 }


&br;

**&size(18){2つ目:アームを操作してブロックを掴んだりするプログラム}; [#kaff76a8]


 #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;                    //ボックスのカウントをリセット
          }
       }
    }
 }


&br;

**今後の変更点 [#b1153622]
+ロボット作成の都合でセンサの配置が変わるので、プログラムの一部を入れ替え・変更
+アームを所定の位置で固定するためのプログラムの作成
+ブロックを置くために指定の位置へ移動するためのプログラムの作成
+ロボットを実際に動かして、アームを動かす際の値を正確に取る

&br;&br;&br;&br;&br;
RIGHT:[[ロボコンTOPページへ:http://yakushi.shinshu-u.ac.jp/robotics/?2007a%2FA7%2F%A5%ED%A5%DC%A5%B3%A5%F3#content_1_7]]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS