控制机器人进行摇动

时间:2013-05-06 08:22:06

标签: coordinates robot

我试图通过发送100hz的位置来控制机器人。在发送如此多的位置时,它正在发出震动。当我发送距其起始位置50毫米的1个位置时,它会平稳地移动。当我使用我的传感器转向时(因此它将每个位置从0到50mm发送)它正在颤动。我可能会像X0-X1-X2-X1-X2-X3-X4-X5-X4-X5那样发送它,这就是它可能会动摇的原因。当我用鼠标操纵它时,我怎样才能解决这个问题,让机器人顺利移动?

  • 机器人问125hz
  • 红外传感器发送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个坐标)  *获取此阵列的最小值和最大值  *输出最小值和最大值的平均值

1 个答案:

答案 0 :(得分:1)

在不了解您的机器人特性以及如何控制它的情况下,以下是一些一般性考虑因素:

要让机器人保持平稳运动,您应该使用精心设计的PID控制器算法来控制它。

如果你只能控制它的位置,你所能做的最好的就是监控位置和位置。在发送下一个位置之前,等待它离目标位置“足够近”。

如果您想要更详细的答案,请提供有关您发送给机器人的命令(movej)的更多信息,我怀疑您可以做的不仅仅是发送[x,y]坐标。