We should start using frames of reference when specifying poses. Something like:
<link><poseframe="parent_link">x y z r p y</pose></link>
Is this simply a label applied to a frame? Or does this change how the pose is interpreted? Currently all poses are offsets from the parent.
It would change how the poses are interpreted.
What's the motivation for this? It sounds more powerful, but I'm concerned that it may be much more complex.
The motivation is to make robot construction easier, specifically link chains.
That's a good point; it's harder to do link chains in sdf than in urdf. I think my comments are mainly concerned about making sure we get the implementation details right. Design document? I can help discuss the design.
Yeah, a design would be good. I don't have time right now, maybe in a week or so.
(Marked it as an enhancement, b/c I think the action item here could just be an update to unittests to show valid usages?)
In Drake we actually played with a very simple prototype to do exactly this. You can refer for instance to the example test sdf_parser_test.cc. In particular, I think it'd be useful to generally be able to do GetPose() as done in this example. That is, requesting a pose in general requires you specifying two frames A and B in order to get pose X_AB of frame B in frame A (sorry, I am using the monogram notation we widely adopted in Drake, docs here)
This little prototype uses this FrameCache in order to take care of the proper chained transformations take place. It is not complete though, I believe special care must be taken for kinematic loops unintentionally created by a user, but it'd be a start.
And I think this feature would allow clearing up the misunderstandings with conventions when specifying <frame>s and <pose>s.