How to Use Ros Navigation Stack for Dynamic Obstacle Avoidance
Table of Contents
Comprendre la pile de navigation ROS pour robots autonomes
La pile de navigation du système d'exploitation robot (ROS) demeure la norme de facto pour permettre aux robots mobiles de se déplacer de façon autonome dans des environnements inconnus ou semi-structurés. Des gestionnaires de planchers d'entrepôts à l'aide de flottes de chariots de livraison aux chercheurs universitaires qui testent de nouveaux algorithmes de planification de trajectoire, la pile fournit un cadre solide qui fusionne les données de capteur, les planificateurs de trajectoire et les contrôleurs de mouvement. Éviter les obstacles dynamiques—la capacité de détecter et de naviguer en temps réel des objets en mouvement (personnes, autres robots, véhicules) sans s'arrêter ni s'écraser. Cet article fournit un guide approfondi pour configurer la pile de navigation ROS pour éviter les obstacles dynamiques, avec des explications pratiques des paramètres et des stratégies d'ajustement adaptées aux étudiants, aux éducateurs et aux développeurs de robotique intermédiaire.
Composantes essentielles de la pile de navigation
Avant de plonger dans l'évitement dynamique, il aide à comprendre l'architecture de pile et le rôle de chaque composant. La pile est construite sur plusieurs nœuds et bibliothèques qui communiquent via des sujets ROS. Le principal orchestre est le nœud , qui s'inscrit aux sujets de but et gère la planification globale et locale.
- Planificateur mondial – Calcule un chemin à longue portée du robot de la pose du courant jusqu'au but. Les implémentations communes incluent NavFn et CarrotPlanner. Le planificateur mondial fonctionne avec une carte de coûts globale statique ou partiellement mise à jour.
- Planificateur local – Exécute des commandes de mouvement à court terme tout en respectant les données de capteur en temps réel. Les deux planificateurs locaux les plus populaires pour l'évitement dynamique sont les Approche dynamique de la fenêtre (DWA) et les Bande élastique temporelle (TEB) Ils recalculent continuellement les commandes de vitesse pour éviter les obstacles qui apparaissent soudainement.
- Cartes de coûts – Cartes de grille en couches qui attribuent les probabilités d'occupation et les coûts aux cellules. carte des coûts globale est utilisé par le planificateur mondial; plan des coûts locaux est utilisé par le planificateur local. Chaque carte de coûts peut avoir plusieurs couches (carte statique, couche d'obstacle, couche de gonflage, etc.).
- Sources des capteurs – Les scanners laser (LIDAR), les caméras de profondeur (RGB‐D), ou les sonars publient des données sur les sujets ou . La couche d'obstacle traite ces messages pour marquer les obstacles dans la carte de coûts.
- Comportement avec récupération – Des filets de sécurité déclenchés lorsque le robot est coincé. Ils vont de la rotation en place à la compensation des cartes de coûts et à la tentative de replanification.
La conception modulaire de la pile vous permet d'échanger des planificateurs ou des configurations de planning sans toucher à la commande de moteur de bas niveau. Pour éviter les obstacles dynamiques, le planificateur local et la couche d'obstacles sont les deux modules les plus importants à régler.
Prérequis et aménagement de l'environnement
Pour suivre les exemples, vous devez avoir un environnement ROS de travail (ROS Noetic ou ROS2 Humble recommandé) et un robot avec entraînement différentiel ou omnidirectionnel. Vous pouvez tester avec un robot simulé à Gazebo avant de vous déplacer sur le matériel. La pile de navigation elle-même est installée via:
Nous supposons que vous avez une description URDF robot, une carte statique de l'environnement (pour la carte des coûts globale), et un capteur de travail publiant des données d'obstacles. pas Il faut une carte entièrement statique; la pile peut fonctionner en mode -Exploration en utilisant seulement des couches de capteur, mais avoir un plan de plancher améliore l'efficacité de planification globale.
Configuration de l'évitement dynamique des obstacles
Les obstacles dynamiques entraînent des changements rapides dans la carte de coût. La pile doit réagir en millisecondes pour éviter les collisions. Les sous-sections suivantes passent par les fichiers et paramètres de configuration clés.
Intégration des capteurs et calques de cartes de coûts
Toutes les données d'obstacle entrent dans la carte des coûts par l'intermédiaire de la couche d'obstacle. Créer un fichier YAML (p. ex. ) qui définit les couches et les paramètres du capteur. Une configuration minimale mais efficace d'évitement dynamique ressemble à ceci :
Paramètres clés pour les environnements dynamiques:
- la portée des obstacles – Distance maximale (en mètres) à laquelle les relevés de capteur sont considérés comme ajoutant des informations d'obstacle.
- raytrace range – Distance utilisée pour effacer l'espace libre (modèle sonar). Une plus grande valeur aide à supprimer les obstacles fantômes, mais peut manger des cycles CPU.
- inflation rayon – Augmente le coût autour des obstacles. Pour les objets dynamiques, gardez-le entre 0,4 et 0,7 m pour laisser une marge de sécurité sans rendre le robot trop timide.
- marquage et clairance – Les deux devraient être pour le capteur primaire afin que les obstacles apparaissent et disparaissent au fur et à mesure qu'ils se déplacent dans le champ de vision laser.
Si vous utilisez plusieurs capteurs (par exemple, LIDAR + caméra de profondeur), ajoutez chacun comme source d'observation séparée. Utilisez le paramètre parcimonieusement : pour les obstacles dynamiques, vous voulez qu'ils s'éclaircissent rapidement au lieu de s'attarder dans la carte de coûts.
Sélection et configuration du planificateur local
Le planificateur local reçoit les mises à jour et sorties du plan global et des capteurs. Deux choix forts pour éviter les dynamiques sont DWA et TEB.
DWA (Approche de la fenêtre dynamique) – Utilise l'échantillonnage de l'espace de recherche de vitesse : il simule des milliers de candidats à la trajectoire pour un horizon court () et choisit le meilleur qui évite les obstacles tout en se dirigeant vers le but.
- : 1,5 à 2,5 secondes. Des horizons plus longs provoquent des réactions lentes; les plus courts peuvent être scindés.
- : 0.10–0.25 m. Des valeurs plus petites forcent le robot à être précis, mais peuvent provoquer une oscillation proche des buts dynamiques.
- : 0,1–0,5 rad.
- et : Réglez avec prudence le matériel. Pour éviter les mouvements dynamiques, les vitesses plus basses donnent plus de temps de réaction.
- : 0,025 m. Les étapes de simulation plus fines produisent des mouvements plus lisses mais augmentent la charge de calcul.
TEB (bande élastique temporelle) – Optimise une trajectoire en tant que bande élastique soumise à des contraintes d'obstacles. Il gère nativement les obstacles dynamiques mieux que DWA car il modélise explicitement le temps et exploite l'optimisation non linéaire.
- : 0,2–0,4 m. La distance minimale que le robot doit maintenir des obstacles.
- : vrai. Intégre les informations de la carte des coûts directement.
- : 0,5–1,0 m. Un espacement plus étroit aide le planificateur local à suivre les virages serrés autour des obstacles en mouvement.
- : 1.0–5.0. Ajuster pour établir la priorité de la vitesse sur la distance de dégagement des obstacles.
Pour les deux planificateurs, activer replanification dynamique en réglant à true et à 1–2 Hz. Cela force le planificateur mondial à recalculer si le planificateur local dérive trop loin du chemin d'origine.
Comportements de récupération pour les environnements dynamiques
Lorsqu'un obstacle mobile bloque le chemin entier du robot (par exemple, une personne debout pendant plusieurs secondes), le robot ne devrait pas simplement s'asseoir là. Le noeud déclenche des comportements de récupération en séquence.
- Effacer la carte des coûts – Enlève les marques d'obstacle qui peuvent être inexistantes (bruit du capteur).
- Récupération de rotation – Rotation 360° pour scanner l'environnement et mettre à jour la carte des coûts.
- Reculez – Un mouvement inverse court pour libérer le robot des points serrés.
Pour éviter les effets, vous pouvez réduire le délai avant les déclencheurs de récupération (paramètre : true). Utilisez pour permettre au robot de tourner lorsqu'il est bloqué. Certaines équipes implémentent même une récupération personnalisée qui envoie un -nudgge -en-tête lent en mettant à jour la carte des coûts à haute fréquence.
Paramètres d'écoute pour la performance réelle-mondiale
Les stratégies d'accord suivantes aident à adapter la pile à votre scénario spécifique. Toujours tester en simulation d'abord, puis sur le vrai robot avec des limites de sécurité appliquées.
Taux de mise à jour des capteurs et fusion
Pour un robot se déplaçant à 0,5 m/s, la position de l'obstacle se déplace d'environ 5 cm entre les scans, ce qui est acceptable pour la plupart des planificateurs. Si vous utilisez une caméra de profondeur à 30 Hz, vous obtenez des mises à jour plus rapides mais pouvez introduire du bruit. Isolez le pilote du capteur des processus lourds du CPU. Utilisez le paramètre dans la couche d'obstacle pour contrôler la durée d'un point d'obstacle qui reste dans la carte de coûts avant d'être effacé. Pour des environnements très dynamiques, réglez à 0,5 à 1,0 secondes.
Si vous fusionnez plusieurs sources de capteurs, assurez-vous que leurs cadres de coordonnées sont correctement publiés dans l'arbre TF. Les cadres mal alignés produisent de faux obstacles. Valider en utilisant et l'affichage --PointCloud2-.
Inflation et compensation du plan de coûts
L'inflation ajoute un gradient de coût autour des obstacles, encourageant le planificateur à garder la distance. inflation rayon et facteur de calcul des coûts Un facteur de 10 crée un gradient raide, tandis que 3-5 donne une pente plus douce. Pour les obstacles dynamiques, un gradient plus raide (coût plus élevé facteur d'échelle) réduit les chances du robot de couper près d'un objet en mouvement.
La compensation est également importante. L'algorithme de rayontrace dans la couche d'obstacle supprime l'espace libre qui était précédemment marqué comme occupé. Si votre capteur souffre de réflexions spéculaires (par exemple, le verre), vous pouvez voir des obstacles apparaître et disparaître. Augmenter à 4-5 m pour forcer la compensation plus agressive, ou ajouter une couche de -voxel avec un tracé des rayons 3D pour une meilleure manipulation des obstacles surplombants.
Ajustements de poids du planificateur local
La plupart des planificateurs locaux exposent des poids de critères multiples.
- échelle de pdist – Poids pour rester près du chemin global. Abaisser cela donne au robot plus de liberté pour contourner les obstacles dynamiques.
- échelle de gdist – Poids pour faire progresser vers l'objectif. Gardez haut pour éviter l'errance sans but.
- occdist échelle – Poids pour éviter les obstacles. Augmenter pour prioriser la sécurité sur le chemin suivant.
Une séquence de réglage courante : commencez par , , , puis augmentez l'occdist scale de 0,05 jusqu'à ce que le robot cesse de se brosser contre les obstacles. Pour TEB, ajustez (habituellement autour de 100–500) et (si vous utilisez le avec le support dynamique des obstacles à partir des messages).
Essais et validation
Utilisez un environnement par étapes d'abord: placez un obstacle mobile unique (par exemple, une personne marchant à 0,5 m/s perpendiculairement au chemin du robot). Observez la réaction du robot en rviz. La carte des coûts locaux devrait montrer l'obstacle apparaissant et se débarrassant rapidement. La trajectoire prévue devrait s'écarter sans heurt.
Mesures communes à mesurer:
- Temps de réorganiser - Ça devrait être moins de 200 ms.
- Délai minimal – Assurez-vous que le robot ne passe jamais plus près du rayon de gonflage.
- Taux de succès des objectifs – Plus de 20 parcours avec des vitesses aléatoires d'obstacle, le robot devrait atteindre son objectif au moins 90% du temps.
Si vous avez des échecs, enregistrez les fichiers de sac avec et rejouez-les pendant que vous accordez les paramètres hors ligne.
Pièges et dépannage courants
- Les obstacles persistent dans la carte des coûts – Vérifiez que est activé pour toutes les sources d'observation. Réduire .
- Le robot oscille près des obstacles – Augmenter ou réduire dans les ADF. Pour TEB, augmenter .
- Surcharge du processeur – Baisser la fréquence de mise à jour de la carte des coûts locaux ( de 5 Hz à 2 Hz pendant les segments dynamiques) ou réduire l'horizon de simulation.
- Plan mondial non cohérent – S'assurer que la carte statique est correctement alignée avec le monde réel. La replanification dynamique avec un haut aide à compenser les erreurs de carte.
- Le robot s'inverse inutilement – Examiner les comportements de récupération. Désactiver le comportement ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Expansion avec détection dynamique personnalisée
La couche d'obstacle intégrée de la pile traite tous les objets en mouvement comme des obstacles statiques qui apparaissent et disparaissent chaque cycle. Si vous voulez éviter les prédictions (p. ex. estimer la vitesse d'une personne et intercepter), vous devez publier des messages d'obstacle personnalisés avec des informations sur la vitesse. Le ne suit pas les vitesses de façon intrinsèque, mais vous pouvez écrire un noeud qui s'inscrit à , exécute un algorithme de regroupement (comme DBSCAN), estime la vitesse et publie des tableaux d'obstacle filtrés. Le supporte les obstacles dynamiques via le sujet . couches de navigation sociale trouvés dans des paquets comme pour les cartes de coûts 4D (espace+temps).
Pour un tutoriel pratique, consultez le site Web Tutoriels de navigation ROS et les Documentation sur les planificateurs locaux de la DWA pour les descriptions de paramètres. Si vous êtes en transition vers ROS2, la Projet Nav2 offre des concepts similaires avec une API redessiné et une meilleure gestion du cycle de vie.
Conclusion
L'évitement dynamique des obstacles avec le ROS Navigation Stack est réalisable grâce à une intégration attentive des capteurs, à un réglage des couches de coûts et à une sélection de planificateurs locaux. Commencez par un simple planificateur LIDAR et DWA, puis introduisez progressivement plusieurs capteurs et planificateurs avancés comme TEB à mesure que la complexité de l'environnement de votre robot augmente. La conception paramétrique de la pile vous permet d'itérer rapidement dans la simulation, puis validez sur le vrai robot à l'aide des mêmes fichiers de configuration.