URDF contact points definition ------------------------------ URDF allows different tags, the most important ones are joint and link. A link (aka body) can include different kind of data: - geometrical shape - collision, aka geometrical shape used to check for collisions. These information can be represented by either a geometrical shape (circle, cylinder, box) or a mesh (using theCollada format for instance). I suggest adding an additional node called "contact" defining a zone where contact with the environment is allowed. For instance, this tag is crucial to humanoid robots as the knowledge of the robot support polygon is required to generate stable walking trajectories. As this change introduces an optional tag it does not break the API and is very simple to implement. The content of a "contact" node defines where a contact is allowed in the same way than the shapes used for geometry or collision. See the example and the URDF documentation for more information. Example: Grammar extension: The contact element has following elements: (optional: defaults to identity if not specified) This is the transform from the parent link to the child link. The joint is located at the origin of the child link, as shown in the figure above. xyz (optional: defaults to zero vector) rpy (optional: defaults 'to zero vector 'if not specified) Represents the rotation around fixed axis: first roll around x, then pitch around y and finally yaw around z. All angles are specified in radians. (required) The shape of the contact surface. This can be one of the following: size attribute contains the three side lengths of the box. The origin of the box is in its center. The box normals must be considered as orthogonal to the box surface, going toward the outside. Specify the radius and length. The origin of the cylinder is in its center. The cylinder normals must be considered as orthogonal to the cylinder surface, going toward the outside. Specify the radius. The origin of the sphere is in its center. The sphere normals must be considered as orthogonal to the sphere surface, going toward the outside. A trimesh element specified by a filename, and an optional scale that scales the mesh's axis-aligned-bounding-box. The mesh file is not transferred between machines referencing the same model. It must be a local file. The surface normals are used to determine valid contact directions. I.e. if the ground and contact zone normal vector are collinear and of opposite directions. (optional) An element can contain the following attributes: normal_force (optional) An attribute specifying the maximum force which can be applied on this contact point. Important: zero, one or more contact points can be defined per link.