How to Implement Basic Slam (Simultaneous Localization and Mapping) in Robotics
Table of Contents
SLAM (Simultaneous Localization and Mapping) est un défi fondamental en robotique qui permet à un véhicule autonome de construire une carte d'un environnement inconnu tout en suivant simultanément sa propre position dans cette carte. Pour les robots et les ingénieurs, maîtriser la mise en œuvre de base SLAM est une étape critique vers la construction de systèmes véritablement autonomes. Ce guide fournit une passerelle complète et pratique des concepts, algorithmes et outils fondamentaux impliqués dans la création d'une solution SLAM de base, adaptée à des projets amateurs et des applications industrielles de début de carrière.
Comprendre le problème de la MALÉ : pourquoi cela compte
Au cœur, SLAM résout un problème de poulet et d'œuf : un robot a besoin d'une carte pour se localiser, mais il a besoin d'un emplacement connu pour construire une carte. Sans SLAM, un robot opérant dans un environnement déconnecté du GPS ou précédemment invisible perdrait rapidement une trace de sa position en raison du bruit de capteur, du glissement de roue ou de la dérive en odométrie.
L'application la plus courante est la robotique mobile : voitures autoconduites, véhicules à moteur d'entrepôt, drones de livraison et aspirateurs, par exemple, SLAM. Une Roomba utilise une forme simplifiée de SLAM pour naviguer dans votre salon sans tomber dans les meubles à plusieurs reprises. Des applications plus avancées permettent d'explorer de manière autonome les zones de catastrophe, la cartographie sous-marine et les rovers planétaires.
Composantes essentielles d'un système SLAM
Un système SLAM robuste intègre quatre composants clés : des capteurs, un algorithme d'estimation d'état, une représentation de carte et une méthode d'association de données.
Capteurs : Les yeux du robot
Le choix du capteur détermine la précision et la robustesse de votre système SLAM. Les options les plus courantes sont les suivantes :
- LiDAR (Détection et rangage de la lumière): 2D LiDAR est typique pour les robots d'intérieur; 3D LiDAR est utilisé dans les véhicules autonomes d'extérieur. LiDAR est moins affecté par les conditions d'éclairage que les caméras.
- Caméras (monoculaires ou stéréo): Offrez de riches informations visuelles et sont peu coûteux. Visual SLAM (vSLAM) utilise l'extraction de fonctionnalités (ORB, SIFT) pour suivre les points à travers les cadres. Cependant, les caméras ont du mal à faible lumière et à mouvement rapide.
- Rechercheur à ultrasons ou infrarouges : Un espace pas cher mais bruyant et limité; adapté pour éviter les obstacles plutôt que pour le SLAM complet.
- Unité de mesure inertielle (UMI): Fournit des données d'accélération et de vitesse angulaire, qui peuvent être fusionnées avec d'autres capteurs pour améliorer la localisation, en particulier pendant le mouvement rapide.
Localisation : Où suis-je ?
La localisation est le processus d'estimation de la pose du robot (position et orientation) par rapport à la carte. Les algorithmes communs comprennent:
- Filtre Kalman étendu (EKF): Suppose le bruit gaussien et linéarise les modèles de mouvement et d'observation. Convient aux environnements de taille moyenne mais écailles mal avec de nombreux repères.
- Filtre à particules (Monte Carlo Localisation – MCL): Représente l'état de croyance comme un ensemble de particules pondérées. Poignée le bruit non gaussien et peut faire face à la localisation globale (problème de robot kidnappé).
- SLAM (lesscarrés) basé sur les graphiques: Traiter les poses et les points de repère comme des nœuds dans un graphique; les contraintes des mesures sont des bords. Optimise la trajectoire entière en utilisant des techniques comme Gauss-Newton ou Levenberg-Marquardt. C'est l'état de la technique pour le SLAM moderne.
Cartographie: le modèle environnemental
La représentation de la carte doit correspondre à la demande :
- Carte de la grille d'occupation (OGM) : Une grille discrète où chaque cellule est susceptible d'être occupée. Populaire pour la navigation intérieure 2D (p. ex. gmapping ROS).
- Carte basée sur les caractéristiques : Stocke les repères (points, lignes, plans) extraits des données du capteur. Efficace pour les environnements clairsemés mais nécessitant une association de données robuste.
- Carte du Voxel 3D (OctoMap): Une grille d'occupation 3D utilisant une structure d'octree pour l'efficacité de la mémoire.
Association des données: Connecter les points
Les associations incorrectes causent une défaillance catastrophique. Les techniques courantes comprennent le voisinage le plus proche, le gating de distance de Mahalanobis et le RANSAC pour le rejet aberrant.
Mise en œuvre du SLAM de base : un guide étape par étape
Cette passerelle utilise un robot à entraînement différentiel avec un LiDAR 2D, fonctionnant dans un environnement simulé ou réel.
1. Configurez votre plateforme robot
Choisissez une plateforme avec des encodeurs de roues fiables (pour l'odométrie) et un capteur LiDAR 2D (par exemple, RPLIDAR A1 ou YDLIDAR). Sinon, utilisez un environnement de simulation comme Gazebo avec un modèle TurtleBot. Assurez-vous que vos capteurs sont correctement calibrés : LiDAR devrait avoir des données de balayage précises, et l'odométrie ne devrait pas dériver excessivement (bien que certaines dérives soient attendues).
2. Configurez votre environnement logiciel
Installez ROS (Noetic pour Ubuntu 20.04 ou ROS2 Humble pour les versions ultérieures).
- grappinage: Un paquet SLAM à base de laser utilisant un filtre à particules Rao-Blackwellized. Facile à utiliser mais limité à 2D.
- hemctor slam : Ne nécessite pas d'odométrie (utilise seulement des scans LiDAR), ce qui le rend robuste sur un terrain inégal.
- cartographe: Une bibliothèque SLAM 2D et 3D en temps réel de Google, prenant en charge plusieurs capteurs et la fermeture de boucle.
- boîte à outils : Une alternative moderne et riche en fonctionnalités à la gmapping, avec une capacité de cartographie à vie et un support ROS2.
Pour ce guide, nous utiliserons boîte à outils grâce à sa flexibilité et à son entretien actif.
3. Lancez le robot et les capteurs
D'abord, mettez en valeur votre robot URDF et publiez les transformations nécessaires (arbre FT). Assurez-vous que vous avez un sujet pour les données LiDAR et un sujet d'odométrie (. Si vous utilisez un modèle TurtleBot3, vous pouvez lancer :
Cela fournit un environnement connu pour les essais.
4. Lancer le nœud SLAM
Lancement boîte à outils avec un fichier de configuration adapté à vos capteurs. Un lancement typique comprend:
Cela commence le nœud SLAM en mode en ligne (traitement des scans): le nœud s'abonnera à et , et publiera un sujet de carte (.
5. Téléopération du robot
Utilisez un nœud téléoptique (p. ex., ) pour faire tourner le robot autour de l'environnement. Déplacez-vous lentement et couvrez toute la zone, en veillant à revoir les endroits visités précédemment (fermeture de boucle) pour corriger la dérive. Regardez la carte construire dans —ouvrir RViz et ajouter l'affichage , régler le sujet à .
6. Évaluer et adapter
Après la cartographie, vérifiez la cohérence de la carte. Les questions communes comprennent:
- Murs flous ou doubles: Indique une mauvaise odométrie ou un réglage incorrect des paramètres (p. ex., tolérance de couplage des balayages).
- Drift sur de longs couloirs: Augmenter la taille de la corrélation ou permettre la fermeture de la boucle.
- Carte ne fermant pas les boucles: Assurez-vous que le robot revoie les emplacements avec des caractéristiques distinctives; ajustez le rayon de recherche de fermeture de boucle.
Paramètres à modifier boîte à outils , et . Utilisez pour s'ajuster dynamiquement.
7. Enregistrer et utiliser la carte
Une fois que vous êtes satisfait, enregistrez la carte en utilisant :
Cela crée un (image) et (métadata). Vous pouvez alors charger cette carte pour une navigation autonome en utilisant le paquet .
Considérations avancées pour la SLAM robuste
Alors que les étapes ci-dessus produisent une solution SLAM de base, les déploiements réels exigent une robustesse. Voici les domaines clés pour améliorer votre système.
Manipulation des environnements dynamiques
La grille d'occupation de base SLAM suppose que le monde est statique. Les personnes qui marchent, qui ouvrent des portes ou qui se déplacent dans des meubles causent des artefacts de cartographie.
- Filtrage dynamique des objets : Utiliser une carte persistante à court terme pour soustraire les obstacles transitoires.
- Mise à jour probabiliste de l'occupation : Utiliser une formulation log-odds qui réduit l'impact des observations temporaires.
- SLAM multi-sessions: Des outils comme boîte à outils soutenir la cartographie à vie qui fusionne les données de plusieurs séries.
Détection de fermeture de boucle
La fermeture de boucles est la capacité de reconnaître un endroit visité précédemment et corriger la dérive accumulée. Sans elle, même à court terme SLAM peut diverger.
- Correspondance entre les données de numérisation et les données de carte : Alignez le balayage LiDAR actuel avec la carte existante en utilisant le PIC ou des méthodes fondées sur la corrélation.
- Fermeture de boucle basée sur l'apparence : Pour le SLAM visuel, utilisez un modèle de sac de mots pour détecter les scènes revisitées à partir d'images de caméra.
- Optimisation des graphiques : Une fois une boucle détectée, le graphique de pose complet est optimisé (en utilisant g2o ou iSAM2) pour distribuer l'erreur.
Fusion de capteurs
La combinaison de plusieurs capteurs améliore considérablement la précision.
- LiDAR + IMU: L'IMU fournit des estimations de mouvements à haute fréquence, comblant les écarts entre les scans lents LiDAR et la manipulation de mouvements agressifs.
- LiDAR + Caméra: La caméra ajoute des fonctionnalités visuelles pour la fermeture de boucle, tandis que LiDAR fournit de la profondeur pour la cartographie.
- Encodeurs + IMU + GPS (extérieur): Une suite de capteurs commune pour véhicules autonomes, souvent fusionnés avec un EKF ou un graphique de facteur.
ROS fournit la localisation des robots paquet pour la fusion d'estimation d'état.
Efficacité informatique
SLAM peut être calculable intensive. Pour les plateformes intégrées (p. ex. Raspberry Pi, Jetson Nano), considérer:
- Scans d'échantillons de descente : Réduire le nombre de points dans chaque analyse LiDAR.
- Utilisez un filtre plus efficace: Les filtres à particules peuvent être plus lents; envisager une approche basée sur les graphiques avec une optimisation éparse.
- Comparaison de la numérisation adaptative : Utilisez une stratégie de recherche grossière à fine pour réduire le calcul.
Outils, bibliothèques et ressources d'apprentissage
Au-delà des paquets ROS déjà mentionnés, voici des ressources essentielles pour une étude plus approfondie.
- OuvrirSLAM- Oui. Une collection de SLAM et d'implémentations, y compris GMapping, Karto SLAM et RGB-D SLAM.
- IGLOO (graphique incrémental SLAM)- Oui. Une bibliothèque légère C++ pour le graphique 2D SLAM, idéale pour l'apprentissage.
- Institut universitaire de robotique Carnegie Mellon- Oui. Fournit des matériaux de cours ouverts couvrant la robotique probabiliste et la SLAM.
- Robotique probabiliste (Thrun, Burgard, Fox)- Oui. Le manuel définitif; les chapitres 9 et 10 couvrent l'EKF et le filtre à particules SLAM.
En outre, pratiquez en implémentant un simple SLAM 2D à partir de zéro en utilisant Python ou C++. Commencez par un ensemble de données connu (par exemple, l'ensemble de données Intel Research Lab) et ajoutez progressivement des fonctionnalités comme l'association de données et la fermeture de boucle.
Pièges communs et comment les éviter
Les implémentations de début se heurtent souvent aux problèmes suivants.
- Ignoration de l'étalonnage: Les biais extrinsèques ou IMU de LiDAR incorrects provoqueront des erreurs systématiques. Calibration de lidar caméra- Oui.
- Faible Odométrie: Se contenter d'une odométrie de roue pour la propagation des particules peut entraîner une divergence de filtre.
- Sur-confiance dans les fermetures de boucles : Les faux positifs peuvent déformer la carte. Utilisez une vérification de géométrie robuste (RANSAC) et vérifiez la cohérence spatiale et temporelle avant d'ajouter une contrainte de boucle.
- Paramètres de non-tuning : Les paramètres par défaut fonctionnent rarement pour tous les environnements. Utilisez le replay hors ligne des données enregistrées pour régler les seuils de correspondance, les modèles de mouvement et la résolution de la carte.
- La mémoire s'évanouit en de longues manches : Dans la cartographie à vie, le graphique grandit indéfiniment. Utilisez des stratégies de sparsification (élagage de nœuds) pour garder la mémoire limitée.
Conclusion
En comprenant l'interaction des capteurs, des algorithmes d'estimation et des représentations de cartes, vous pouvez construire un système qui permet à un robot d'explorer et de cartographier des espaces inconnus de façon autonome. Les étapes décrites ici – choisir les bons outils, exécuter un pipeline de slam toolbox basé sur ROS et régler les paramètres de robustesse – constituent une base solide. À l'aise avec les bases, explorer des sujets avancés comme le SLAM visuel-inertif, le SLAM multi-robot et la cartographie sémantique. Le champ continue d'évoluer rapidement, mais les principes fondamentaux restent les mêmes : fusionner des données bruyantes, associer des mesures et optimiser l'estimation conjointe du robot et du monde.