# How to update the cartesian target when the robotic arm has a communication delay?

My robot system uses a 3D mouse to teleoperate the robotic arm's TCP. The robot returns its TCP's position every 10-20 milliseconds to the remote PC. The remote PC returns the new destination based on the current position and an input from the 3D mouse (new destination = current position + delta input from the mouse).

The problem is that the communication between the robot and the remote PC has delay around 100 milliseconds. Because of this condition, the robot can't generate a smooth trajectory, but it goes back and forth (jittered motion), or it repeats stop and start to move. I understand that this is because the current position is not updated in real-time and that leads to generating a wrong destination (even backward when the robot moves forward).

One thing I already tried was to filter out the target if the length between it and the current position was smaller than the one between the previous destination and the current position. However, I couldn't succeed because the robot requires the target update every 10-20 msec, and if not sending (or if sending the previous destination again), the robot stopped to move. So, this solution didn't work.

Does anyone know how to calculate/update the new destination every cycle in this condition? Do I need to forecast the new destination based on the past trajectory?

You should update the robot references (and current position) independently if there is an update from the mouse or not. If there is an update (i.e. after 100 ms) you should update the value sent each 20ms to the robot. This way the robot shoudl never move backwards. I assume the backwards motion comeing from sending a new target position, and then sending the old (not updated) current position with a 0 delta.

Furhter improvmnet can be made by sending velocity references not postion references. Instead of positon targets, get directions and amplitude from the 3D mouse and use it as a velocities reference. Instead of

new destination = current position + delta input

use

new velocity = mouse direction + amplitude

This way you can control he velocity of the robot from the mouse which is helpful in many scenarios. A more advanced approach which is used by many is a hybrid approach. If the motion amplitude on the mouse is low, then it is a position control if the amplitude is high then it is a velocity reference. This alows both comfortable input of large amplitude motions and precise fine positioning.

• The mouse update is faster than 20 ms and the input is not zero. Also, the velocity is fixed in my setting, so I want to know how to update the destination. How do you think in this case? – kangaroo May 26 '17 at 15:41
• Could you please better describe the setup? Where is the delay? Who is acting as master in the communication? Which protocol is used? Which controller? – 50k4 May 26 '17 at 17:43