Construire un modèle de robot mobile

Objectif : Apprendre à définir des liaisons mobiles dans URDF.

Niveau du didacticiel : Intermédiaire

Durée : 10 minutes

Dans ce tutoriel, nous allons réviser le modèle R2D2 que nous avons créé dans le tutoriel précédent afin qu’il soit mobile les articulations. Dans le modèle précédent, tous les joints étaient fixes. Nous allons maintenant explorer trois autres types importants d’articulations : continue, rotoïde et prismatique.

Assurez-vous d’avoir installé tous les prérequis avant de continuer. Consultez le tutoriel précédent pour plus d’informations sur ce qui est requis.

Encore une fois, tous les modèles de robots mentionnés dans ce didacticiel se trouvent dans le package urdf_tutorial.

Voici le nouvel urdf avec des joints flexibles. Vous pouvez le comparer à la version précédente pour voir tout ce qui a changé, mais nous allons nous concentrer sur trois exemples de joints.

Pour visualiser et contrôler ce modèle, exécutez la même commande que le dernier tutoriel :

ros2 launch urdf_tutorial display.launch.py model:=urdf/06-flexible.urdf

Cependant, cela affichera également une interface graphique qui vous permettra de contrôler les valeurs de tous les joints non fixes. Jouez avec le modèle et voyez comment il bouge. Ensuite, nous pouvons jeter un œil à la façon dont nous avons accompli cela.

Capture d'écran du modèle flexible

La tête

<joint name="head_swivel" type="continuous">
  <parent link="base_link"/>
  <child link="head"/>
  <axis xyz="0 0 1"/>
  <origin xyz="0 0 0.3"/>
</joint>

La connexion entre le corps et la tête est une articulation continue, ce qui signifie qu’elle peut prendre n’importe quel angle de l’infini négatif à l’infini positif. Les roues sont également modélisées comme ceci, de sorte qu’elles puissent rouler dans les deux sens pour toujours.

La seule information supplémentaire que nous devons ajouter est l’axe de rotation, ici spécifié par un triplet xyz, qui spécifie un vecteur autour duquel la tête va tourner. Puisque nous voulons qu’il tourne autour de l’axe z, nous spécifions le vecteur « 0 0 1 ».

La pince

<joint name="left_gripper_joint" type="revolute">
  <axis xyz="0 0 1"/>
  <limit effort="1000.0" lower="0.0" upper="0.548" velocity="0.5"/>
  <origin rpy="0 0 0" xyz="0.2 0.01 0"/>
  <parent link="gripper_pole"/>
  <child link="left_gripper"/>
</joint>

Les articulations droite et gauche du préhenseur sont modélisées comme des articulations rotoïdes. Cela signifie qu’ils tournent de la même manière que les joints continus, mais ils ont des limites strictes. Par conséquent, nous devons inclure la balise limit spécifiant les limites supérieure et inférieure du joint (en radians). Nous devons également spécifier une vitesse et un effort maximum pour cette articulation, mais les valeurs réelles n’ont pas d’importance pour nos besoins ici.

Le bras de préhension

<joint name="gripper_extension" type="prismatic">
  <parent link="base_link"/>
  <child link="gripper_pole"/>
  <limit effort="1000.0" lower="-0.38" upper="0" velocity="0.5"/>
  <origin rpy="0 0 0" xyz="0.19 0 0.2"/>
</joint>

Le bras de préhension est un autre type d’articulation, à savoir une articulation prismatique. Cela signifie qu’il se déplace le long d’un axe, pas autour de lui. Ce mouvement de translation est ce qui permet à notre modèle de robot d’étendre et de rétracter son bras de préhension.

Les limites du bras prismatique sont spécifiées de la même manière qu’une articulation rotoïde, sauf que les unités sont des mètres et non des radians.

Autres types d’articulations

Il existe deux autres types d’articulations qui se déplacent dans l’espace. Alors que l’articulation prismatique ne peut se déplacer que dans une dimension, une articulation plane peut se déplacer dans un plan ou dans deux dimensions. De plus, un joint flottant n’est pas contraint et peut se déplacer dans n’importe laquelle des trois dimensions. Ces articulations ne peuvent pas être spécifiées par un seul numéro et ne sont donc pas incluses dans ce didacticiel.

Spécification de la pose

Lorsque vous déplacez les curseurs dans l’interface graphique, le modèle se déplace dans Rviz. Comment est-ce fait? Tout d’abord, le GUI analyse l’URDF et trouve tous les joints non fixes et leurs limites. Ensuite, il utilise les valeurs des curseurs pour publier les messages sensor_msgs/msg/JointState. Ceux-ci sont ensuite utilisés par robot_state_publisher pour calculer toutes les transformations entre les différentes parties. L’arbre de transformation résultant est ensuite utilisé pour afficher toutes les formes dans Rviz.

Prochaines étapes

Maintenant que vous avez un modèle visiblement fonctionnel, vous pouvez ajouter quelques propriétés physiques, ou commencer à utiliser xacro pour simplifier votre code.