Ajout de propriétés physiques et de collision

Objectif : Découvrez comment ajouter des propriétés de collision et d’inertie aux liens, et comment ajouter une dynamique d’articulation aux articulations.

Niveau du didacticiel : Intermédiaire

Durée : 10 minutes

Dans ce didacticiel, nous verrons comment ajouter des propriétés physiques de base à votre modèle URDF et comment spécifier ses propriétés de collision.

Collision

Jusqu’à présent, nous n’avons spécifié nos liens qu’avec un seul sous-élément, visual, qui définit (sans surprise) à quoi ressemble le robot. Cependant, pour que la détection de collision fonctionne ou pour simuler le robot, nous devons également définir un élément collision. Voici le nouvel urdf avec collision et propriétés physiques.

Voici le code de notre nouveau lien de base.

<link name="base_link">
    <visual>
      <geometry>
        <cylinder length="0.6" radius="0.2"/>
      </geometry>
      <material name="blue">
        <color rgba="0 0 .8 1"/>
      </material>
    </visual>
    <collision>
      <geometry>
        <cylinder length="0.6" radius="0.2"/>
      </geometry>
    </collision>
  </link>
  • L’élément collision est un sous-élément direct de l’objet lien, au même niveau que la balise visuelle.

  • L’élément de collision définit sa forme de la même manière que l’élément visuel, avec une balise geometry. Le format de la balise geometry est exactement le même ici que pour le visuel.

  • Vous pouvez également spécifier une origine de la même manière qu’un sous-élément de la balise de collision (comme pour le visuel).

Dans de nombreux cas, vous souhaiterez que la géométrie et l’origine de la collision soient exactement les mêmes que la géométrie et l’origine visuelles. Cependant, il existe deux cas principaux où vous ne le feriez pas :

  • Traitement plus rapide. La détection de collision pour deux maillages est beaucoup plus complexe en termes de calcul que pour deux géométries simples. Par conséquent, vous pouvez remplacer les maillages par des géométries plus simples dans l’élément de collision.

  • Zones de sécurité. Vous voudrez peut-être restreindre les mouvements à proximité d’équipements sensibles. Par exemple, si nous ne voulions pas que quoi que ce soit entre en collision avec la tête de R2D2, nous pourrions définir la géométrie de collision comme étant un cylindre enveloppant sa tête pour empêcher quoi que ce soit de s’approcher trop près de sa tête.

Propriétés physiques

Pour que votre modèle simule correctement, vous devez définir plusieurs propriétés physiques de votre robot, c’est-à-dire les propriétés dont un moteur physique comme Gazebo aurait besoin.

Inertie

Chaque élément de lien simulé a besoin d’une balise inertielle. En voici une simple.

<link name="base_link">
  <visual>
    <geometry>
      <cylinder length="0.6" radius="0.2"/>
    </geometry>
    <material name="blue">
      <color rgba="0 0 .8 1"/>
    </material>
  </visual>
  <collision>
    <geometry>
      <cylinder length="0.6" radius="0.2"/>
    </geometry>
  </collision>
  <inertial>
    <mass value="10"/>
    <inertia ixx="1e-3" ixy="0.0" ixz="0.0" iyy="1e-3" iyz="0.0" izz="1e-3"/>
  </inertial>
</link>
  • Cet élément est également un sous-élément de l’objet lien.

  • La masse est définie en kilogrammes.

  • La matrice d’inertie de rotation 3x3 est spécifiée avec l’élément d’inertie. Puisqu’il est symétrique, il ne peut être représenté que par 6 éléments, en tant que tel.

    xx

    ixy

    ixz

    ixy

    aaa

    aaaa

    ixz

    iyz

    izz

  • Ces informations peuvent vous être fournies par des programmes de modélisation tels que MeshLab. L’inertie des primitives géométriques (cylindre, boîte, sphère) peut être calculée à l’aide de la liste des tenseurs de moment d’inertie de Wikipedia (et est utilisée dans ce qui précède exemple).

  • Le tenseur d’inertie dépend à la fois de la masse et de la distribution de masse de l’objet. Une bonne première approximation consiste à supposer une répartition égale de la masse dans le volume de l’objet et à calculer le tenseur d’inertie en fonction de la forme de l’objet, comme indiqué ci-dessus.

  • Si vous ne savez pas quoi mettre, une matrice avec ixx/iyy/izz=1e-3 ou moins est souvent une valeur par défaut raisonnable pour un lien de taille moyenne (cela correspond à une boîte de 0,1 m de côté avec une masse de 0,6 kg). La matrice d’identité est un choix particulièrement mauvais, car elle est souvent beaucoup trop élevée (elle correspond à une boîte de 0,1 m de côté avec une masse de 600 kg !).

  • Vous pouvez également spécifier une balise d’origine pour spécifier le centre de gravité et le référentiel inertiel (par rapport au référentiel du lien).

  • Lors de l’utilisation de contrôleurs en temps réel, des éléments d’inertie de zéro (ou presque) peuvent provoquer l’effondrement du modèle de robot sans avertissement, et tous les liens apparaîtront avec leurs origines coïncidant avec l’origine du monde.

Coefficients de contact

Vous pouvez également définir le comportement des liens lorsqu’ils sont en contact les uns avec les autres. Cela se fait avec un sous-élément de la balise de collision appelé contact_coefficients. Il y a trois attributs à spécifier :

Dynamique articulaire

La manière dont l’articulation se déplace est définie par la balise dynamique de l’articulation. Il y a deux attributs ici :

  • friction - Le frottement statique physique. Pour les joints prismatiques, les unités sont les Newtons. Pour les joints tournants, les unités sont les Newton mètres.

  • damping - La valeur d’amortissement physique. Pour les joints prismatiques, les unités sont des Newton secondes par mètre. Pour les joints tournants, Newton mètre seconde par radian.

S’ils ne sont pas spécifiés, ces coefficients sont par défaut à zéro.

Autres balises

Dans le domaine de l’URDF pur (c’est-à-dire à l’exclusion des balises spécifiques à Gazebo), il reste deux balises pour aider à définir les articulations : étalonnage et contrôleur de sécurité. Consultez les spécifications, car elles ne sont pas incluses dans ce didacticiel.

Prochaines étapes

Réduisez la quantité de code et de calculs ennuyeux que vous devez faire en using xacro.