Main Content

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

poseGraph

Créer un graphique de pose 2D

Depuis R2019b

Description

Un objet poseGraph stocke des informations pour une représentation graphique de pose 2D. Un graphe de pose contient des nœuds reliés par des arêtes. Chaque estimation de nœud est connectée au graphique par des contraintes de bord qui définissent la pose relative entre les nœuds et l'incertitude sur cette mesure.

Pour construire un graphique de pose de manière itérative, utilisez la fonction addRelativePose pour ajouter des estimations de pose relatives et les connecter à un nœud existant avec des contraintes de bord spécifiées. Les nœuds de pose doivent être spécifiés par rapport à un nœud de pose. Spécifiez l'incertitude de la mesure à l'aide d'une matrice d'informations.

Figure showing relative poses between node poses. Each sequential pose is connected by an edge. Poses are specified as x,y, theta relative to the previous node.

L'ajout d'une arête entre deux nœuds non séquentiels crée une fermeture de boucle dans le graphique. Plusieurs arêtes ou  multiedges  entre les paires de nœuds sont également prises en charge, ce qui inclut les fermetures de boucles. Pour ajouter des contraintes de bord supplémentaires ou des fermetures de boucles, spécifiez les ID de nœud à l'aide de la fonction addRelativePose . Lors de l'optimisation du graphe de pose, la fonction optimizePoseGraph trouve une solution pour satisfaire toutes ces contraintes de bord.

Figure showing loop closures and multiedges as constraints between nodes. Loop closures connect to previous non-sequential nodes. Multiedges are multiple constraints between the same node pair.

Pour ajouter des nœuds de points de repère, utilisez la fonction addPointLandmark . Cette fonction spécifie les nœuds sous forme de points xy sans estimations d'orientation. Les points de repère doivent être spécifiés par rapport à un nœud de pose.

Figure showing a landmark position as an xy point relative to two nodes with an edge between each node. to.

L'objet lidarSLAM effectue une localisation et un mappage simultanés basés sur le lidar, qui reposent sur l'optimisation d'un graphe de pose 2D.

Pour les graphiques de pose 3D, consultez l'objet poseGraph3D ou l'exemple Landmark SLAM Using AprilTag Markers .

Création

Description

exemple

poseGraph = poseGraph crée un objet graphique de pose 2D. Ajoutez des poses en utilisant addRelativePose pour construire un graphique de poses de manière itérative.

poseGraph = poseGraph('MaxNumEdges',maxEdges,'MaxNumNodes',maxNodes) spécifie une limite supérieure sur le nombre d'arêtes et de nœuds autorisés dans le graphe de pose lors de la génération du code. Cette syntaxe n'est requise que lors de la génération de code.

Propriétés

développer tout

Ce propriété est en lecture seule.

Nombre de nœuds dans le graphique de pose, spécifié sous forme d'entier positif. Chaque nœud représente une mesure de pose ou une mesure de point de repère. Pour spécifier des poses relatives entre les nœuds, utilisez addRelativePose. Pour spécifier une pose de point de repère, utilisez addLandmarkPose. Pour obtenir une liste de tous les nœuds, utilisez edgeNodePairs.

Ce propriété est en lecture seule.

Nombre d'arêtes dans le graphique de pose, spécifié sous forme d'entier non négatif. Chaque arête relie deux nœuds dans le graphique de pose. Les bords de fermeture en boucle et les bords de repère sont inclus.

Ce propriété est en lecture seule.

Nombre de fermetures de boucles dans le graphique de pose, spécifié sous forme d'entier non négatif. Pour obtenir les ID de bord des fermetures de boucle, utilisez la propriété LoopClosureEdgeIDs .

Ce propriété est en lecture seule.

ID de bords de fermeture de boucle, spécifiés comme vecteur d’ID de bords.

Ce propriété est en lecture seule.

ID de nœud de référence, spécifiés comme vecteur d'ID pour chaque nœud.

Fonctions d'objet

addPointLandmarkAdd landmark point node to pose graph
addRelativePoseAjouter une pose relative au graphique de pose
copyCréer une copie du graphique de pose
edgeNodePairsEdge node pairs in pose graph
edgeConstraintsContraintes de bord dans le graphique de pose
edgeResidualErrorsCalculer les erreurs résiduelles des bords du graphique de pose
findEdgeIDTrouver l'ID du bord du bord
nodeEstimatesPoses des nœuds dans le graphique de pose
removeEdgesSupprimer les bords de fermeture de boucle du graphique
showTracer un graphique de pose

Exemples

réduire tout

Optimisez un graphique de pose en fonction des nœuds et des contraintes de bord. Le graphique de pose utilisé dans cet exemple provient du Intel Research Lab Dataset et a été généré à partir de la collecte d'odométries de roues et d'informations de capteur de télémètre laser dans un laboratoire intérieur.

Chargez l'ensemble de données Intel contenant un graphique de pose 2D. Inspectez l'objet poseGraph pour afficher le nombre de nœuds et de fermetures de boucle.

load intel-2d-posegraph.mat pg
disp(pg)
  poseGraph with properties:

               NumNodes: 1228
               NumEdges: 1483
    NumLoopClosureEdges: 256
     LoopClosureEdgeIDs: [1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 ... ] (1x256 double)
        LandmarkNodeIDs: [1x0 double]

Tracez le graphique de pose sans les identifiants. Les lignes rouges indiquent les fermetures de boucles identifiées dans l'ensemble de données.

show(pg,'IDs','off');
title('Original Pose Graph')

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

Optimisez le graphique de pose. Les nœuds sont ajustés en fonction des contraintes de bord et des fermetures de boucles. Tracez le graphique de pose optimisé pour voir l'ajustement des nœuds avec des fermetures de boucle.

updatedPG = optimizePoseGraph(pg);
figure
show(updatedPG,'IDs','off');
title('Updated Pose Graph')

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

Références

[1] Grisetti, G., R. Kummerle, C. Stachniss, and W. Burgard. "A Tutorial on Graph-Based SLAM." IEEE Intelligent Transportation Systems Magazine. Vol. 2, No. 4, 2010, pp. 31–43. doi:10.1109/mits.2010.939925.

Capacités étendues

Historique des versions

Introduit dans R2019b