Main Content

Esta página se ha traducido mediante traducción automática. Haga clic aquí para ver la última versión en inglés.

poseGraph3D

Crear gráfico de pose en 3D

Descripción

Un objeto poseGraph3D almacena información para una representación gráfica de pose 3D. Un gráfico de pose contiene nodos conectados por aristas. La estimación de cada nodo está conectada al gráfico mediante restricciones de borde que definen la pose relativa entre los nodos y la incertidumbre en esa medición.

Para construir un gráfico de pose de forma iterativa, utilice la función addRelativePose para agregar estimaciones de pose relativas y conectarlas a un nodo existente con restricciones de borde especificadas. Los nodos de pose deben especificarse en relación con un nodo de pose. Especificar la incertidumbre de la medición mediante una matriz de información.

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.

Agregar un borde entre dos nodos no secuenciales crea un "cierre de bucle" en el gráfico. También se admiten múltiples bordes o multibordes entre pares de nodos, lo que incluye cierres de bucle. Para agregar restricciones de borde adicionales o cierres de bucle, especifique los ID de nodo usando la función addRelativePose . Al optimizar el gráfico de pose, la función optimizePoseGraph encuentra una solución para satisfacer todas estas restricciones de borde.

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.

Para agregar nodos de punto de referencia, utilice la función addPointLandmark . Esta función especifica nodos como xyz-puntos sin estimaciones de orientación. Los puntos de referencia deben especificarse en relación con un nodo de pose.

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

Para gráficos de pose 2-D, consulte poseGraph.

Para ver un ejemplo que crea y optimiza un gráfico de pose 3D a partir de datos de sensores del mundo real, consulte SLAM de punto de referencia usando marcadores AprilTag.

Creación

Descripción

poseGraph = poseGraph3D crea un objeto gráfico de pose 3D. Agregue poses usando addRelativePose para construir un gráfico de pose de forma iterativa.

ejemplo

poseGraph = poseGraph3D('MaxNumEdges',maxEdges,'MaxNumNodes',maxNodes) especifica un límite superior en el número de bordes y nodos permitidos en el gráfico de pose al generar código. Este límite solo es necesario al generar código.

Propiedades

expandir todo

Esta propiedad o parámetro es de solo lectura.

Número de nodos en el gráfico de pose, especificado como un entero positivo. Cada nodo representa una medida de pose o una medida de punto de referencia. Para especificar poses relativas entre nodos, utilice addRelativePose. Para especificar una pose de punto de referencia, utilice addLandmarkPose. Para obtener una lista de todos los nodos, utilice edgeNodePairs.

Esta propiedad o parámetro es de solo lectura.

Número de aristas en el gráfico de pose, especificado como un entero no negativo. Cada borde conecta dos nodos en el gráfico de pose. Se incluyen bordes de cierre de bucle y bordes de referencia.

Esta propiedad o parámetro es de solo lectura.

Número de cierres de bucle en el gráfico de pose, especificado como un entero no negativo. Para obtener los ID de los bordes de los cierres de bucle, utilice la propiedad LoopClosureEdgeIDs .

Esta propiedad o parámetro es de solo lectura.

ID de bordes de cierre de bucle, especificados como un vector de ID de borde.

Esta propiedad o parámetro es de solo lectura.

ID de nodos de punto de referencia, especificados como un vector de ID para cada nodo.

Funciones del objeto

addPointLandmarkAgregar un nodo de punto de referencia al gráfico de pose
addRelativePoseAgregar pose relativa al gráfico de pose
copyCrear copia del gráfico de pose
edgeNodePairsPares de nodos de borde en gráfico de pose
edgeConstraintsRestricciones de borde en el gráfico de pose
edgeResidualErrorsCalcular los errores residuales del borde del gráfico de pose
findEdgeIDEncuentra el ID del borde del borde
nodeEstimatesPoses de nodos en el gráfico de poses.
removeEdgesEliminar los bordes de cierre del bucle del gráfico
showTrazar gráfico de pose

Ejemplos

contraer todo

Optimice un gráfico de pose en función de los nodos y las restricciones de los bordes. El gráfico de pose utilizado en este ejemplo se tomó del MIT Dataset y se generó utilizando información extraída de un estacionamiento.

Cargue el gráfico de pose del conjunto de datos del MIT. Inspeccione el objeto poseGraph3D para ver el número de nodos y cierres de bucle.

load parking-garage-posegraph.mat pg
disp(pg);
  poseGraph3D with properties:

               NumNodes: 1661
               NumEdges: 6275
    NumLoopClosureEdges: 4615
     LoopClosureEdgeIDs: [128 129 130 132 133 134 135 137 138 139 140 142 143 144 146 147 148 150 151 204 205 207 208 209 211 212 213 215 216 217 218 220 221 222 223 225 226 227 228 230 231 232 233 235 236 237 238 240 241 242 243 244 ... ] (1x4615 double)
        LandmarkNodeIDs: [1x0 double]

Traza el gráfico de pose con las identificaciones desactivadas. Las líneas rojas indican cierres de bucle identificados en el conjunto de datos.

title('Original Pose Graph')
show(pg,'IDs','off');
view(-30,45)

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

Optimiza el gráfico de pose. Los nodos se ajustan en función de las restricciones de los bordes y los cierres de bucles. Trace el gráfico de pose optimizado para ver el ajuste de los nodos con cierres de bucle.

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

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

Referencias

[1] Carlone, Luca, Roberto Tron, Kostas Daniilidis, and Frank Dellaert. "Initialization Techniques for 3D SLAM: a Survey on Rotation Estimation and its Use in Pose Graph Optimization." 2015 IEEE International Conference on Robotics and Automation (ICRA). 2015, pp. 4597–4604.

Capacidades ampliadas

Historial de versiones

Introducido en R2019b