Simulation et vision de ROS2
22 Modèle URDF
22 Modèle URDF (URDF Modeling)
22.1 Vue d'ensemble d'URDF
L'URDF dans ROS 2 est un document de description de modèle robotique préparé en utilisant XML pour définir les liens (link), les articulations (joint), les formes géométriques, l'inertie de masse, les coordonnées et les informations sur les modèles de collision et de visualisation. C'est la base des coordonnées TF du robot dans ROS 2, de la simulation Gazebo/Ignition, de la visualisation RViz, de la planification de mouvement, etc. En bref, l'URDF est le fichier de modèle standard que ROS 2 utilise pour « montrer au système à quoi ressemblent les robots, comment les composants se connectent ».
22.1.1 Qu'est-ce qu'un URDF
L'URDF (Unified Robot Description Format) est un fichier de description de robot au format XML qui définit la géométrie, les articulations, l'inertie, etc. des robots.
Plain Text Structure du fichier URDF :
robot.urdf
Éléments racine
link, définition de lien
Visual, visualisation
Collision, collision
Inertial, inertie
# définition d'articulation Lien parent Lien enfant Transformation
22.2 Composition des robots
Lors de la modélisation des robots, nous devons d'abord nous familiariser avec leur composition globale et les paramètres clés. En général, les robots se composent principalement de quatre composants : structure matérielle, système d'entraînement, système de capteurs et système de contrôle. Les types de robots courants sur le marché, qu'il s'agisse de robots mobiles ou de bras robotiques, peuvent être démantelés et analysés selon ces quatre modules constitutifs, posant ainsi les bases de la modélisation ultérieure.

La structure matérielle est un dispositif solidement visible tel que châssis, coque, presse électrique, etc. ;
Le système d'entraînement est un dispositif qui peut entraîner l'équipement à un usage normal, tel qu'une commande électrique, un système de gestion de l'alimentation, etc. ;
Les systèmes de détection, y compris les codeurs sur les composants électriques, les IMU embarqués, les caméras installées, les radars, etc., permettent aux robots de percevoir leur propre état et l'environnement extérieur ;
Le système de contrôle est le principal véhicule de notre processus de développement, généralement la plate-forme de calcul Raspberry Pi, l'ordinateur, etc., et les systèmes d'exploitation et applications internes.

Le processus de modélisation robotique est, de manière similaire, le processus de description de chaque partie du robot en termes de langage de modélisation, et de sa combinaison.

22.3 Syntaxe URDF
22.3.1 Description du link
Les balises sont utilisées pour décrire l'apparence et les propriétés physiques d'une partie de la carcasse d'un robot, y compris la taille, la couleur, la forme, les propriétés physiques telles que la masse, la matrice d'inertie, les paramètres de collision, etc.
Par exemple, ce lien de bras mécanique est décrit comme suit :

Le name dans la balise link est le nom du lien, et nous pouvons le personnaliser pour qu'il soit utilisé à l'avenir lorsque le link est connecté.
La section à l'intérieur du link décrit l'apparence des robots, telle que :
C'est le fichier stl, qui ressemble au vrai robot.
Cela représente la déviation des coordonnées par rapport à la position initiale, avec un décalage horizontal de x, y, z, et une rotation roll, pitch, yaw, qui sont tous 0 si aucune déviation n'est requise.


La deuxième partie, décrivant les paramètres de collision, semble être identique à la précédente, et présente également une plus grande différence.

Une partie de l'accent est mis sur la description de l'apparence des robots, qui est l'effet visuel ;

En partie, elle décrit l'état du mouvement robotique, comme la façon dont le contact robotique avec l'extérieur compte comme une collision.

Dans ce modèle robotique, la partie bleue est décrite, et dans le processus de contrôle physique, cette apparence complexe est plus exigeante lors du calcul de la détection de collision, et afin de simplifier le calcul, nous avons simplifié le modèle utilisé pour la détection de collision pour la forme cylindrique de la boîte verte, qui est la forme décrite à l'intérieur. Il en va de même pour la déviation du système de coordonnées, qui peut décrire la déviation du cœur rigide.
Dans le cas des robots mobiles, le link peut également être utilisé pour décrire la carrosserie, les roues, etc.
22.3.2 Description du joint
Ce n'est que lorsque les liens du modèle robotique sont enfin reliés par les articulations qu'ils peuvent générer un mouvement relatif.
Il existe six types de mouvement d'articulations dans l'URDF.
continuous, décrivant le mouvement de rotation, peut tourner indéfiniment autour d'un axe, comme une roue dans une voiture, qui est de ce type.

La différence entre revolute, qui est aussi une articulation pivotante, et le type continuous est qu'elle ne peut pas tourner indéfiniment, mais a plutôt des limitations d'angle, comme deux liens dans un bras mécanique, qui appartiennent à ce type de mouvement.
prismatic, qui est une articulation glissante, peut être lissée le long d'un axe particulier et a la limite de son emplacement, comme c'est le cas avec une puissance linéaire générale.

Fixed, articulation fixe, est la seule articulation qui ne permet pas le mouvement, bien qu'elle soit toujours utilisée plus fréquemment, comme la caméra, qui est installée sur les robots et dont la position relative ne change pas, et la connexion utilisée à ce moment est Fixed.
Floating sont des articulations flottantes, et la sixième Planar sont des articulations plates, qui sont relativement peu utilisées.
Dans le modèle URDF, chaque link utilise une description du contenu xml, telle que le nom de l'articulation, quel type d'exercice.
Balise parent : décrit le lien parent ;
Balise child : description d'un sublien, qui se déplace par rapport au lien parent ;
origin : la relation entre les deux coordonnées, le vecteur rouge sur l'image, peut être comprise comme la façon dont les deux coordonnées doivent être installées ensemble ;
axis désigne le vecteur unitaire de l'axe d'articulation, comme z égal à 1, ce qui signifie que le mouvement de rotation est effectué dans le bon sens autour de l'axe z ;
limit représente certaines des limitations du mouvement, telles que l'emplacement minimum, l'emplacement maximum et la vitesse maximale.
22.4 Modèle robotique complet
Finalement, toutes les balises link et joint complètent la description et la combinaison de chaque partie du robot, toutes dans une balise robot, et forment un modèle robotique complet.
Donc, lorsque vous regardez un modèle URDF particulier, vous regardez les détails de chaque morceau de code, et vous cherchez le link et le joint, et vous regardez de quoi le robot est fait, et vous connaissez l'image complète, et vous regardez les détails.
22.5 Importation du bras mécanique SO-ARM


22.5.1 Cloner les dépôts :

cd ~/workspaces/src
git clone https://github.com/brukg/SO-100-arm.git22.5.2 Projets de compilation
# Install dependencies
cd ..
rosdep install --from-paths src --ignore-src -r -y
# Build the package
colcon build --packages-select so_100_arm22.5.3 Voir le bras mécanique dans Gazebo
# Refresh environment variables
source install/setup.bash
ros2 launch so_100_arm rviz.launch.py22.6 Étapes suivantes
Simulation Gazebo - Apprendre la simulation physique
2.24 Aperçu de caméra - Apprendre la configuration de caméra
23 Simulation Gazebo
23 Simulation Gazebo
23.1 Vue d'ensemble de Gazebo

Gazebo est une plateforme de simulation robotique couramment utilisée où des environnements virtuels peuvent être construits pour simuler le mouvement robotique, les données des capteurs et les interactions physiques dans le monde réel (par exemple gravité, collision, frottement, etc.). Il prend en charge l'importation de modèles robotiques (URDF/SDF) et peut simuler une variété de capteurs, tels que des caméras, des radars laser et IMU, et est donc fréquemment utilisé dans le développement, le débogage et le test d'algorithmes robotiques, en particulier dans l'écologie ROS/ROS2. Grâce à Gazebo, les développeurs peuvent rapidement valider des fonctions telles que le contrôle, la navigation et le SLAM sans dépendre du matériel réel, ce qui réduit considérablement les coûts et les risques de développement.
23.1.1 Qu'est-ce que Gazebo ?
Plain Text Structure de simulation Gazebo :
Gazebo Server
Moteur physique (ODE/Bullet) (OGRE) plugin
Interface ROS 2
cmd_vel odom scan

23.2 Opérations d'installation
Installer gazebo via la commande apt
sudo apt install ros-${ROS_DISTRO}-ros-gzDémarrer gazebo avec la commande suivante
# ros2 launch ros_gz_sim gz_sim.launch.pyLe modèle est le suivant :
23.3 Étapes suivantes
1.24 Aperçu de caméra - Apprendre la configuration de caméra
2.25 Calibration de caméra - Apprendre la calibration de caméra
24 Aperçu de caméra
24 Aperçu de caméra
24.1 Compilateur de paquet fonctionnel
cd /opt/seeed/development_guide/12_llm_offline/seeed_ws
colcon build
source install/setup.bash24.2 Lancer la caméra.
Démarrer la caméra.
ros2 run camera camera_usbVoir les nœuds et les sujets
24.3 Aperçu d'image
Voir l'image de la caméra en utilisant rqt : rqt → Plugins → Visualization → Image View
rqt24.4 Codes clés
import rclpy
from rclpy.node import Node
from sensor_msgs.msg import Image
from cv_bridge import CvBridge
import cv2
class CameraNode(Node):
def __init__(self):
super().__init__('camera_usb')
self.publisher = self.create_publisher(Image, 'image_raw', 10)
self.bridge = CvBridge()
self.cap = cv2.VideoCapture(0)
if not self.cap.isOpened():
self.get_logger().error('Unable to open camera')
return
self.timer = self.create_timer(0.05, self.timer_callback)
def timer_callback(self):
ret, frame = self.cap.read()
if ret:
image_msg = self.bridge.cv2_to_imgmsg(frame, encoding="bgr8")
self.publisher.publish(image_msg)
else:
self.get_logger().warn('Failed to capture image')
def main(args=None):
rclpy.init(args=args)
node = CameraNode()
rclpy.spin(node)
node.cap.release()
rclpy.shutdown()
if __name__ == '__main__':
main()24.5 Étapes suivantes
1.25 Calibration de caméra - Apprendre la calibration de caméra
- 26 Vision RA - Apprendre la vision RA
25 Calibration de caméra
Calibration de caméra
25.1 Résumé de la calibration de caméra
25.1.1 Qu'est-ce que la calibration de caméra


La calibration de caméra est le processus de détermination des noyaux internes (longueur focale, point principal, facteur d'aberration) et externes (position, attitude) de la caméra.
Les caméras sont des dispositifs qui utilisent l'imagerie par lentille, et des aberrations géométriques sont introduites en raison des propriétés physiques des lentilles. La calibration consiste à décrire et à compenser ces anomalies grâce à des modèles mathématiques.
Plain Text Détails des paramètres de la caméra :
Intrinsics - Propriétés optiques inhérentes aux caméras :
- longueur focale
- longueur focale de l'objectif en unités de pixels, détermine la taille du champ de vision
- point principal
- intersection de l'axe avec le plan image, généralement près du centre de l'image Distortion coefficients (coefficients de distorsion)
- Distorsion radiale (k1, k2, k3) - distorsion en barillet/coussinet (p1, p2)
Extrinsics - Position de la caméra dans les coordonnées mondiales : Rotation Matrix (matrice de rotation)
- Description de la rotation des coordonnées de la caméra par rapport aux coordonnées du monde
- Vecteur de translation (translation vector: 3x1)
- Description du déplacement des coordonnées de la caméra du point d'origine aux coordonnées du monde
Noyaux internes de la caméra (Camera Matrix) : [fx 0 cx] K = [0 fy cy] (3x3 matrix) [0 0 1]
25.1.2 Pourquoi calibrer
| Objectif | Annotations | Exigences de précision |
|---|---|---|
| Plage visuelle | Convertir la distance en pixels en distance réelle | Haute précision |
| Reconstruction 3D | Informations 3D précises restaurées, Structure from Motion | Haute précision |
| Collaboration de caméra | Fusion d'images multi-caméras, caméra panoramique | Précision moyenne-élevée |
| Navigateur robotique | Perception environnementale précise, odométrie visuelle. | Haute précision |
| Détection d'objet | Corriger le bord de l'objet et augmenter la précision de détection | Précision moyenne |
| AR/VR | Le contenu virtuel s'aligne précisément avec le monde réel. | Haute précision |
25.1.3 Type de distorsion de caméra
Plain Text Types de distorsion :
- Distorsion radiale (Radial Distortion)
Distorsion en barillet (Barrel Distortion)
Distorsion en coussinet (Pincushion Distortion)
- Distorsions tangentielles (Tangential Distortion) Le plan de l'image n'est pas entièrement parallèle au plan de l'objectif
25.1.4 Principes de la calibration
La calibration de caméra est basée sur un modèle de caméra à sténopé, qui résout les paramètres de la caméra par la relation connue entre les coordonnées du monde (un angle sur la plaque de calibration) et les coordonnées de l'image (positions des pixels détectés).
Plain Text Processus de calibration :
coordonnées du monde (3D) → externes → coordonnées de la caméra (3D) → internes → projection 2D [X,Y,Z,1] [x,y,z] K [u,v,1]
Erreur de reprojection : Indicateur de qualité de calibration, calcul des écarts d'erreur aux points de reprojection Plus la valeur est petite, meilleure est la calibration.
25.2 Installation des outils de calibration
Installer le package de caméra
sudo apt install ros-humble-camera-calibration25.3 Téléchargement du quadrillage
Télécharger le quadrillage en damier depuis l'adresse suivante
Quadrillage en damier et imprimez-le.
25.4 Exécuter le marquage de la caméra

# For 8x6 checkerboard with 25mm squares
ros2 run camera_calibration cameracalibrator --size 8x6 --square 0.025 \
--ros-args --remap image:=/camera/color/image_raw --remap camera:=/camera/colorNote : --size 8x6 fait référence au nombre d'angles internes (8x6 = 48 angles, correspondant à des grilles 9x7) --square 0.025 signifie taille du carré en millimètres (25 mm) La caméra mobile capture des images sous différents angles
Recueille des images sous différents angles, calcule automatiquement les paramètres de la caméra et conserve les données de marquage dans des info-bulles.
25.5 Étapes suivantes
À l'achèvement de l'étude de calibration de caméra :
- 26 Vision RA - Apprendre la vision RA et les marqueurs ARUco