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
rationale behind jump threshold? #773
Comments
I think we discussed this before, and iirc, no one really knows (any more). Same sort of confusion about the additional point(s) that get added to the trajectory. |
Shouldn't we change it then? |
I believe that would make sense, yes. (I tried to find the discussion(s) I seem to remember, but I can't. Maybe they only happened in my mind ..) |
Perhaps using a max jump threshold that is a function of the joint's max speed might be more appropriate. |
+1 for absolute joint-space jump threshold. I implemented an equivalent computeCartesianPath function that uses Descartes under the hood and found that an absolute joint-space jump threshold was very helpful to ensure that the robot didn't flip joints mid trajectory. |
The factor was most likely added to account for different robot kinematics. If we want to have an absolute factor, we should imo also add an interpolation mechanism that attempts to fill in steps that are too big. |
I agree that an absolute joint space jump threshold is an imperfect solution but it has certain properties that are nice: it's easy for users to understand and it's easy to implement although I'm not sure it's strictly better than the existing solution. I'm not sure what an interpolation mechanism that fills in steps would look like. @v4hn Can you elaborate? |
Upon re-reading through the implementation, jump_threshold is a terrible variable name because it implies absolute joint space jump but it acts as more of a scaling factor. Perhaps a variable name change to jump_threshold_factor would help reduce confusion. |
That's what I proposed. I will take care of this after all the deadlines.
Good suggestion. However, is this variable also exposed to any external (ROS) interface? In this case, it get's tricky. Such a variable name change should be scheduled only for Lunar or later. |
I agree with @v4hn, @isucan was very keen on making as many parameters as possible auto-tuning to avoid magic numbers. Hence the flexibility of OMPL+MoveIt!. Have an alternative jump threshold approach is fine with me, but I like the current approach that is flexible for different robot kinematic types
This might be a good idea but I think it would be best to interpolate by doing finer IK calls rather than just simple joint interpolation.
Changing variable names in header files does not break ABI/API as far as I know, it gets obfuscated into a symbol anyway. |
For sure! This was my intention.
This is true. However, I was asking for ROS interfaces, i.e. ROS messages, services, etc. |
Joint space interpolation is not sufficient and I meant work space interpolation before IK. |
GetCartesianPath has a jump_threshold variable which is used by the computeCartesianPath capability. |
Can somebody explain me the rationale behind
RobotState::testJointSpaceJump()
?Obviously the goal is to avoid joint-state jumps. However, I don't get why it computes the mean joint-state change over the whole trajectory and uses
jump_threshold
as a scaling factor, such that:[single joint state change] < jump_threshold * [mean joint state change]
Wouldn't it be more reasonable to specify an absolute joint-space jump threshold?
In this case, one could even try to sample the Cartesian trajectory more densely to maintain the threshold...
I stumbled over this, because my generated joint-space trajectory is non-uniform (both in joint and Cartesian space). Thus the averaging process tries to find the mean of a multi-modal distribution...
The text was updated successfully, but these errors were encountered: