0

我试图通过发送 100hz 的位置来控制机器人。发送这么多头寸时,它正在做一个颤抖的动作。当我发送一个距离他的起始位置 50 毫米的位置时,它会平稳移动。当我使用传感器进行转向时(因此它发送从 0 到 50mm 的每个位置)它在晃动。我可能会像 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 回答