How to Program Autonomous Robots Using Python and Ros
Table of Contents
Le guide complet de programmation des robots autonomes avec Python et ROS
En combinant la simplicité de Python et la puissance du Robot Operating System (ROS), les développeurs peuvent programmer des robots qui perçoivent leur environnement, prennent des décisions en temps réel et naviguent dans des espaces complexes et non structurés sans intervention humaine. Ce guide vous guidera dans tout le processus, depuis la mise en place d'un environnement de développement jusqu'à la construction d'une pile de navigation autonome, en utilisant Python et ROS.
Pourquoi Python et ROS pour la robotique
Python est devenu le langage de script de facto en robotique en raison de sa lisibilité, de son écosystème de bibliothèque étendu et de son solide soutien communautaire. Il permet de prototyper rapidement des algorithmes pour la perception, la planification et le contrôle. noeuds. Ensemble, Python et ROS réduisent la barrière d'entrée pour la construction de systèmes robotiques avancés qui peuvent fonctionner à la fois sur des plates-formes simulées et du matériel physique.
ROS n'est pas un système d'exploitation au sens traditionnel; c'est un intergiciel qui standardise la façon dont différentes parties d'un robot partagent des données. En utilisant des sujets, des services et des actions ROS, vos scripts Python peuvent publier des commandes motrices, s'abonner aux flux de l'appareil photo et appeler des routines de navigation complexes avec un minimum de frais généraux.
Mettre en place votre environnement de développement
Avant d'écrire votre premier programme robot, vous avez besoin d'un environnement correctement configuré. ROS est officiellement pris en charge sur Ubuntu Linux, bien que les versions communautaires existent pour d'autres plateformes. Pour un workflow robuste, installer ROS sur Ubuntu (22.04 LTS est un choix stable pour ROS 2 Humble, ou vous pouvez utiliser ROS 1 Noetic si vous avez besoin de paquets d'héritage).
Installation du ROS
Commencez par ajouter le dépôt ROS à votre système, mettre à jour l'index des paquets et installer la distribution ROS souhaitée. Par exemple, sur Ubuntu 22.04:
Après l'installation, source le script de configuration ROS () et l'ajouter à votre .bashrc Il s'initialise donc automatiquement dans de nouveaux terminaux. Guide d'installation ROS fournit des instructions étape par étape pour chaque distribution supportée.
Installation des paquets Python ROS
ROS fournit des bibliothèques Python telles que rospy (pour le ROS 1) ou C'est vrai. (pour ROS 2) qui permettent aux scripts Python d'interagir avec le graphique ROS. Installez-les via ou . Pour ROS 2, le paquet est habituellement inclus avec l'installation du bureau, mais vous pouvez vérifier avec . numpy ou opencv-python, utilisez . Cette configuration vous permet de traiter les données des capteurs et d'exécuter des modèles d'apprentissage automatique directement dans vos scripts robots.
Concepts de base : Noeuds, sujets, services et actions
Les programmes ROS sont organisés comme un graphique de noeuds. Chaque noeud est un processus qui remplit une fonction spécifique, comme la lecture d'un capteur lidar ou de moteurs de roue de commande. Thèmes ou par l'offrande services (demande/réponse) et Mesures prises La compréhension de ces quatre abstractions est essentielle pour construire un comportement autonome.
Édition et abonnement à des sujets
Les sujets sont appelés bus sur lesquels les nœuds échangent des messages. Par exemple, un noeud de caméra peut publier des images à la /caméra/image raw sujet, tandis qu'un noeud de navigation s'inscrit à ce sujet pour détecter les obstacles. En Python, vous créez un éditeur comme ceci:
Et un abonné comme:
Ici, Twist la vitesse de contrôle des messages, et LaserScan vos fonctions de callback peuvent traiter les données entrantes en temps réel, formant le fondement de comportements réactifs.
Utilisation des services pour les tâches ponctuelles
Les services permettent à un nœud de demander une action spécifique d'un autre noeud et d'obtenir une réponse. Par exemple, un service qui définit une pose de robot : le client envoie une position de but, et le serveur renvoie le succès ou l'échec. En Python, vous pouvez appeler un service avec et attendre le résultat. Les services sont idéaux pour les opérations qui ne nécessitent pas de mises à jour continues.
Actions pour un comportement complexe et public
Les actions sont similaires aux services mais fournissent des retours pendant l'exécution. Elles sont utilisées pour des objectifs de navigation, des mouvements d'armement, ou toute tâche à plusieurs étapes. actionlib bibliothèque (ROS 1) ou le serveur d'action intégré (ROS 2) vous permet de définir un objectif, de recevoir des retours périodiques et d'obtenir un résultat final. Pour la navigation autonome, les actions sont la façon standard d'envoyer une destination à la Base de déplacement ou NV2 système.
Écrire votre premier comportement autonome
Maintenant que l'environnement et les concepts sont clairs, vous pouvez construire un script autonome simple qui fait avancer un robot jusqu'à ce qu'il détecte un obstacle à moins de 0,5 mètre, puis se détourne. Ceci démontre le modèle éditeur-abonné dans un scénario réel.
Exemple : Évitement d'obstacle réactif
Dans ROS 2, vous créeriez un nœud Python qui s'abonnerait au sujet du scanner laser robotisé et publierait des commandes de vitesse. La boucle centrale pourrait ressembler à ceci:
Ce simple nœud tourne à la vitesse des messages de balayage laser. Il vérifie chaque balayage pour la distance minimale; si trop proche, il tourne, sinon il avance. C'est le cœur d'un comportement autonome réflexif, et vous pouvez l'étendre avec un contrôle proportionnel ou plusieurs capteurs.
Faire des robots naviguer de manière autonome
Alors que l'évitement réactif fonctionne dans des environnements simples, la véritable autonomie nécessite la cartographie, la localisation, la planification de chemin, et le contrôle. pile de navigation (move base, amcl, gmapping) est bien établi; pour ROS 2, l'équivalent est NV2- Oui.
Cartographie de l'environnement
Pour naviguer, un robot doit d'abord construire une carte. gmapping colis (ROS 1) ou boîte à outils (ROS 2) effectue SLAM (Simultaneous Localization and Mapping) à l'aide de caméras lidar ou de profondeur. Lorsque vous conduisez le robot autour (téléopération ou exploration scénique), le paquet construit une grille d'occupation 2D. Vous pouvez enregistrer cette carte avec .
Localisation avec AMCL
Une fois qu'une carte existe, le robot doit savoir où elle se trouve sur cette carte. L'autorité compétente de l'État membre d'origine est l'autorité compétente de l'État membre d'origine. (Adaptive Monte Carlo Localisation) utilise des filtres à particules pour estimer la pose du robot en fonction des relevés de capteur et de l'odométrie. soumission et l'utiliser pour la prise de décision de niveau supérieur.
Planification et navigation des voies
Les Base de déplacement (ROS 1) ou NV2 (ROS 2) paquet prend une pose de but et planifie un chemin, en évitant les obstacles en cours de route. Vous pouvez envoyer des objectifs en utilisant un client d'action simple dans Python:
Votre nœud Python peut attendre les retours et réagir si la navigation échoue (par exemple, bloqué, bloqué).Cela constitue la base de missions autonomes qui incluent le suivi du point de cheminement, la patrouille ou les tâches de livraison.
Simulation de votre robot avant déploiement
Tester sur un vrai robot peut être coûteux et long. ROS s'intègre étroitement avec Gazebo, un simulateur de haute fidélité qui modélise la physique, les capteurs et les environnements. Vous pouvez exécuter vos scripts Python inchangés contre un robot simulé, valider le comportement avant de clignoter le code sur le matériel. ros pkgs et lancez un fichier mondial. Vos nœuds s'abonneront à /scan (simulée lidar) et publier à C d Comme sur un vrai robot.
Sujets avancés : Perception et apprentissage automatique
Au-delà des capteurs de base, les robots autonomes modernes utilisent des caméras et un apprentissage profond pour la détection d'objets, la segmentation sémantique et l'odométrie visuelle. Ouvrir le CV et PyTorch ou TensorFlow par exemple, vous pouvez vous inscrire à un sujet de caméra, exécuter un modèle YOLO pré-entraînement et publier des boîtes de délimitation sous forme de messages ROS. cv bridge le paquet convertit entre les messages d'image ROS et les images OpenCV.
Vous pouvez également implémenter SLAM avec des fonctionnalités visuelles en utilisant B. B. SLAM2 ou RTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRTRT. Ces paquets fournissent des enveloppes ROS, permettant à votre code Python de recevoir des poses et des cartes 3D. Pour le contrôle, les agents d'apprentissage de renforcement (p. ex. DQN ou PPO) peuvent être formés à la simulation et déployés via des serveurs d'action ROS.
Meilleures pratiques pour la production-repos code robot
- Utiliser les fichiers de lancement: Au lieu de démarrer manuellement des nœuds, créez un .lancement.py fichier qui démarre tous les nœuds requis, définit les paramètres et remaps sujets.
- Paramètre tout: Conservez les constantes comme les vitesses, les seuils et les décalages de capteur dans les fichiers YAML, chargés via les paramètres ROS.
- Gérez les erreurs avec grâce: Utilisez des blocs d'essai/sauf dans les callbacks de nœuds, implémentez des timeouts pour les actions et log avertis .
- Essai avec essais unitaires: ROS prend en charge Python essai unitaire pour les nœuds; simuler les entrées de capteur et affirmer les sorties attendues.
- Contrôle de version de votre espace de travail ROS: Utilisez Git pour votre Src/ répertoire et maintenir un rosdep fichier pour les dépendances. Cela assure la reproductibilité entre les membres de l'équipe et les robots.
Tout connecter: une mission autonome complète
Imaginez programmer un robot qui patrouille un entrepôt. Vos nœuds Python : (1) initialiseraient SLAM pour construire une carte s'il n'y en a pas, (2) charger la carte et démarrer AMCL pour la localisation, (3) recevoiraient une liste de points de repère à partir d'un fichier YAML, (4) envoyeraient chaque point de cheminement à Nav2 séquentiellement, surveillerait le succès/échec, (5) si un obstacle bloque le chemin pendant trop longtemps, appeler un service pour recalibrer ou demander de l'aide humaine. Toute cette logique peut être écrite dans un seul noeud Python qui coordonne plusieurs modules ROS. Didacticiels ROS 2 fournir d'excellents exemples pour chaque étape.
Conclusion
En maîtrisant les nœuds, les sujets, les services et les actions, vous pouvez construire des robots qui voient, réfléchissent et se déplacent de leur propre chef. Commencez par des comportements réactifs simples, progressez vers les piles de navigation et incorporez la perception à l'aide de bibliothèques open-source. L'écosystème est mature, bien documenté et soutenu par une communauté dynamique. Grâce aux outils de simulation disponibles, vous pouvez expérimenter rapidement et rapidement, en déployant votre robot Python dans des applications réelles. Réseau de la société ROS et le fonctionnaire Documentation sur le python pour approfondir vos connaissances des deux plateformes.