0

100hzで位置を送信してロボットを制御しようとしています。こんなにたくさんのポジションを送ると揺れ動きます。彼の開始位置から 50 mm のような位置を 1 つ送信すると、スムーズに移動します。センサーを使用して操縦すると(センサーは 0 から 50 mm までのすべての位置を送信します)、揺れています。私はおそらく X0-X1-X2-X1-X2-X3-X4-X5-X4-X5 のように送信していますが、これが揺れる理由です。マウスを使って操縦するときにロボットがスムーズに動くようにするには、どうすれば解決できますか?

  • ロボットは 125hz を求めています
  • IRセンサーは100hzを送信しています
  • それ以外の場合、25hz は違いますか?

これが私のコードです。

        while(true)
        // If sensor 1 is recording IR light.
        if (listen1.newdata = true)
        {

            coX1 = (int) listen1.get1X();           // 
            coY1 = (int) listen1.get1Y();       
            newdata = true;
        } else {
            coX1 = 450;
            coY1 = 300;
        }

        if (listen2.newdata = true)
        {       
            coX2 = (int) listen2.get1X();
            coY2 = (int) listen2.get1Y();
            newdata = true; 
        } else {
            coY2 = 150;
        }
        // If the sensor gets further then the workspace, it will automaticly correct it to these 
        // coordinates.

        if (newdata = true)
        {
            if (coX1< 200 || coX1> 680)
            {
                coX1 = 450;
            }
            if (coY1<200 || coY1> 680)
            {
                coY1 = 300;
            }
            if (coY2<80 || coY2> 300)
            {
                coY2 = 150;
            }
        }
        // This is the actually command send to a robot.
        Gcode = String.format( "movej(p[0.%d,-0.%d, 0.%d, -0.5121, -3.08, 0.0005])"+ "\n", coX1, coY1, coY2);

        //sends message to server
        send(Gcode, out);     
            System.out.println(Gcode);
            newdata = false;

        }


}


private static void send(String movel, PrintWriter out) {
     try {


         out.println(movel); /*Writes to server*/
        // System.out.println("Writing: "+ movel);
        // Thread.sleep(250);
         }

         catch(Exception e) {
         System.out.print("Error Connecting to Server\n");
         } 
        }
}

@ 編集

私はこれを行うことができる方法を発見しました。最小値と最大値によるものです。だから基本的に私がしなければならないと思うことは: * すべての個々の座標を配列に入れる (12 座標) * この配列から最小値と最大値を取得する * 最小値と最大値の平均を出力する

4

1 に答える 1

1

ロボットの特性とそれを制御する方法について詳しく知らなくても、一般的な考慮事項がいくつかあります。

ロボットの動きをスムーズにするには、適切に設計された PID コントローラー アルゴリズムを使用して速度を制御する必要があります。

位置でしか制御できない場合は、位置を監視し、次の位置を送信する前に、目標の位置から「十分近く」になるまで待つことをお勧めします。

より詳細な回答が必要な場合は、ロボットに送信するコマンドに関する詳細情報を提供してください ( movej)。[x,y] 座標を送信するだけでなく、もっと多くのことができると思います。

于 2013-05-06T08:45:53.647 に答える