-
Notifications
You must be signed in to change notification settings - Fork 26
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Driver skips points in between trajectory #32
Comments
That looks like an incorrect implementation indeed: there's no way to guarantee that |
Could this problem cause the jerky trajectories that were mentioned in #25 ? |
It does cause trajectories to execute weirdly (depending on several factors, of course). We tested generating trajectories in MoveIt and then creating val3 code out of them and that works perfectly, so I would rule out MoveIt/OMPL as the source of jerkiness. |
@gonzalocasas: did you already check whether removing that line improves things? Should be relatively easy to check, just comment the line. |
@gavanderhoorn yes, I confirm. Removing the line indeed fixes the issue. |
I can send a PR for it as is (just removing the line), although, I wanted to check first whether it was still meaningful to do this check but move it to the execution loop, so that it actually does what it was intended to do. But I can also send the removal-line PR for now and then send the other if I see it makes sense... What would be preferable from your perspective? |
Let's just remove the line. I'm not sure it makes sense to add it back somewhere else, as It could be that pruning points might make sense / improve performance when very dense trajectories are streamed in. In that case I don't have any way to test that, but it could be something to keep in mind for the future. |
fix #32: do not skip points based on herej()
…iokohler/fix/point-skipping fix ros-industrial/staubli_experimental#32: do not skip points based on herej()
…on herej() A longer description of the problem is available on the github issue, but the basic problem is that this is not evaluated at the correct time (i.e. when the move is about to be executed), but at the time the move is being queued, this means having the robot on a paused state already triggers this problem.
…iokohler/fix/point-skipping fix ros-industrial/staubli_experimental#32: do not skip points based on herej()
…on herej() A longer description of the problem is available on the github issue, but the basic problem is that this is not evaluated at the correct time (i.e. when the move is about to be executed), but at the time the move is being queued, this means having the robot on a paused state already triggers this problem.
…iokohler/fix/point-skipping fix ros-industrial/staubli_experimental#32: do not skip points based on herej()
The motion control task of the driver skips trajectory points when they match the current configuration.
Isn't there a missing check to ensure this only happens for the first point of a trajectory?
At least, that seems to be the condition implemented on the ABB driver (which is conceptually the same but also checks
current_index == 1
)Edit:
The main reason why this is incorrect imo is that motion point queueing is not the same as motion execution; the driver queues up the move commands onto the robot's internal motion buffer and then continues execution. But if the motion is stalled,
herej()
will always return the configuration at the time the point is queued, not at execution. The simplest case that leads to incorrect execution is starting with the robot on the zero-config, with the robot on but the motion button not active (paused motion). Then send a trajectory with 3 points:[0, 0, 90, 0, 0 ,0], [0, 0, 0, 0, 0 ,0], [0, 0, 90, 0, 0 ,0]
. Upon receiving the points, the robot will skip the second point because it matches the configuration and the move that was supposed to involve 3 total moves, will actually do just one move and stop there.The text was updated successfully, but these errors were encountered: