Description du robot
====================
Le paquet ``ratbot_description`` (dans ``ros2/src/``) contient la
description URDF du robot, écrite en **xacro** :
``urdf/ratbot.urdf.xacro``.
Contenu du modèle
-----------------
Le modèle décrit une base différentielle :
- ``base_footprint`` : projection du robot au sol (racine du modèle) ;
- ``base_link`` : le châssis ;
- ``left_wheel_link`` / ``right_wheel_link`` : les roues motrices
(articulations ``continuous``) ;
- ``caster_link`` : le point d'appui.
Les dimensions (châssis, rayon et entraxe des roues) sont définies comme
propriétés xacro en tête de fichier. Ce sont pour l'instant des **valeurs
provisoires**, à remplacer par les cotes réelles de la conception mécanique
(:doc:`../mechanics/chassis`).
TODO :
- ajouter la frame du **marqueur ArUco** (surface supérieure du robot),
utile à tout système de localisation externe ;
- remplacer les formes primitives par les maillages (voir ci-dessous) ;
- renseigner les inerties réelles.
Maillages 3D : où mettre quoi
-----------------------------
Les formats CAO (STEP) ne sont pas lisibles par RViz/Gazebo : il faut
distinguer la **source de conception** des **maillages exportés**.
.. list-table::
:header-rows: 1
:widths: 30 35 35
* - Fichier
- Emplacement
- Rôle
* - ``*.step`` / ``*.stp``
- ``conception/3d/``
- La source CAO, éditable — jamais référencée par l'URDF.
* - ``*.dae`` (Collada) ou ``*.stl``
- ``ros2/src/ratbot_description/meshes/``
- Les exports pour l'URDF : DAE pour le *visuel* (couleurs), STL
simplifié pour la *collision*.
L'URDF les référence ainsi :
.. code-block:: xml
Règles d'export (depuis FreeCAD, Fusion 360…) :
- **unités : mètres** — les CAO travaillent en millimètres, un maillage
exporté en mm apparaîtra 1000 fois trop grand (sinon, ``scale="0.001
0.001 0.001"`` dans la balise ````) ;
- origine et orientation du maillage cohérentes avec la frame du link ;
- pour la collision, préférer une version **simplifiée** (voire garder
les primitives boîte/cylindre actuelles) : Gazebo calcule les contacts
dessus, la finesse ne sert à rien.
Visualisation
-------------
Le launch ``display.launch.py`` permet de visualiser le modèle :
.. code-block:: bash
source ros2/install/local_setup.bash
ros2 launch ratbot_description display.launch.py
Il démarre ``robot_state_publisher``, ``joint_state_publisher_gui`` et
RViz. L'argument ``gui:=false`` ne lance que ``robot_state_publisher``
(utile sur le robot, sans écran).
Dans RViz, ajouter un affichage *RobotModel* (topic
``/robot_description``) et choisir ``base_footprint`` comme *Fixed Frame*.
Dépendances : ``xacro``, ``robot_state_publisher``, et pour la
visualisation ``joint_state_publisher_gui`` et ``rviz2``.