I know this is an old thread, but hopefully someone will be able to see this and help.
I am trying to use articulations, and am having troubles understanding how to use articulationjoints.
I am using the following template /pseudo-code to create articulation, links and joints, based on the ArticulationSnippet.
articulation = Physics->createArticulation()
//for each link
link = articulation->createLink(parent, LINK_POSE)
joint = link->getInboundJoint()
if(joint)
joint->setParentPose(PARENT_POSE)
joint->setChildPose(CHILD_POSE)
// define the rest of the joint
I need clarifications regarding the three required poses (LINK, PARENT and CHILD)
My understanding is as follows:
LINK_POSE is the initial pose of the new link in the world frame. This is inconvenient because it would be much easier to express this pose relative to the previous link, but at least it is manageable by keeping track of the previous link poses.
PARENT_POSE is the pose of new joint expressed in the frame of the parent link. The translation component is easily visualized as an offset from the link frame (which is usually in the middle of the geometry mesh). The rotation component can (? I am not sure) be use to orient the new joint frame any way you want. To mimic a revolute joint, you would ideally want to orient the X (twist) axis of the joint as the main rotation axis.
CHILD_POSE is where I get confused. I believe it is the pose of the new joint expressed in the frame of the child link. Again, the translation component is easily visualized as an offset from the link frame to the attach point. HOWEVER, I feel like the orientation component of this transform is already fully defined by the LINK_POSE and the PARENT_POSE.
i.e.: (newLink2World_transform)(childLink2Joint_transform)^-1 = (parentLink2World_transform)(parentLink2Joint_transform)^-1
All terms in italic are previously known (world transforms are either the original transforms from LINK_POSE or deduced from its evolution over time), leaving the child_pose fully defined.
There MUST be something wrong with my understanding, but the documentation can’t help me figure it out, so any help would be greatly appreciated.