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 座標) * この配列から最小値と最大値を取得する * 最小値と最大値の平均を出力する