-
Notifications
You must be signed in to change notification settings - Fork 94
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
joint: should support specifying frames in <child>
and <parent>
#204
Comments
Original comment by Eric Cousineau (Bitbucket: eacousineau, GitHub: EricCousineau-TRI).
|
1 similar comment
Original comment by Eric Cousineau (Bitbucket: eacousineau, GitHub: EricCousineau-TRI).
|
this is part of the current draft of the composition proposal: |
Suggested route:
|
I have a branch that updates the proposed SDFormat 1.8 parsing stages with this change: gazebosim/sdf_tutorials@add2975 |
I have a branch with a prototype implementation of this change. The kernel of the change is in cf095f3, which modifies how the |
<child>
and <parent>
<child>
and <parent>
Replace checkJointParentChildLinkNames with checkJointParentChildNames. Closes gazebosim#204. Signed-off-by: Steve Peters <[email protected]>
I updated the documentation of parsing stages a bit further based on the observation that all vertices need to be added to the graph before adding any joint edges: gazebosim/sdf_tutorials@77b0db1 |
In order to figure out which are actually the parent and child links of a joint now, I think we should add |
I'm actually not sure why this is necessary... Is it just sugar? |
only the perhaps we should consider another class like |
it looks like this discussion is being addressed in gazebosim/sdf_tutorials#3 |
Per VC, we stick to philosophy that Will post about different resolution for gazebosim/sdf_tutorials#3 in that thread |
The `//joint/child` and `//joint/parent` elements now accept any valid frame name instead of only link names. The migration guide is updated as well. Closes gazebosim#204. Signed-off-by: Steve Peters <[email protected]>
Signed-off-by: Steve Peters <[email protected]>
The `//joint/child` and `//joint/parent` elements now accept any valid frame name instead of only link names. The migration guide is updated as well. Closes gazebosim#204. Signed-off-by: Steve Peters <[email protected]>
Signed-off-by: Steve Peters <[email protected]>
The `//joint/child` and `//joint/parent` elements now accept any valid frame name instead of only link names. Closes #204. * Add sdf test models * parser: update joint check function, add tests * FrameSemantics: joint parent/child as frames buildFrameAttachedToGraph: don't create edges from joint to child until all joint and frame vertices are added, in case the child is not a link. buildPoseRelativeToGraph: if //joint/pose/@relative_to is not specified, don't create edges from joint to child until all joint and frame vertices are added to the graph, in case the child is not a link. * Joint: add ResolveChildLink, ResolveParentLink These methods use the FrameAttachedToGraph to resolve the name of the parent and child links of a joint, similar to Frame::ResolveAttachedToBody. Return early from ResolveParentLink if "world" is specified as a joint's parent frame, since "world" is not in a Model's FrameAttachedToGraph. * Check that resolved parent and child frames differ Add test world in which a joint's child frame resolves to the same value as the parent, which is invalid. Check for this case in `ign sdf --check`. Signed-off-by: Steve Peters <[email protected]>
Original report (archived issue) by Eric Cousineau (Bitbucket: eacousineau, GitHub: EricCousineau-TRI).
Summary
At present, the
<child>
and<parent>
elements of<joint>
are constrained to be links:http://sdformat.org/spec?ver=1.6&elem=joint#joint_parent
It would be excellent if the specification permitted using frames. Per #200, if a link creates an implicit frame, then this change will be backwards-compatible at a specification level.
Motivation
When specifying a world in SDF, it would be nice to specify joints with more semantics than just a link and an offset; e.g. if I want to weld a mug to the top of a table, I can specify two frames (completely invariant of the model frames) on the mug and table, and then just weld those two frames together. For a robot with revolute joints, you can embed better semantics when assembling the robot.
I am willing to provide a draft change to the spec, and possibly to the API as well to accommodate this change while considering backwards compatibility.
Describe alternatives you've considered
TTBOMK, the alternative is to use the present state, which is to manually compute the kinematics; while feasible, this is brittle due to numerics. Xacros / ruby templates shouldn't be necessary for conveniently joining things.
Additional context
If this proposal is accepted, I would like to ensure that this feature is implemented in Drake here:
https://drake.mit.edu/doxygen_cxx/namespacedrake_1_1multibody_1_1parsing.html#a3e9bff0197c6c7f86f9ff6f8854def53
https://drake.mit.edu/pydrake/pydrake.multibody.multibody_tree.parsing.html#pydrake.multibody.multibody_tree.parsing.AddModelFromSdfFile
Downstream issue: RobotLocomotion/drake#9910
\cc @nkoenig
The text was updated successfully, but these errors were encountered: