matchScansLine
Estimer la pose entre deux balayages laser à l'aide des caractéristiques linéaires
Depuis R2020a
Syntaxe
Description
estime la pose relative entre deux numérisations en fonction des caractéristiques de ligne correspondantes identifiées dans chaque numérisation. Spécifiez une première estimation sur la pose relative, relpose
= matchScansLine(currScan
,refScan
,initialRelPose
)initialRelPose
.
[___] = matchScansLine(___,
spécifie les options en utilisant un ou plusieurs arguments de paire nom-valeur.Name,Value
)
Exemples
Estimation de la pose des scans avec des caractéristiques linéaires
Cet exemple montre comment utiliser la fonction matchScansLine
pour estimer la pose relative entre les analyses lidar à partir d'une estimation initiale. Les caractéristiques linéaires identifiées sont visualisées pour montrer comment l'algorithme de correspondance de balayage associe les caractéristiques entre les balayages.
Chargez une paire de scans lidar. Le fichier .mat
contient également une estimation initiale de la différence de pose relative, initGuess
, qui pourrait être basée sur l'odométrie ou d'autres données de capteur.
load tb3_scanPair.mat plot(s1) hold on plot(s2) hold off
Définissez les paramètres d’extraction et d’association des entités linéaires. Le bruit des données lidar détermine le seuil de lissage, qui définit le moment où un saut de ligne se produit pour une entité linéaire spécifique. Augmentez cette valeur pour obtenir des données lidar plus bruitées. L'échelle de compatibilité détermine quand les fonctionnalités sont considérées comme des correspondances. Augmentez cette valeur pour des restrictions plus souples sur les paramètres des entités linéaires.
smoothnessThresh = 0.2; compatibilityScale = 0.002;
Appelez matchScansLine
avec la supposition initiale donnée et d'autres paramètres spécifiés sous forme de paires nom-valeur. La fonction calcule les caractéristiques linéaires pour chaque numérisation, tente de les faire correspondre et utilise une estimation globale pour obtenir la différence de pose.
[relPose, stats, debugInfo] = matchScansLine(s2, s1, initGuess, ... 'SmoothnessThreshold', smoothnessThresh, ... 'CompatibilityScale', compatibilityScale);
Après avoir fait correspondre les analyses, la sortie debugInfo
vous donne des informations sur les paramètres des caractéristiques de ligne détectées, [rho alpha]
, et l'hypothèse selon laquelle les caractéristiques correspondent entre les analyses.
debugInfo.MatchHypothesis
indique que les première, deuxième et sixième fonctionnalités de ligne de s1
correspondent aux cinquième, deuxième et quatrième fonctionnalités de s2
.
debugInfo.MatchHypothesis
ans = 1×6
5 2 0 0 0 4
La fonction d'assistance fournie trace ces deux analyses et les caractéristiques extraites avec des étiquettes. s2
est transformé pour être dans le même cadre en fonction de la supposition initiale de la pose relative.
exampleHelperShowLineFeaturesInScan(s1, s2, debugInfo, initGuess);
Utilisez la pose relative estimée de matchScansLine
pour transformer s2
. Ensuite, tracez les deux analyses pour montrer que la différence de pose relative est précise et les analyses se superposent pour montrer le même environnement.
s2t = transformScan(s2,relPose); clf plot(s1) hold on plot(s2t) hold off
Arguments d'entrée
currScan
— Lectures actuelles de l'analyse lidar
lidarScan
objet
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.
refScan
— Lectures de référence de l'analyse lidar
lidarScan
objet
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.
initialRelPose
— Supposition initiale de la pose relative
[x y theta]
L'estimation initiale de la pose actuelle par rapport au cadre de balayage laser de référence a spécifié un vecteur [x y theta]
. [x y]
est la translation en mètres et theta
est la rotation en radians.
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 : "LineMergeThreshold",[0.10 0.2]
SmoothnessThreshold
— Seuil pour détecter les points de rupture de ligne lors de l'analyse
0.1
(par défaut) | scalaire
Seuil de détection des points de rupture de ligne lors de l'analyse, spécifié sous forme de scalaire. La douceur est définie en appelant diff(diff(scanData))
et suppose des angles de balayage équidistants. Les points de scan correspondant à des valeurs de lissage supérieures à ce seuil sont considérés comme des points de rupture. Pour les données d'analyse lidar avec un niveau de bruit plus élevé, augmentez ce seuil.
MinPointsPerLine
— Nombre minimum de points de numérisation dans chaque entité linéaire
10
(par défaut) | entier positif supérieur à 3
Nombre minimum de points de numérisation dans chaque entité linéaire, spécifié sous la forme d'un entier positif supérieur à 3.
Une entité linéaire ne peut pas être identifiée à partir d’un ensemble de points de numérisation si le nombre de points dans cet ensemble est inférieur à ce seuil. Lorsque les données d'analyse lidar sont bruitées, une définition trop petite de cette propriété peut entraîner l'identification d'entités linéaires de mauvaise qualité et fausser le résultat de correspondance. D'un autre côté, certaines fonctionnalités de ligne clés peuvent être manquées si ce nombre est trop grand.
LineMergeThreshold
— Paramètres de seuil en ligne pour fusionner des entités linéaires
[0.05 0.1]
(par défaut) | vecteur à deux éléments [rho alpha]
Paramètres de seuil en ligne pour fusionner les entités linéaires, spécifiés sous la forme d'un vecteur à deux éléments [rho alpha]
. Une ligne est définie par deux paramètres :
rho
–– Distance de l'origine à la ligne le long d'un vecteur perpendiculaire à la ligne, spécifiée en mètres.alpha
–– Angle entre l'axex
et le vecteurrho
, spécifié en radians.
Si la différence entre ces paramètres pour deux entités linéaires est inférieure au seuil donné, les entités linéaires sont fusionnées.
MinCornerProminence
— Limite inférieure de la valeur de proéminence pour détecter un coin
0.05
(par défaut) | scalaire positif
Limite inférieure de la valeur de proéminence pour détecter un coin, spécifiée comme un scalaire positif.
La proéminence mesure à quel point un extrema local se démarque dans les données lidar. Seules les valeurs supérieures à cette limite inférieure sont considérées comme un coin. Les coins aident à identifier les entités linéaires, mais ne font pas partie de l’entité elle-même. Pour les données d'analyse lidar bruyantes, augmentez cette limite inférieure.
CompatibilityScale
— Échelle utilisée pour ajuster les seuils de compatibilité pour l'association de fonctionnalités
0.0005
(par défaut) | scalaire positif
Échelle utilisée pour ajuster les seuils de compatibilité pour l'association de fonctionnalités, spécifiée comme un scalaire positif. Une échelle inférieure signifie un seuil de compatibilité plus strict pour associer des fonctionnalités. Si aucune entité n’est trouvée dans les données lidar avec des entités linéaires évidentes, augmentez cette valeur. Pour les correspondances de fonctionnalités non valides, réduisez cette valeur.
Arguments de sortie
relpose
— Pose de l'analyse actuelle
[x y theta]
Pose du scan actuel par rapport au scan de référence, renvoyé sous la forme [x y theta]
, où [x y]
est la translation en mètres et theta
est la rotation en radians.
stats
— Scanner les informations correspondantes
structure
Analysez les informations correspondantes, renvoyées sous forme de structure avec les champs suivants :
Covariance
–– Matrice 3x3 représentant la covariance de l'estimation de la pose relative. La fonctionmatScansLine
ne fournit pas de covariance entre les composants(x,y)
ettheta
de la pose relative. La matrice suit donc le modèle :[Cxx, Cxy 0; Cyx Cyy 0; 0 0 Ctheta]
.ExitFlag
–– Valeur scalaire indiquant la condition de sortie du solveur :0
–– Aucune erreur.1
–– Un nombre insuffisant d’entités linéaires (< 2) sont trouvés dans l’une ou les deux analyses. Pensez à utiliser différents scans avec plus de fonctionnalités de ligne.2
–– Un nombre insuffisant de correspondances d’entités linéaires sont identifiées. Cela peut indiquer que leinitialRelPose
n'est pas valide ou que les analyses sont trop éloignées les unes des autres.
debugInfo
— Informations de débogage pour le résultat de correspondance d'analyse basée sur les lignes
structure
Informations de débogage pour le résultat de correspondance d'analyse basée sur les lignes, renvoyées sous forme de structure avec les champs suivants :
ReferenceFeatures
–– Caractéristiques linéaires extraites de l'analyse de référence sous forme de matrice n-by-2. Chaque entité linéaire est représentée par[rho alpha]
pour l'équation paramétrique, rho = x ∙cos(alpha) + y ∙sin(alpha).ReferenceScanMask
–– Masque indiquant quels points du balayage de référence sont utilisés pour chaque entité linéaire en tant que matrice n-by- p . Chaque ligne correspond à une ligne dansReferenceFeatures
et contient des zéros et des uns pour chaque point derefScan
.CurrentFeatures
–– Caractéristiques linéaires extraites de l'analyse actuelle sous forme de matrice n-par 2. Chaque entité linéaire est représentée par[rho alpha]
pour l'équation paramétrique, rho = x ∙cos(alpha) + y ∙sin(alpha).CurrentScanMask
–– Masque indiquant quels points de l'analyse en cours sont utilisés pour chaque entité linéaire en tant que matrice n-by- p . Chaque ligne correspond à une ligne dansReferenceFeatures
et contient des zéros et des uns pour chaque point derefScan
.MatchHypothesis
–– Meilleure hypothèse de correspondance d'entités linéaires en tant que vecteur d'éléments n , où n est le nombre d'entités linéaires dansCurrentFeatures
. Chaque élément représente la fonctionnalité correspondante dansReferenceFeatures
et donne l'index de la fonctionnalité correspondante dansReferenceFeatures
est un index correspondant auMatchValue
–– Valeur scalaire indiquant un score pour chaqueMatchHypothesis
. Une valeur inférieure est considérée comme une meilleure correspondance. Si deux éléments deMatchHypothesis
ont le même indice, la fonctionnalité avec le score le plus bas est utilisée.
Références
[1] Neira, J., and J.d. Tardos. “Data Association in Stochastic Mapping Using the Joint Compatibility Test.” IEEE Transactions on Robotics and Automation 17, no. 6 (2001): 890–97. https://doi.org/10.1109/70.976019.
[2] Shen, Xiaotong, Emilio Frazzoli, Daniela Rus, and Marcelo H. Ang. “Fast Joint Compatibility Branch and Bound for Feature Cloud Matching.” 2016 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS), 2016. https://doi.org/10.1109/iros.2016.7759281.
Historique des versions
Introduit dans R2020a
Commande MATLAB
Vous avez cliqué sur un lien qui correspond à cette commande MATLAB :
Pour exécuter la commande, saisissez-la dans la fenêtre de commande de MATLAB. Les navigateurs web ne supportent pas les commandes MATLAB.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)