2019a/Member

目次

課題3の概要

課題

ボール運搬ロボット 各場所に配置されている4つのボールを運搬しトレーの中に入れる(下図はフィールドマップ). map3.png

フィールドの説明

  • フィールドは課題2で使用した紙を使用する。
  • 生協のお弁当の四角いプラ容器2つをそれぞれ円内に置き、片方に玉を2個入れる。
  • 残りの2個の玉は課題2と同じ位置に置く。その際、ゴムタイヤやプレートの上に置いてもよい。
  • プラ容器には色をつけたり文字や記号を書いてもよい。
  • プラ容器は両面テープ等でフィールドに固定してもよい。
  • 枚の紙の境界にはそれぞれ幅1cm、合計2cmの黒線を描いてもよい。

基本ルール

  • 競技時間は審判が続行不能と判断するまで、あるいはリタイアするまで。
  • 図のA地点または(および)A'地点からスタートする。ただし接地している部分はそれぞれの領域内に収まるものとする(線上はOK)。上空部分は領域からはみ出していてもよい。
  • 開始の合図から5秒以内にスタートボタンを押す作業を完了すること。
  • 競技が終了するまで、ロボットに触ったり人間が遠隔で操作してはならない。
  • 途中でうまく動かなくなった場合、1回限り再スタートすることができる(再スタートの際に別プログラムで起動してよい)。
  • 競技終了後、ロボットが、ゴールのプラ容器に触れていてはいけない。
  • 競技終了後、もともと玉が入っていたプラ容器が、ゴールのプラ容器に触れていてはいけない。

基本得点の計算方法

  • プラ容器内の玉を1個運べば8点。二つとも運べば20点。
  • L地点とL'地点の玉をどちらか1個運べば4点、2個とも運べば12点。
  • 競技終了後、ゴールのプラ容器が完全に円から出しまった場合、もとの基本点の1/4を減点。
  • 競技終了後、ゴールのプラ容器の半分以上が円から出ていれば、もとの基本点の3/4を減点。
  • 競技終了後、ゴールのプラ容器にもとのプラ容器が触れていれば、もとの基本点の1/2を減点。
  • 競技終了後、ゴールのプラ容器にもとのプラ容器が触れていれば、もとの基本点の1/2を減点。
  • 競技終了後、ゴールのプラ容器にロボットが触れていれば、もとの基本点の1/4を減点。

ロボットについて

私たちの班は,ボールを一つずつ運ぶタイプのロボットを制作した.また,今回のロボットはできるだけコンパクトかつシンプルを意識して作った.なぜなら前回同様小回りの必要なマップであるためだ.全体像は次のようになった.

zenntai_zou.jpg zenntai_mae.jpg zenntai_yoko.jpg

本体部分

できるだけ小さくコンパクトになるように作った.本体を背面合わせにし,課題2と同じ足回りと合わせた.センサーはプログラミング作成の時間短縮のため一つだけ使用し課題2のプログラムを再利用した.位置はできるだけ車軸に近づけ,小回りが利くようにした.

asimawari.jpghonntai.png

アームとその周辺

アームも同様にシンプルに制作した.モーターに直接部品をつなげて回転運動を利用してボールをつかむ.

arm1.pngarm2.png

因みに,アームが重すぎてそのままでは上げ下げできなかったため,輪ゴムをつけて動きを補助することで動作を可能にした.

sadou_hojo.jpg

作戦

ルートについて

私たちの班は一つずつボールを運ぶロボットを作ったため,合計4回トレーに行かなくてはならない.そのため,次のようなルートを考案した.

sakusenn_route.jpg

A'を出発しL'のボールを掴み,旋回して容器に入れる.

route1.png

⊆,法い修海ら直線を突っ切って容器の中のピンポン玉を掴みゴールにある容器に入れ替える.

route2.png

F韻犬容器の中のボールをゴールの容器に持っていき入れる.

route3.png

ず埜紊法Lにあるボールを掴みゴールの容器に入れる.

route4.png

プログラムについて

まず,

  • マスター:左車輪,右車輪,アームの上げ下げ
  • スレーヴ:ボールを掴む動作

で制御している.

共通するプログラム

2台のNXCで通信を行うために、以下のようにマクロを定義をした。

#define SIGNALON1 11
#define SIGNALOFF1 12
#define SIGNALON2 13
#define SIGNALOFF2 14

アームのプログラム

アームの上げ下げのマクロ

#define arm_down OnFwd(OUT_A,25);Wait(1500);Off(OUT_A);  //アームを下げる
#define arm_up OnRev(OUT_A,35);Wait(1500);Off(OUT_A);  //アームを上げる

スレーヴ側の制御

#define SIGNALON1 11
#define SIGNALOFF1 12
#define SIGNALON2 13
#define SIGNALOFF2 14
#define CONN 1

task main()
{
    int msg;
    
    while(true){
        ReceiveRemoteNumber(MAILBOX1,true,msg);
        
        if(msg==SIGNALON1){       //SIGNALON1を受信したとき
            OnRev(OUT_A,20);Wait(1000); //ボールを掴む
        }else if(msg==SIGNALOFF1){    //SIGNALOFF1を受信したとき
            Off(OUT_A);         //モータAを止める
        }else if(msg==SIGNALON2){    //SIGNALON2を受信したとき
            OnFwd(OUT_A,20);Wait(1000); //ボールを放す
        }else if(msg==SIGNALOFF2){    //SIGNALOFF2を受信したとき
            Off(OUT_A);         //モータAを止める
         }
     }
}

ライントレース

光センサーの数値は以下の通りマクロで定義した.

#define black 30
#define white 60
#define lightgray 50
#define darkgray 39
#define center 45

light_sennser.png

ライントレースのプログラムは課題2の時とほとんど同じものを使用した.

マクロ

基本的な動作,メッセージの値を定義する.

#define CONN 1
#define SIGNALON1 11
#define SIGNALOFF1 12
#define SIGNALON2 13
#define SIGNALOFF2 14
 
#define turn_right OnFwd(OUT_C,25);OnRev(OUT_B,23);  //右折
#define turn_left OnFwd(OUT_B,28);OnRev(OUT_C,20);  //左折
#define rotate_right OnFwd(OUT_C,25);OnRev(OUT_B,22);  //右旋回
#define rotate_left OnFwd(OUT_B,28);OnRev(OUT_C,15);  //左旋回
#define go_straight OnFwd(OUT_B,23);OnFwd(OUT_C,20);  //直進
#define go_straight2 OnFwd(OUT_B,20);OnFwd(OUT_C,17);  //K'からL'での出力弱めの直進
#define turn OnRev(OUT_C,20);OnFwd(OUT_B,28);Wait(3200);Off(OUT_BC);  //L'のボール掴んでから入れるまでの旋回
#define turn2 OnRev(OUT_B,28);OnFwd(OUT_C,20);Wait(1500);Off(OUT_BC);  //ボールの入ってるトレーへのわずかな調整
#define sakittyo OnFwd(OUT_C,20);OnFwd(OUT_B,23);Wait(1150);Off(OUT_BC);  //ボールが入ってるトレー前でのわずかな前進
#define turn3 OnRev(OUT_B,30);Wait(4800);Off(OUT_BC);  //トレーのボールを掴んだ後の方向転換
#define turn4 OnRev(OUT_B,30);Wait(5200);Off(OUT_BC);  //
#define back OnRev(OUT_C,20);OnRev(OUT_B,28);Wait(3000);Off(OUT_BC);  //最後トレーに触れないように少し離れる

サブルーチン

左側のライントレース

sub followline_L(int stop_time)
{
    long t0=CurrentTick();
    while(CurrentTick()-t0<stop_time){ //現在の時刻が一定の値を超えるまで
        if(SENSOR_1<black){            //センサーが黒の時
        rotate_left;                   //左旋回
        }else if(SENSOR_1<darkgray){   //センサーが黒灰なら
        turn_left;                     //左折
        }else if(SENSOR_1>lightgray){  //センサーが白灰なら
        turn_right;                    //右折
        t0=CurrentTick();              //時間をリセット
        }else if(SENSOR_1<center){         //明るさ45以下で
        go_straight;                   //直進
        t0=CurrentTick();              //時間をリセット
        }else{                         //それ以外は
        rotate_right;                  //右旋回
        t0=CurrentTick();              //時間をリセット
        }
    }    
    Off(OUT_BC);          //時刻が一定の値を超えると停止
    Wait(1000);           //1秒間停止
}

右側のライントレース

sub followline_R(int stop_time)
{
    long t0=CurrentTick();
    while(CurrentTick()-t0<stop_time){  //現在の時刻が一定の値を超えるまで
        if(SENSOR_1<black){             //センサーが黒の時
        rotate_right;                   //右旋回
        }else if(SENSOR_1<darkgray){    //センサーが黒灰なら
        turn_right;                     //右折
        }else if(SENSOR_1>lightgray){   //センサーが白灰なら
        turn_left;                      //左折
        t0=CurrentTick();               //時間をリセット
        }else if(SENSOR_1<center){          //センサーが45以下なら
        go_straight;                    //直進
        t0=CurrentTick();               //時間をリセット
        }else{                          //それ以外は
        rotate_left;                    //左旋回
        t0=CurrentTick();               //時間をリセット
        }
    }    
    Off(OUT_BC);           //一定の時間を超えると停止
    Wait(1000);            //一秒間停止
}

右側のライントレース(直進の出力が弱いパターン)

sub followline_R2(int stop_time)
{
    long t0=CurrentTick();
    while(CurrentTick()-t0<stop_time){   //時刻がある一定の値より小さいとき
        if(SENSOR_1<black){              //黒なら
        rotate_right;                    //右旋回
        t0=CurrentTick();                //時間をリセット
        }else if(SENSOR_1<darkgray){     //灰黒色なら
        turn_right;                      //右折
        t0=CurrentTick();                //時間をリセット
        }else if(SENSOR_1>lightgray){    //灰白色なら
        turn_left;                       //左折
        }else if(SENSOR_1<center){           //明るさ45以下で
        go_straight2;                    //ゆっくり直進
        t0=CurrentTick();                //時間をリセット
        }else{                           //それ以外なら
        rotate_left;                     //左旋回
        }
    }    
    Off(OUT_BC);            //停止
    Wait(2000);             //2秒間停止
}

黒線を横断

  • 黒を見つけるまで直進
    sub Blackto_White()
    {
        while(SENSOR_1<lightgray){ //光センサーの値が白灰より小さいとき
        OnFwd(OUT_C,25);      
        OnFwd(OUT_B,25);      //直進
        }
        Off(OUT_BC);        //白灰より大きくなると止まる
    }
  • 白を見つけるまで直進
    sub Whiteto_Black()
    {
        while(SENSOR_1>darkgray){ //光センサーの値が黒灰よりも大きいとき
        OnFwd(OUT_C,25);      
        OnFwd(OUT_B,25);           //直進
        }
        Off(OUT_BC);               //黒灰よりも大きくなると止まる
    }

この2つを組み合わせることで黒線を一本通り越せる.

その他

ライントレースの右側と左側を入れ替えるときなどに使う.

  • 黒を見つけるまで右旋回
    sub Whiteto_Black_R()
    {
        while(SENSOR_1>darkgray){ //光センサーの値が黒灰よりも大きいとき
        OnFwd(OUT_C,25);      
        OnRev(OUT_B,25);           //右旋回
        }
        Off(OUT_BC);               //黒灰よりも小さくなると止まる
    }    
  • 白を見つけるまで右旋回
    sub Blackto_White_R()
    {
        while(SENSOR_1<darkgray){ //光センサーの値が黒灰よりも小さいとき
        OnFwd(OUT_C,25);           
        OnRev(OUT_B,25);           //右旋回
        }
        Off(OUT_BC);               //黒灰よりも大きくなると止まる
    }
  • 白を見つけるまで左旋回
    sub Blackto_White_L()
    {
        while(SENSOR_1<lightgray){ //光センサーの値が白灰より小さいとき
        OnFwd(OUT_B,25);            
        OnRev(OUT_C,25);            //左旋回
        }
        Off(OUT_BC);                //白灰より大きくなると止まる
    }
  • 黒を見つけるまで左旋回
    sub Whiteto_Black_L()
    {
        while(SENSOR_1>black){ //光センサーの値が黒より大きいとき
        OnFwd(OUT_B,25);        
        OnRev(OUT_C,25);        //左旋回
        }
        Off(OUT_BC);            //黒より小さいとき
    }

マスターのプログラム

task main()
{
    SetSensorLight(S1);
    RemoteStartProgram(CONN,"kodomo.nxc");
    
    followline_R(200);
    Blackto_White();
    followline_L(150);
    Blackto_White_R();
    followline_R2(150);
    SendRemoteNumber(CONN,MAILBOX1,SIGNALON1);
    Wait(1000);
    arm_up;
    turn;
    SendRemoteNumber(CONN,MAILBOX1,SIGNALON2);
    Wait(1000);
    
    followline_R(150);
    Blackto_White_L();
    followline_L(100);
    Blackto_White();
    Whiteto_Black();
    Blackto_White();
    Whiteto_Black();
    Blackto_White();
    Whiteto_Black();
    Blackto_White();
    followline_R(150);
    Blackto_White();
    turn2;
    sakittyo;
    arm_down;
    SendRemoteNumber(CONN,MAILBOX1,SIGNALON1);
    Wait(1000);
    arm_up;
    turn3;

    
    Whiteto_Black();
    Blackto_White();
    Whiteto_Black();
    Blackto_White();
    followline_R(200);
    Blackto_White();
    turn2;
    SendRemoteNumber(CONN,MAILBOX1,SIGNALON2);
    Wait(1000);
    turn3;
    

    Whiteto_Black();
    Blackto_White();
    Whiteto_Black();
    Blackto_White();
    followline_R(200);
    Blackto_White();
    turn2;
    sakittyo;
    arm_down;
    SendRemoteNumber(CONN,MAILBOX1,SIGNALON1);
    Wait(1000);
    arm_up;
    turn3;
    
    
    Whiteto_Black();
    Blackto_White();
    Whiteto_Black();
    Blackto_White();
    Blackto_White_R();
    followline_R(200);
    Blackto_White();
    turn2;
    SendRemoteNumber(CONN,MAILBOX1,SIGNALON2);
    Wait(1500);
    turn4;
    arm_down
    
    
    Whiteto_Black();
    Blackto_White();
    Whiteto_Black();
    Blackto_White();
    followline_L(200);
    Blackto_White();
    followline_R(200);
    Blackto_White();
    followline_L(200);
    Blackto_White();
    followline_R(200);
    Blackto_White();
    followline_L(150);
    Blackto_White_R();
    followline_R2(125);
    SendRemoteNumber(CONN,MAILBOX1,SIGNALON1);
    Wait(1000);
    arm_up;
    turn;
    
    
    followline_R(100);
    Blackto_White_L();
    followline_L(100);
    Blackto_White();
    Whiteto_Black();
    Blackto_White();
    Whiteto_Black();
    Blackto_White();
    Whiteto_Black();
    Blackto_White();
    followline_R(200);
    Blackto_White();
    turn2;
    sakittyo;
    SendRemoteNumber(CONN,MAILBOX1,SIGNALON2);
    Wait(1000);
}

ゴールのトレーをGT,もともとボールを入れてあるトレーをSTと呼ぶと, 一つ目の塊は,M'からスタートしL'のボールを掴んでGTに入れるまでのプログラム 二つ目の塊は,L'のボールを入れた後STまで行き,ボールを掴むまでのプログラム 三つ目の塊は,STからGTまで行き,ボールを入れるプログラム 四つ目の塊は,ボールを入れてからまたSTまで行き,ボールを掴むまでのプログラム 五つ目の塊は,ボールを掴んでからGTまで行きゴールするまでのプログラム 六つ目の塊は,STからLまで移動し,Lのボールを掴むまでのプログラム 七つ目の塊は,LからGTまで移動してゴールし,トレーから少し離れまでのプログラム である.

完成したプログラム

#define CONN 1
#define SIGNALON1 11
#define SIGNALOFF1 12
#define SIGNALON2 13
#define SIGNALOFF2 14


#define turn_right OnFwd(OUT_C,25);OnRev(OUT_B,23);
#define turn_left OnFwd(OUT_B,28);OnRev(OUT_C,20);
#define rotate_right OnFwd(OUT_C,25);OnRev(OUT_B,22);
#define rotate_left OnFwd(OUT_B,28);OnRev(OUT_C,15);
#define go_straight OnFwd(OUT_B,23);OnFwd(OUT_C,20);
#define go_straight2 OnFwd(OUT_B,20);OnFwd(OUT_C,17);
#define turn OnRev(OUT_C,20);OnFwd(OUT_B,28);Wait(3200);Off(OUT_BC);
#define turn2 OnRev(OUT_B,28);OnFwd(OUT_C,20);Wait(1500);Off(OUT_BC);
#define sakittyo OnFwd(OUT_C,20);OnFwd(OUT_B,23);Wait(1150);Off(OUT_BC);
#define turn3 OnRev(OUT_B,30);Wait(4800);Off(OUT_BC);
#define turn4 OnRev(OUT_B,30);Wait(5200);Off(OUT_BC);
#define back OnRev(OUT_C,20);OnRev(OUT_B,28);Wait(3000);Off(OUT_BC); 

#define osidasi OnFwd(OUT_BC,100);Wait(100);Off(OUT_BC);
#define arm_down OnFwd(OUT_A,25);Wait(1500);Off(OUT_A);
#define arm_up OnRev(OUT_A,35);Wait(1500);Off(OUT_A);
#define black 30
#define white 60
#define lightgray 50
#define darkgray 39
#define center 45

sub followline_L(int stop_time)
{
    long t0=CurrentTick();
    while(CurrentTick()-t0<stop_time){
if(SENSOR_1<black){
   rotate_left;
}else if(SENSOR_1<darkgray){
   turn_left;
}else if(SENSOR_1>lightgray){
   turn_right;
   t0=CurrentTick();
}else if(SENSOR_1<center){
   go_straight;
   t0=CurrentTick();
}else{
   rotate_right;
   t0=CurrentTick();
}
    }    
    Off(OUT_BC);
    Wait(1000);
}
 
sub followline_R(int stop_time)
{
    long t0=CurrentTick();
    while(CurrentTick()-t0<stop_time){
if(SENSOR_1<black){
   rotate_right;
}else if(SENSOR_1<darkgray){
   turn_right;
}else if(SENSOR_1>lightgray){
   turn_left;
   t0=CurrentTick();
}else if(SENSOR_1<center){
   go_straight;
   t0=CurrentTick();
}else{
   rotate_left;
   t0=CurrentTick();
} 
    }    
    Off(OUT_BC);
    Wait(1000);
} 

sub followline_R2(int stop_time)
{
    long t0=CurrentTick();
    while(CurrentTick()-t0<stop_time){
if(SENSOR_1<black){
   rotate_right;
   t0=CurrentTick();
}else if(SENSOR_1<darkgray){
   turn_right;
   t0=CurrentTick();
}else if(SENSOR_1>lightgray){
   turn_left;
}else if(SENSOR_1<center){
   go_straight2;
   t0=CurrentTick();
}else{
   rotate_left;
}
    }    
    Off(OUT_BC);
    Wait(2000);
} 

sub Blackto_White()
{
    while(SENSOR_1<lightgray){
    OnFwd(OUT_C,25);
    OnFwd(OUT_B,25);
    }
    Off(OUT_BC);
} 

sub Whiteto_Black()
{
    while(SENSOR_1>darkgray){
    OnFwd(OUT_C,25);
    OnFwd(OUT_B,25);
    }
    Off(OUT_BC);
}

sub Whiteto_Black_R()
{
    while(SENSOR_1>darkgray){
    OnFwd(OUT_C,25);
    OnRev(OUT_B,25);
    }
    Off(OUT_BC);
}
   
sub Blackto_White_R()
{
    while(SENSOR_1<darkgray){
    OnFwd(OUT_C,25);
    OnRev(OUT_B,25);
    }
    Off(OUT_BC);
} 

sub Blackto_White_L()
{
    while(SENSOR_1<lightgray){
    OnFwd(OUT_B,25);
    OnRev(OUT_C,25);
    }
    Off(OUT_BC);
}
sub Whiteto_Black_L()
{ 
    while(SENSOR_1>black){
    OnFwd(OUT_B,25);
    OnRev(OUT_C,25);
    }
    Off(OUT_BC);
}
 
task main()
{
    SetSensorLight(S1);
    RemoteStartProgram(CONN,"kodomo.nxc");
    
    followline_R(200);
    Blackto_White();
    followline_L(150);
    Blackto_White_R();
    followline_R2(150);
    SendRemoteNumber(CONN,MAILBOX1,SIGNALON1);
    Wait(1000);
    arm_up;
    turn;
    SendRemoteNumber(CONN,MAILBOX1,SIGNALON2);
    Wait(1000);
    
    followline_R(150);
    Blackto_White_L();
    followline_L(100);
    Blackto_White();
    Whiteto_Black();
    Blackto_White();
    Whiteto_Black();
    Blackto_White();
    Whiteto_Black();
    Blackto_White();
    followline_R(150);
    Blackto_White();
    turn2;
    sakittyo;
    arm_down;
    SendRemoteNumber(CONN,MAILBOX1,SIGNALON1);
    Wait(1000);
    arm_up;
    turn3;

    
    Whiteto_Black();
    Blackto_White();
    Whiteto_Black();
    Blackto_White();
    followline_R(200);
    Blackto_White();
    turn2;
    SendRemoteNumber(CONN,MAILBOX1,SIGNALON2);
    Wait(1000);
    turn3;
    

    Whiteto_Black();
    Blackto_White();
    Whiteto_Black();
    Blackto_White();
    followline_R(200);
    Blackto_White();
    turn2;
    sakittyo;
    arm_down;
    SendRemoteNumber(CONN,MAILBOX1,SIGNALON1);
    Wait(1000);
    arm_up;
    turn3;
    
    
    Whiteto_Black();
    Blackto_White();
    Whiteto_Black();
    Blackto_White();
    Blackto_White_R();
    followline_R(200);
    Blackto_White();
    turn2;
    SendRemoteNumber(CONN,MAILBOX1,SIGNALON2);
    Wait(1500);
    turn4;
    arm_down
    
    
    Whiteto_Black();
    Blackto_White();
    Whiteto_Black();
    Blackto_White();
    followline_L(200);
    Blackto_White();
    followline_R(200);
    Blackto_White();
    followline_L(200);
    Blackto_White();
    followline_R(200);
    Blackto_White();
    followline_L(150);
    Blackto_White_R();
    followline_R2(125);
    SendRemoteNumber(CONN,MAILBOX1,SIGNALON1);
    Wait(1000);
    arm_up;
    turn;
    
    
    followline_R(100);
    Blackto_White_L();
    followline_L(100);
    Blackto_White();
    Whiteto_Black();
    Blackto_White();
    Whiteto_Black();
    Blackto_White();
    Whiteto_Black();
    Blackto_White();
    followline_R(200);
    Blackto_White();
    turn2;
    sakittyo;
    SendRemoteNumber(CONN,MAILBOX1,SIGNALON2);
    Wait(1000);
}




#define SIGNALON1 11
#define SIGNALOFF1 12
#define SIGNALON2 13
#define SIGNALOFF2 14
#define CONN 1

task main()
{
    int msg;
    
    while(true){
        ReceiveRemoteNumber(MAILBOX1,true,msg);
        
        if(msg==SIGNALON1){
            OnRev(OUT_A,20);Wait(1000);
        }else if(msg==SIGNALOFF1){
            Off(OUT_A);
        }else if(msg==SIGNALON2){
            OnFwd(OUT_A,20);Wait(1000);
        }else if(msg==SIGNALOFF2){
            Off(OUT_A);
         }
     }
}

まとめ,感想

今回の課題はプログラミングはもちろんのことだが,特にロボットの作成にかなり時間を取られた.ボールを持ち運ぶ機能やいかにコンパクトな機体を作成するかに苦労させられた. プログラミングに関しては,ライントレースは課題2のプログラムをそのまま使えたので手間は省けたが,やはりそれぞれのモーターの出力差や電池切れなどの原因に手こずることが多く,左右でのタイヤの出力の調整や本体の向きを変えるときの秒数などに多くの時間を費やした. しかし,ロボコンの結果を見れば,トレーのボール一つしか運べてなかったが2位になることができたので,できは悪くなかったのではないかと思う.


添付ファイル: filelight_sennser.png 21件 [詳細] fileroute4.png 14件 [詳細] fileroute3.png 16件 [詳細] fileroute2.png 15件 [詳細] fileroute1.png 16件 [詳細] filesakusenn_route.jpg 15件 [詳細] filesadou_hojo.jpg 21件 [詳細] filemap3.png 20件 [詳細] filezenntai_zou.jpg 23件 [詳細] filezenntai_yoko.jpg 11件 [詳細] filezenntai_mae.jpg 49件 [詳細] filehonntai.png 16件 [詳細] fileasimawari.jpg 14件 [詳細] filearm2.png 13件 [詳細] filearm1.png 11件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-08-14 (水) 17:19:54