Main Content

Cette page a été traduite par traduction automatique. Cliquez ici pour voir la dernière version en anglais.

matchScansGrid

Estimer la pose entre deux analyses lidar à l'aide d'une recherche basée sur une grille

Depuis R2019b

Description

exemple

pose = matchScansGrid(currScan,refScan) trouve la pose relative entre une référence lidarScan et un objet lidarScan actuel à l'aide d'une recherche basée sur une grille. matchScansGrid convertit les paires de scans lidar en grilles probabilistes et trouve la pose entre les deux scans en corrélant leurs grilles. La fonction utilise une stratégie de branchement et de liaison pour accélérer le calcul sur de grandes fenêtres de recherche discrétisées.

[pose,stats] = matchScansGrid(___) renvoie des statistiques supplémentaires sur le résultat de l'analyse en utilisant les arguments d'entrée précédents.

[___] = matchScansGrid(___,Name,Value) spécifie les options utilisant un ou plusieurs arguments de paire Name,Value . Par exemple, 'InitialPose',[1 1 pi/2] spécifie une estimation de pose initiale pour la correspondance de numérisation.

Exemples

réduire tout

Effectuez une correspondance de numérisation à l’aide d’une recherche basée sur une grille pour estimer la pose entre deux numérisations laser. Générez une grille probabiliste à partir des scans et estimez la différence de pose à partir de ces grilles.

Chargez les données de numérisation laser. Ces deux analyses proviennent d'un véritable capteur lidar avec des changements dans la pose du robot et sont stockées sous forme d'objets lidarScan .

load laserScans.mat scan scan2
plot(scan)
hold on
plot(scan2)
hold off

Figure contains an axes object. The axes object with title LiDAR Scan, xlabel X, ylabel Y contains 2 objects of type line. One or more of the lines displays its values using only markers

Utilisez matchScansGrid pour estimer la pose entre les deux scans.

relPose = matchScansGrid(scan2,scan);

À l’aide de la pose estimée, transformez l’analyse actuelle en analyse de référence. Les analyses se chevauchent étroitement lorsque vous les tracez ensemble.

scan2Tformed = transformScan(scan2,relPose);

plot(scan)
hold on
plot(scan2Tformed)
hold off

Figure contains an axes object. The axes object with title LiDAR Scan, xlabel X, ylabel Y contains 2 objects of type line. One or more of the lines displays its values using only markers

Arguments d'entrée

réduire tout

Lectures actuelles de l'analyse lidar, spécifiées comme objet lidarScan .

Votre analyse lidar peut contenir des valeurs Inf et NaN , mais l'algorithme les ignore.

Lectures d'analyse lidar de référence, spécifiées comme objet lidarScan .

Votre analyse lidar peut contenir des valeurs Inf et NaN , mais l'algorithme les ignore.

Arguments nom-valeur

Spécifiez des paires d'arguments facultatives sous la forme Name1=Value1,...,NameN=ValueN, où Name est le nom de l'argument et Value est la valeur correspondante. Les arguments nom-valeur doivent apparaître après les autres arguments, mais l'ordre des paires n'a pas d'importance.

Avant R2021a, utilisez des virgules pour séparer chaque nom et valeur, et mettez Name entre guillemets.

Exemple : 'InitialPose',[1 1 pi/2]

Estimation initiale de la pose actuelle par rapport au balayage laser de référence, spécifiée comme la paire séparée par des virgules composée de 'InitialPose' et d'un vecteur [x y theta] . [x y] est la translation en mètres et theta est la rotation en radians.

Cellules de grille par mètre, spécifiées comme une paire séparée par des virgules composée de 'Resolution' et d'un entier positif. La précision du résultat de correspondance de numérisation est précise jusqu'à la taille de la cellule de la grille.

Portée maximale du capteur lidar, spécifiée comme la paire séparée par des virgules composée de 'MaxRange' et d'un scalaire positif.

Plage de recherche pour la traduction, spécifiée comme une paire séparée par des virgules composée de 'TranslationSearchRange' et d'un vecteur [x y] . Ces valeurs définissent la fenêtre de recherche en mètres autour de l'estimation de translation initiale donnée dans InitialPose. Si le InitialPose est donné sous la forme [x0 y0], alors les coordonnées de la fenêtre de recherche sont [x0-x x0+x] et [y0-y y0+y]. Ce paramètre est utilisé uniquement lorsque InitialPose est spécifié.

Plage de recherche pour la rotation, spécifiée comme une paire séparée par des virgules composée de 'RotationSearchRange' et d'un scalaire positif. Cette valeur définit la fenêtre de recherche en radians autour de l'estimation de rotation initiale donnée dans InitialPose. Si la rotation InitialPose est donnée comme th0, alors la fenêtre de recherche est [th0-a th0+a], où a est la plage de recherche de rotation. Ce paramètre est utilisé uniquement lorsque InitialPose est spécifié.

Arguments de sortie

réduire tout

Pose du scan actuel par rapport au scan de référence, renvoyée sous forme de vecteur [x y theta] , où [x y] est la traduction en mètres et theta est la rotation en radians.

Analysez les statistiques de correspondance, renvoyées sous forme de structure avec le champ suivant :

  • Score — Scalaire numérique représentant le score lors de l'exécution de la correspondance de numérisation. Ce score est une estimation de la probabilité que le balayage actuel transformé corresponde au balayage de référence. Score est toujours non négatif. Des scores plus élevés indiquent une meilleure correspondance, mais les valeurs varient en fonction des données lidar utilisées.

  • Covariance — Covariance estimée représentant la confiance de la pose relative calculée, renvoyée sous forme de matrice 3 x 3.

Références

[1] Hess, Wolfgang, Damon Kohler, Holger Rapp, and Daniel Andor. "Real-Time Loop Closure in 2D LIDAR SLAM." 2016 IEEE International Conference on Robotics and Automation (ICRA). 2016.

Capacités étendues

Génération de code C/C++
Générez du code C et C++ avec MATLAB® Coder™.

Historique des versions

Introduit dans R2019b