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.

edgeConstraints

Restricciones de borde en el gráfico de pose

Desde R2019b

Descripción

measurements = edgeConstraints(poseGraph) enumera todas las restricciones de borde en el gráfico de pose especificado como una pose relativa.

[measurements,infoMats] = edgeConstraints(poseGraph) también devuelve las matrices de información para cada arista. La matriz de información es la inversa de la covarianza de la medida de pose.

ejemplo

[measurements,infoMats] = edgeConstraints(poseGraph,edgeIDs) devuelve restricciones de borde para los ID de borde especificados.

Ejemplos

contraer todo

Este ejemplo muestra cómo identificar y eliminar cierres de bucles espurios del gráfico de pose. Para hacer esto, puede modificar la pose relativa de un borde de cierre de bucle e intentar optimizar el gráfico de pose con y sin eliminar el cierre de bucle espurio automático y comparar los resultados.

Cargue el Intel Research Lab Dataset que contiene un gráfico de pose 2-D. Optimiza el gráfico de pose. Traza el gráfico de pose con las identificaciones desactivadas. Las líneas rojas indican cierres de bucle identificados en el conjunto de datos.

load intel-2d-posegraph.mat pg
optimizedPG = optimizePoseGraph(pg);
show(optimizedPG,IDs="off");
title("Optimized Pose Graph")

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

Modifique la pose relativa del borde de cierre del bucle 1386 a algunos valores aleatorios.

loopclosureId = 1386;
nodePair = edgeNodePairs(optimizedPG,loopclosureId);
[relPose,infoMat] = edgeConstraints(optimizedPG,loopclosureId);
relPose(2) = -5;
relPose(3) = 1.5;
addRelativePose(optimizedPG,relPose,infoMat,nodePair(1),nodePair(2));

Optimice el gráfico de pose sin recortar el cierre automático del bucle. Trace el gráfico de pose optimizado para ver el ajuste deficiente de los nodos con cierres de bucle.

[updatedPG,solutionInfo] = optimizePoseGraph(optimizedPG);
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

Ciertos cierres de bucle deben recortarse del gráfico de pose. Utilice la función trimLoopClosures para recortar estos cierres de bucle incorrectos. Establezca el umbral de truncamiento y las iteraciones máximas para los parámetros del recortador.

trimParams = struct("TruncationThreshold",0.5,"MaxIterations",100);

Generar opciones de solver .

solverOptions = poseGraphSolverOptions("g2o-levenberg-marquardt");

Utilice la función trimLoopClosures con los parámetros del recortador y las opciones del solver . Trace el nuevo gráfico de pose para ver que se eliminaron los cierres de bucle incorrectos.

[newPG,trimInfo] = trimLoopClosures(updatedPG,trimParams,solverOptions);
show(newPG,IDs="off");
title("New Pose Graph")

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

Argumentos de entrada

contraer todo

Gráfico de pose, especificado como un objeto poseGraph o poseGraph3D .

ID de borde, especificados como un vector de números enteros positivos.

Argumentos de salida

contraer todo

Mediciones entre nodos, devueltas como una matriz n-por-3 o n-por-7.

Para poseGraph (2-D), cada fila es un vector [x y theta] , que define la posición y el ángulo de orientación relativos de xy, theta, de una pose en el gráfico. Para posiciones de punto de referencia, theta se devuelve como NaN.

Para poseGraph3D, cada fila es un vector [x y z qw qx qy qz] , que define la posición relativa de xyz y la orientación del cuaternión, [qw qx qy qz], de una pose en el gráfico.

Nota

Muchas otras fuentes de gráficos de pose 3D, incluidos los formatos .g2o , especifican la orientación del cuaternión en un orden diferente, por ejemplo, [qx qy qz qw]. Verifique la fuente de los datos de su gráfico de pose antes de agregar nodos a su objeto poseGraph3D .

Matrices de información, especificadas en forma compacta como una matriz n por 6 o n por 21, donde n es la número de poses en el gráfico de poses.

Cada fila es el triángulo superior de la matriz de información cuadrada. Una matriz de información representa la incertidumbre de la medición. La matriz se calcula como la inversa de la covarianza. Si la medida es un vector [x y theta] , la matriz de covarianza es un cálculo de covarianza de 3 por 3 por pares. Normalmente, la incertidumbre está determinada por el modelo del sensor.

Para poseGraph (2-D), cada matriz de información es un vector de seis elementos. El valor predeterminado es [1 0 0 1 0 1]. Para los nodos de punto de referencia, los últimos tres elementos se devuelven como NaN.

Para poseGraph3D, cada matriz de información es un vector de 21 elementos. El valor predeterminado es [1 0 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 1 0 1].

Capacidades ampliadas

Historial de versiones

Introducido en R2019b