Kinematic Skeleton - dfki-ric/phobos GitHub Wiki

Links and joints are handled as Blender armatures and bones in Phobos, as explained here. It is possible to position the 3D cursor at a specific location (3D Cursor values displayed in the view panel to the right of the 3D view), create a Blender armature and set the phobostype to link. It's however easier to use Phobos' Create Link(s) operator for that.

addlinks_3dcursor

Adding a link at the 3D cursor position

The operator can either place a link at the 3D cursor or place multiple links at the origins of selected visual objects (choose selected objects as Location in the operator menu). This will place links in the position and with the orientation of the selected visuals:

addlinks_selected_objects

Adding a link with selected objects enables other options to choose from.

The problem here is that not all links are placed sensibly. As they not only represent the reference frames for links, but also the positions of joints between the links (see here), it is not always helpful to directly parent the objects to the newly created links using the parent object(s).

If we have arranged our visual objects in a tree already, we can directly create the links with the tree structure by using Create Link. The links will be placed at the origins of the visuals.

addlinks_selected_objects

The same problem as above applies: If the visual objects are not arranged properly, this will result in wrongly placed joints, as can be seen in the example picture, where the leg joints reside in the middle of the limb segments.

addlinks_all_options

Thus, this parenting method is best used only if the origins of visuals are located in "link space".

It is possible to configure the name segments and prefix to be used for naming the newly created links. Finish the operator by hitting A. As you will notice, all our newly-created bones are already set to phobostype link.

Constraints

Joints are defined implicitly via the orientation of the links: most joints rotate around (or slide along) the long axis of the associated bone. If you select a bone, switch to Pose Mode (Ctrl + Tab) and hit R Y Y to enter local rotating mode along Y, you can turn your joint around its axis:

testwalker_turn_head

Using the Define Joint(s) operator, it is possible to specify the constraints defined in URDF, which are then assigned to the joint. These constraint settings are also applied to the Bone Constraints of Blender. You should always use Define Joint(s) instead of defining the constraints via blender.

testwalker_joint_constraints

This will restrict the way the pose bone can be rotated in Blender to the same degree as on the actual robot.

Finalize Kinematic Skeleton

Finally, after all armatures are placed correctly and all edit bones are oriented to match the joint axes, we should check that the kinematic chain is represented correctly in the parent child relations of the armatures. So, we should have one armature representing the URDF's root link and the different kinematic chains are represented by its children and children of children. Additionally, all objects (visuals, collisions, etc.) belonging to a link should become children of it. When selecting a link as parent of an object, it is important to use the bone relative parenting. Finally, we have completed the kinematic model of the robot.

Back to Modeling Walkthrough.

⚠️ **GitHub.com Fallback** ⚠️