-
Notifications
You must be signed in to change notification settings - Fork 1k
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
IK: combine PRs #239, #305, and #316 #358
base: kinetic-devel
Are you sure you want to change the base?
Conversation
…nd added an appropriate helper function.
…ven kinematic configuration.
…full range of joint limits. Rotates joint by +-360° if it is possible and gets the solution closer to the seed.
Note that there are some concerns about the performance of this implementation. More information can be found here. To address those concerns, I've created a branch that merges in the changes of #316. Reviewers are encouraged to use this performance test to compare the two options and decide which version is preferable. If reviewers desire the approach of #316, I can merge that into this PR at any time. |
@mxgrey: thanks for the extensive descriptions and analyses. As I wasn't involved in any of this I'm going to need some help. First: @hartmanndennis: would you be ok with this PR getting merged instead of your #316? With the last update by @mxgrey, it seems he's taken your critique into account and addressed the issue you raised. Is that correct? @mxgrey: I'd like to keep the performance test you wrote around. Would it make sense to add the launch file and test prog to Finally: @mxgrey: your last comment on #316 notes:
I've not looked at the code yet (I really should), but for now: are you referring to the fact that the code adds |
Additional comment: there appear to be quite a few places where magic nrs are introduced ( |
Sure. They should probably be given more descriptive names, though.
That's exactly right. |
Yes it at most adds or subtracts 2pi currently. This could be changed without much effort to make it more general but I doubt the limits are ever going to be changed.
I would prefer my PR getting merged. It only touches searchPosistionIK, which this PR doesn't have to make changes to. |
@hartmanndennis Are you perhaps looking at an older version? The current version is using your method in This PR right now should effectively be #239, #305, and #316 all together, and with the merge conflicts resolved. If people would like to merge the PRs individually, that would certainly be doable, but whoever does the merging will have to re-resolve the conflicts. |
@mxgrey: I don't see any additional changes being pulled in by your last merge. Did something go wrong? |
Ah, no, I was just double-checking that this branch was up-to-date. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hi @mxgrey
I took a short look at your PR in hope of at some point approving either of the many open PRs so this can reach the quality of other analytical kinematic solvers (ik_fast, opw). Not sure if you are still around and willing to iterate on this but let's try :)
Besides the inline comments, this also needs a rebase due to bogus unused headers.
Co-authored-by: Simon Schmeisser <[email protected]>
Co-authored-by: Simon Schmeisser <[email protected]>
@simonschmeisser Thanks for catching those bugs, and sorry for my slow reply. This PR was from participating in a ROS-I Hackathon Day some years ago, so it's fallen very low on my priority list. But I looked over the suggested changes, and I think you're exactly right. However, I've added one more change, which is to clear the |
Ok, so retargetting doesn't immediately work. Unfortunately. |
Hum, I will check that |
It's probably just github which is confused, as the changes are very much localised. |
I am to know curious if this branch is still active or obsolete? |
No, this is not really active. Finishing |
There have been a number of issues and PRs raised regarding issues with the UR having multiple IK solutions. The existing IK solver only returns one single solution, and when determining that solution it will ignore many potential valid solutions.
PR #239 implements an interface to retrieve all valid solutions, but it does not account for all combinations of potentially valid solutions.
PR #305 accounts for all combinations of potentially valid solutions, including those that go past +/-pi. It does so in a way that is robust to changes in the model joint limits.
Since they're touching on similar parts of the code, they have some conflicts, so this PR merges them and resolves those conflicts.
PR #316 addresses the same issue as #305, but it only provides a single solution, whereas the interface introduced in #239 is looking for all solutions. #316's implementation is also tied to assumptions about how large the joint limits of the UR can be. Using the implementation of #305 instead of #316 allows us to tackle both issues (1) finding one best solution, and (2) finding all valid solutions with the same code. It's also future-proof in case the joint limits change (unless the UR ever gets a continuous joint with infinite range, but that would lead to infinite solutions). I would suggest passing on #316 unless it can be demonstrated with a benchmark that it offers considerable performance benefits.