Main Content

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

matchScansLine

Estimer la pose entre deux balayages laser à l'aide des caractéristiques linéaires

Depuis R2020a

Description

relpose = matchScansLine(currScan,refScan,initialRelPose) 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, initialRelPose.

[relpose,stats] = matchScansLine(___) renvoie des informations supplémentaires sur la covariance et la condition de sortie dans stats sous forme de structure utilisant les entrées précédentes.

exemple

[relpose,stats,debugInfo] = matchScansLine(___) renvoie des informations de débogage supplémentaires, debugInfo, à partir du résultat de la correspondance d'analyse basée sur les lignes.

exemple

[___] = matchScansLine(___,Name,Value) spécifie les options en utilisant un ou plusieurs arguments de paire nom-valeur.

Exemples

réduire tout

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

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

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);

Figure contains 2 axes objects. Axes object 1 with title s1 Line Features, xlabel X, ylabel Y contains 16 objects of type line, text. One or more of the lines displays its values using only markers Axes object 2 with title s2 Line Features - Transformed, xlabel X, ylabel Y contains 19 objects of type line, text. One or more of the lines displays its values using only markers

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

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.

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]

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.

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.

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'axe x et le vecteur rho , 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.

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.

É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

réduire tout

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.

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 fonction matScansLine ne fournit pas de covariance entre les composants (x,y) et theta 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 le initialRelPose n'est pas valide ou que les analyses sont trop éloignées les unes des autres.

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 dans ReferenceFeatures et contient des zéros et des uns pour chaque point de refScan.

  • 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 dans ReferenceFeatures et contient des zéros et des uns pour chaque point de refScan.

  • 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 dans CurrentFeatures. Chaque élément représente la fonctionnalité correspondante dans ReferenceFeatures et donne l'index de la fonctionnalité correspondante dans ReferenceFeatures est un index correspondant au

  • MatchValue –– Valeur scalaire indiquant un score pour chaque MatchHypothesis. Une valeur inférieure est considérée comme une meilleure correspondance. Si deux éléments de MatchHypothesis 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