Replies: 1 comment 3 replies
-
Yes to all of your points, that understanding is correct. Continuous motion is achieved by peeking into the future. The robot will always be running behind a little bit, leaving it a goal position that it will not reach in the current control cycle. This obviously leads to a small delay between commanding positions and that position being reached. This is why we actually cannot decrease the trajectory tolerances to almost 0 in the controller configuration. To further reduce this delay, one could switch towards velocity-based control as with that the problem you mentioned does not exist. There, the problem of open-loop vs. closed-loop exists. When using open-loop, the robot's actual position will not be taken into account when sending the motion commands. When using closed-loop control, one has to tune PID gains for each robot model which we haven't done so far. I hope, that answers the question you had initially? |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
Hello,
Let's say we want to control a UR10e robot using the scaled_joint_trajectory_controller in ROS2 Humble. Here's an outline of how it should work:
Generate a trajectory that includes position, velocity, acceleration, and time_from_start values.
Store these values in a goal trajectory variable, which is then sent to the robot via the scaled_joint_trajectory_controller.
Since the robot operates at a high frequency (500 Hz), the scaled_joint_trajectory_controller interpolates the trajectory into smaller increments, creating position commands approximately 0.002 seconds apart that are then sent to the robot.
At any given moment, the robot receives one position value along with the corresponding time by which it should reach that position.
The robot's internal controller calculates the appropriate torque and acceleration commands to smoothly move the joints to the target position.
My question is: How does the robot know not to stop at each given position? I have seen examples where we only send position commands to the robot. So we don't send an explicit velocity command and therefore I'm a bit confused about how continuous motion is maintained. Also, please let me know if I've misunderstood any of the points above. Thank you!
Beta Was this translation helpful? Give feedback.
All reactions