我试图通过发送100hz的位置来控制机器人。在发送如此多的位置时,它正在发出震动。当我发送距其起始位置50毫米的1个位置时,它会平稳地移动。当我使用我的传感器转向时(因此它将每个位置从0到50mm发送)它正在颤动。我可能会像X0-X1-X2-X1-X2-X3-X4-X5-X4-X5那样发送它,这就是它可能会动摇的原因。当我用鼠标操纵它时,我怎样才能解决这个问题,让机器人顺利移动?
这是我的代码。
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个坐标) *获取此阵列的最小值和最大值 *输出最小值和最大值的平均值
答案 0 :(得分:1)
在不了解您的机器人特性以及如何控制它的情况下,以下是一些一般性考虑因素:
要让机器人保持平稳运动,您应该使用精心设计的PID控制器算法来控制它。
如果你只能控制它的位置,你所能做的最好的就是监控位置和位置。在发送下一个位置之前,等待它离目标位置“足够近”。
如果您想要更详细的答案,请提供有关您发送给机器人的命令(movej
)的更多信息,我怀疑您可以做的不仅仅是发送[x,y]坐标。