[ros-users] Contact point definition in URDF format

Thomas Moulard thomas.moulard at gmail.com
Fri Mar 2 17:21:30 UTC 2012

here is another proposal to enhance humanoids robots support in ROS.

When dealing with legged robots, one very important information is the
list of valid contact zones, i.e. the zones which can safely support the robot.
Information about soles are also required to generate walking trajectories.
An example of this would be http://hal.inria.fr/docs/00/46/41/25/PDF/paper.pdf.

I suggest adding to the <link> element of URDF an optional node
called "contact" which structure is very close to the geometry and
collision elements.

The attached document specify how this could be implemented.

If you feel like this should be a REP, I can adapt this draft document
to the REP format.

If this new node is accepted, I can provide a set of patches for the
urdf, urdf_interface
and urdf_parser packages.

Thomas Moulard
-------------- next part --------------
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

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.


<link name="foo">
  <origin xyz="0 0 0" rpy="0 0 0" />
   <box size="1 2 3" />
  <limit normal_force="500" />

  <origin xyz="1 0 0" rpy="0 0 0" />
   <box size="2 3 4" />
  <limit normal_force="300" />

Grammar extension:

The contact element has following elements:

 <origin> (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.

   <geometry> (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.

   <limit> (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.

More information about the ros-users mailing list