Création du fichier URDF du robot

Avertissement

Fichier URDF non finalisé

Ce fichier URDF est encore en cours de développement. Il manque actuellement l’intégration des marqueurs ros2_control nécessaires pour l’interfaçage avec les contrôleurs matériels. Ces éléments seront ajoutés dans une version ultérieure de la documentation.

Le modèle URDF du robot pantographe est défini à l’aide d’un fichier xacro nommé pantographe.urdf.xacro, situé dans le package pantographe_description.

L’utilisation du format xacro permet de simplifier et de structurer la description du robot en introduisant des macros, des variables et des paramètres, évitant ainsi la redondance inhérente à un fichier XML URDF statique.

La documentation officielle de xacro est disponible à l’adresse suivante : https://wiki.ros.org/xacro

Principe des fichiers URDF et xacro

Les fichiers URDF et xacro permettent de décrire la structure mécanique d’un robot en définissant :

  • des liens rigides (links),

  • des mobilités (joints) reliant ces liens,

  • ainsi que des informations supplémentaires telles que :

    • les propriétés visuelles,

    • les volumes de collision,

    • les paramètres d’inertie.

Afin d’améliorer la cohérence du modèle et de faciliter sa compréhension, les fichiers de géométrie ont été réexportés de manière à corriger le placement des origines et l’orientation des axes de chaque lien.

Organisation des fichiers xacro

La description du robot est divisée en plusieurs fichiers xacro :

  • un fichier principal contenant la structure générale du robot ;

  • un ou plusieurs fichiers de macros xacro décrivant les composants répétitifs (liens, joints, transmissions, etc.).

Exemple de fichier définissant les macros xacro :

<?xml version="1.0"?>
<robot xmlns:xacro="http://ros.org/wiki/xacro" name="pantographe_macros">

  <!--
    Macros for pantographe description
    - link_with_mesh: creates a link with inertial, visual and collision referencing meshes/<name>
    - revolute_joint: creates a revolute joint about Z between parent and child
  -->

  <xacro:macro name="link_with_mesh" params="name mesh mass ixx iyy izz">
    <link name="${name}">
      <inertial>
        <origin xyz="0 0 0" rpy="0 0 0"/>
        <mass value="${mass}"/>
        <inertia ixx="${ixx}" ixy="0.0" ixz="0.0" iyy="${iyy}" iyz="0.0" izz="${izz}"/>
      </inertial>

      <visual>
        <origin xyz="0 0 0" rpy="0 0 0"/>
        <geometry>
          <mesh filename="package://pantographe_description/meshes/${mesh}"/>
        </geometry>
      </visual>

      <collision>
        <origin xyz="0 0 0" rpy="0 0 0"/>
        <geometry>
          <mesh filename="package://pantographe_description/meshes/${mesh}"/>
        </geometry>
      </collision>
    </link>
  </xacro:macro>

  <xacro:macro name="revolute_joint" params="name parent child xyz rpy axis lower upper effort velocity">
    <joint name="${name}" type="revolute">
      <parent link="${parent}"/>
      <child  link="${child}"/>
      <origin xyz="${xyz}" rpy="${rpy}"/>
      <axis xyz="${axis}"/>
      <limit lower="${lower}" upper="${upper}" effort="${effort}" velocity="${velocity}"/>
    </joint>
  </xacro:macro>

</robot>

Exemple de fichier URDF principal utilisant les macros :

   <?xml version="1.0"?>
<robot name="pantographe" xmlns:xacro="http://ros.org/wiki/xacro">

  <!--
    Xacro file for the pantographe model.
    Links: base, link1, link2, link3, link4
    Meshes expected at: package://pantographe_description/meshes/base.dae and link1.dae..link4.dae

    Notes:
    - There are 5 joints forming a closed chain.
    - Since URDF does not natively support closed kinematic loops, this file will ommit closing the
      chain by ignoring joint3 between link2 and link3.
    - Joint 1 and 5 are the only driven joints.
    -->

  <xacro:include filename="$(find pantographe_description)/urdf/pantographe_macros.urdf.xacro"/>

  <!-- links:  -->
  <xacro:link_with_mesh name="base"  mesh="base.dae"  mass="2.0"  ixx="0.02" iyy="0.02" izz="0.02"/>
  <xacro:link_with_mesh name="link1" mesh="link1.dae" mass="0.5"  ixx="0.005" iyy="0.005" izz="0.005"/>
  <xacro:link_with_mesh name="link2" mesh="link2.dae" mass="0.5"  ixx="0.005" iyy="0.005" izz="0.005"/>
  <xacro:link_with_mesh name="link3" mesh="link3.dae" mass="0.5"  ixx="0.005" iyy="0.005" izz="0.005"/>
  <xacro:link_with_mesh name="link4" mesh="link4.dae" mass="0.5"  ixx="0.005" iyy="0.005" izz="0.005"/>

  <!-- joints: revolute about y. origins mesured in cad -->
  <xacro:revolute_joint name="joint1" parent="base"  child="link1" xyz="-0.0800 0.0320 0.0700" rpy="-1.57079 1.57079 0" axis="0 0 1" lower="-3.1416" upper="3.1416" effort="10" velocity="5"/>
  <xacro:revolute_joint name="joint5" parent="base" child="link4" xyz="0.0580 0.0320 0.0700" rpy="-1.57079 1.57079 0" axis="0 0 1" lower="-3.1416" upper="3.1416" effort="10" velocity="5"/>
  <xacro:revolute_joint name="joint2" parent="link1" child="link2" xyz="0.0800 0.0000 0.0540" rpy="1.57079632679 0 3.14159" axis="0 1 0" lower="-3.1416" upper="3.1416" effort="10" velocity="5"/>
  <xacro:revolute_joint name="joint4" parent="link4" child="link3" xyz="0.0790 0.0000 0.0530" rpy="-1.57079 0 $(radians(180))" axis="0 1 0" lower="-3.1416" upper="3.1416" effort="10" velocity="5"/>

</robot>

Génération du fichier URDF

Le fichier URDF final est généré à partir du fichier xacro à l’aide de la commande suivante, exécutée dans un terminal situé à la racine de l’espace de travail ROS 2 :

ros2 run xacro xacro \
  pantographe_description/urdf/pantographe.urdf.xacro \
  > pantographe.urdf

Cette commande produit un fichier pantographe.urdf entièrement résolu, qui peut ensuite être utilisé par les outils ROS 2 tels que RViz, robot_state_publisher ou les simulateurs.