-
Notifications
You must be signed in to change notification settings - Fork 285
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
Added Joint::isCyclic to mark SO(2) topology #441
Conversation
I wonder about the implementation of |
As per our discussion in #433 I added an @mxgrey Can you explain coupling breaks the symmetry of |
I just noticed that there is already a no-arg function called /// Get whether enforcing joint position limit
///
/// The joint position limit is valid when the actutor type is one of
/// PASSIVE/FORCE.
///
/// \sa ActuatorType
bool isPositionLimited() const; This has the potential to be very confusing. In an ideal world, I would like to rename This is even a bigger problem on |
Ouch. I think we can make an |
The thing that gives me pause is that I'm not totally sure if a single BallJoint coordinate can really be cyclic if the other two are limited. Maybe it can, it's just not immediately obvious to me. With Revolute or Euler joints, it's obvious that the individual coordinates will just wrap around, but I don't know if that works for log maps. Log maps definitely do wrap, but I think all the coordinates wrap in sync with each other. I would have to look more into the geometry behind it to be sure, though. Basically, I don't think the three coordinates are truly separable. |
- Added isPositionLimitEnforced and setPositionLimitEnforced. - Deprecated isPositionLimited and setPositionLimited. - Updated references throughout DART.
I added I see your point about |
I've opened an issue for |
@mxgrey and I discussed this offline. We definitely can't represent the topology of We still think it is useful to add |
I modified
|
I'm in agreement 👍 |
} | ||
|
||
return !(std::isinf(mSingleDofP.mPositionLowerLimit) | ||
&& std::isinf(mSingleDofP.mPositionUpperLimit)); |
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.
How about this:
return (std::isfinite(mSingleDofP.mPositionLowerLimit)
|| std::isfinite(mSingleDofP.mPositionUpperLimit))
Less use of not
operator seems more clear to understand to me. std::isfinite
is opposite function to std::isinf
except for NAN
value case. Both of them return false
for NAN
but I think NAN
value is meaningless anyways.
The implementation looks good based on current DART functionality and API. I have a side question. Does OMPL have another classes to represent geometric configuration space other than SO(2) such as SE(2), SO(3) and SE(3)? I'm considering to add more base classes for joins that has geometric configuration spaces. |
Yes, OMPL has real, SO(2), SE(2), SO(3), and SE(3) state spaces built in. When possible, I'd like to do the conversion from DART DegreeOfFreedoms to In that case, we will have to throw an error if you try to plan with a On Sun, Jul 12, 2015 at 8:44 PM Jeongseok Lee notifications@github.com
|
Great. I should take a look at the built-in state spaces of OMPL. Thanks.
|
I fixed the comment style and switched from |
Sure, I'm merging. |
Added Joint::isCyclic to mark SO(2) topology
This implements the
isCyclic
function that we discussed in #433.