Universal Robots Forum

Robots shake when they move

How to solve the jitter problem when you send ur robot multiple consecutive points?

And the instruction sent later overwrites the instruction sent earlier

I tried to wrap the points as a function, but the jitter problem was still unresolved.

Is there any good method?

I use TCP protocol, go robot 30003 port

The code sent is as follows:

pose = “def motions():\n”
" movel(p[-0.18278,0.45842,0.71426,1.98535,-1.88042,1.00875],t=2)\n"
" movel(p[-0.17838,0.45842,0.70993,1.98535,-1.88042,1.00875],t=0.3)\n"
" movel(p[-0.17197,0.45842,0.70537,1.98535,-1.88042,1.00875],t=0.3)\n"
" movel(p[-0.16479,0.46053,0.70272,1.98535,-1.88042,1.00875],t=0.3)\n"
" movel(p[-0.15519,0.46369,0.70272,1.98535,-1.88042,1.00875],t=0.3)\n"
" movel(p[-0.14654,0.46658,0.70272,1.98535,-1.88042,1.00875],t=0.3)\n"
" movel(p[-0.13857,0.46901,0.70586,1.98535,-1.88042,1.00875],t=0.3)\n"
" movel(p[-0.13196,0.46901,0.71113,1.98535,-1.88042,1.00875],t=0.3)\n"
" movel(p[-0.12687,0.46901,0.71948,1.98535,-1.88042,1.00875],t=0.3)\n"
" movel(p[-0.12426,0.46901,0.72943,1.98535,-1.88042,1.00875],t=0.3)\n"
" movel(p[-0.12426,0.46596,0.74091,1.98535,-1.88042,1.00875],t=0.3)\n"
" movel(p[-0.12426,0.46163,0.75307,1.98535,-1.88042,1.00875],t=0.3)\n"
" movel(p[-0.12812,0.45616,0.76525,1.98535,-1.88042,1.00875],t=0.3)\n"
" movel(p[-0.13383,0.44997,0.77717,1.98535,-1.88042,1.00875],t=0.3)\n"
" movel(p[-0.14208,0.44269,0.78957,1.98535,-1.88042,1.00875],t=0.3)\n"
" movel(p[-0.15131,0.43588,0.80023,1.98535,-1.88042,1.00875],t=0.3)\n"
" movel(p[-0.16083,0.42967,0.80930,1.98535,-1.88042,1.00875],t=0.3)\n"
" movel(p[-0.17246,0.42291,0.81830,1.98535,-1.88042,1.00875],t=0.3)\n"
" movel(p[-0.18473,0.41674,0.82537,1.98535,-1.88042,1.00875],t=0.3)\n"
" movel(p[-0.19833,0.41056,0.83022,1.98535,-1.88042,1.00875],t=0.3)\n"
" movel(p[-0.21030,0.40556,0.83022,1.98535,-1.88042,1.00875],t=0.3)\n"
" movel(p[-0.22156,0.40108,0.83022,1.98535,-1.88042,1.00875],t=0.3)\n"
" movel(p[-0.23139,0.39726,0.82689,1.98535,-1.88042,1.00875],t=0.3)\n"
“end\n”
“motions()\n”

Just a quick scan here, I notice you’re sending these commands with an expected completion time of around 0.3 seconds, but have specified no blend radius to have the motion continuous (as opposed to coming to a full stop after each move is complete).

Perhaps see the arguments here for the movel command?
image

Make sure you choose an r value small enough so the blend radii don’t overlap. This would depend on your point spacing.

As terryc mentioned, you have no blend radius specified so for each move the robot will accelerate, cruise, and then decelerate before going to the next move. Since your time to complete is so short, this will make the robot appear as if it’s shaking. Perhaps you could also consider issuing a “servoj” command instead (note that paths are typically broken up into smaller chunks than what you have for this case).

Yes, the servoj I’m currently using can solve this problem, thank you, but I still have a problem. When I use servoj, THE joint values resolved by get_inverse_kin() may have singularity problems. In this case, the indicator will give an alarm at the last point ‘invalid waypoint’. Can I read this alarm in advance through TCP communication

Yes, if your robot software is up to date you can run the function “get_inverse_kin_has_solutions()” which will return True or False depending if a solution exists.

Can this return value be read over TCP communication?

Hi,
Is this a UR3e or UR5e/10e ? If this is a UR3e and you just do simple moveJ moves and are still seeing vibrations then there might be something wrong (mechanically) with this robot.

I suppose it could, but not directly as it’s just a script function the same as any other. You’ll probably need to write some code to store the values of your poses in float registers, run the kinematic solution check script function, and then store the result (True/False) in a separate register which you can then read via external interfaces.

What is this mean? could you please explain?