I’m sending a URScript-function with several movex-commands with blending radius to smoothely move along a trajectory. This works great as long as the poses are far away from each other. However, I’m using a planner that dynamically generates a trajectory for a collision free path. This plan contains a lot of poses (distance of some mm)
This trajectory can be executed, the robot however moves rather slow. It looks like he wants to achieve a speed of zero at each pose so that he’s accelerating and decelerating a lot instead of moving straight along the path.
Is there a way to get a smoother (and faster) trajectory execution?
I could try to downsample the trajectory, but it would of course be easier if I wouldn’t have to do it.
Try to consider the servoj
command, this allows you online control the motions of the robot.
Popular speaking, movej
/movel
will move all the way to a waypoint (when not considering blends, anyway), before the function returns.
servoj
will move towards the joint configuration for a finite time (e.g. 8 ms or 100 ms), and afterwards will expect to receive a new joint configuration set, that it will move towards instead. This will yield a more smooth motion.
This could e.g. be used for a joystick controlling the robot.
Example program:
while (servoMove):
servoj(target, t=0.1, lookahead_time=0.1)
end
And inside a thread, you can every 100 ms reconfigure the target
variable, and set the servoMove
to False
to stop the servoj-loop.
Thanks! I just read that speed and acceleration is currently not used, how fast is the robot moving towards the next configuration?
Try working with the proportional gain factor, this should make it possible to adjust achieved speeds.
hello!
I used the servoj command and found that the arm shook violently but did not move ,using movej will move but with jitter
Do you know what the reason is? Or can you tell me how to use servoj? Do you have a demo of UR real-time control?
Looking forward to your reply!
Thanks