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
Add a 6dof (free) RollPitchYaw joint #14949
Comments
Strongly agree! I think it should be sufficient to add a |
A RollPitchYawJoint would be a great addition. BTW you can produce that effect today with three revolute and three prismatic joints and a few intermediate massless bodies. |
From f2f discussion:
For consistency with the ball I think it should be called FreeRpyJoint ? |
I like FreeRpyJoint, it seems to convey the mental idea our users need IMO. |
notably, neither urdf nor sdf seem to offer it: in our old matlab we called it |
I believe @sherm mostly wanted to keep the "rpy" part of the name in consistency with We've been adding custom |
For consistency it should be FloatingRpyJoint, or we would have to rename BallRpyJoint -> RpyBallJoint. But I think FloatingRpyJoint and BallRpyJoint are marginally better because they start with the joint type and would alphabetize next to other Floating and Ball joints that use different generalized coordinates. Those would be easier for people to find. Personally I prefer Free to Floating. The MBP API already uses the term "FreeBody" extensively -- to me it seems better to have a FreeBody use a FreeJoint. Also "Free" correctly refers to the constraints imposed by the joint (none), while "Floating" isn't a property of joints. |
My understanding is that @joemasterjohn will add a free joint soon. Will that be represented as rpy and solve this isse? |
No, Joe is planning to add a 6-dof joint that uses a quaternion. Would be good to have the Rpy option also but that isn't needed for Joe's purpose. |
Good to know thanks. I'll put this in the backburner for now then. |
I think backburner is ok. I will note that we (I actually got to this issue after a bit of searching because I remembered having to touch |
For anyone that feels like they need this, there is a less elegant solution already: you can just add all of the joints individually: |
FYI -- If you want to emulate the future FloatingRpyJoint exactly, put the BallRpyJoint first, followed by three PrismaticJoints (with two massless links in between). Caveat: the BallRpyJoint doesn't allow actuation of individual axes -- if you need that you would have to start with three RevoluteJoints instead of the BallRpy. |
just a bump because I've run into this yet again as a pain point. I was hoping to pose some objects in the scene using the "authoring multibodyplant" tutorial workflow, but JointSliders does not support quaternion floating bases and we don't make it easy to add these RPY joints. |
Any thoughts / progress on this, @joemasterjohn ? |
@joemasterjohn is working on this but run into some design choices. @joemasterjohn will ask in the DrakeDevelopers channel for people to weigh in for options. |
The design discussion mentioned above is linked here. |
(At the risk of being ignorant) Why not use 3-vector axis-angle / |
Sadly, no 3-variable representation of so(3) can avoid having a singularity. See the Hairy Ball Theorem. It's not that you can't represent all the orientations nicely; it's that the derivative (tangent) must be singular somewhere. |
I suppose you mean to take the axis |
Makes sense - but I think the point here is to have a less (nonlinearly) constrained space - per above, Hongkai would like to avoid quaternions given the unit-vector constraint.
Gotcha, that makes sense for Additionally, doesn't this give you a wider surface of well-defined mappings (a span of almost 2*pi along at least one axis of rotation) than gimbal lock w/ rpy? Also, if you're optimizing against |
The function f⁻¹(aθ) = R is smooth and well-defined. But at some point we will need to convert If we only care about trajectory optimization, then we can choose either aθ or roll-pitch-yaw angle. The function from aθ or roll-pitch-yaw to R is smooth, hence trajectory optimization will work fine. If we do simulation, then both aθ and roll-pitch-yaw will run into problem, as we need to convert R back to aθ or roll-pitch-yaw in the state. This conversion is not well-defined everywhere.
I don't think wraparound will help in this case, in the θ=π case, the angle is π , there is no need to wrap-around the angle. The ambiguity is in the rotation axis; both |
@joemasterjohn-TRI, will tackle this one for our tech debt. Thanks @joemasterjohn-TRI! |
Of course! Thanks @joemasterjohn! |
I hit this again trying to make ModelVisualizer better. It currently gives the user 7 sliders each to pose the floating base(s) of the visualized model file(s). I would like to instead provide rpy sliders instead of qw qx qy qz sliders for ease of use. Doing that by adding a FloatingRpyJoint to my plant would be very nice! |
See if you like the API in |
For ModelVisualizer, yes that would fit the bill. I'd just switch my plant to use rpy exclusively before loading any models. |
Thanks for the feedback. I'll start cleaning up towards a PR. |
Hitting this exact situation myself both in the Trajectory Optimization context and in the model visualization with sliders context. Would be a great addition! |
FYI -- I'm going to add a 6dof joint now using roll-pitch-yaw rather than a quaternion. Despite the discussion above, I'm going to name it |
Currently for floating joint, we default to use quaternion to represent its orientation. There are cases when an Euler-angle representation (like roll-pitch-yaw) is preferred
Hence I would like to request adding roll-pitch-yaw as another representation for floating base orientation.
cc @RussTedrake
The text was updated successfully, but these errors were encountered: