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.

edgeNodePairs

Pares de nodos de borde en gráfico de pose

Desde R2019b

Descripción

nodePairs = edgeNodePairs(poseGraph) devuelve todos los bordes en el gráfico de pose especificado como una lista de pares de ID de nodos. Cada fila de la salida edges es un par de nodos que forman un borde. Pueden existir múltiples aristas entre el mismo par de nodos.

ejemplo

nodePairs = edgeNodePairs(poseGraph,edgeIDs) devuelve bordes correspondientes a los ID de borde especificados. Cada borde en el gráfico de pose tiene una identificación única incluso si los pares de nodos son los mismos.

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

Pares de nodos de borde en un gráfico de pose, devueltos como n-por-2 matriz que enumera los ID de los dos nodos que conecta cada borde. Cada fila es un par de nodos que forman una arista. Pueden existir múltiples aristas entre el mismo par de nodos, por lo que la matriz puede contener entradas duplicadas.

Capacidades ampliadas

Historial de versiones

Introducido en R2019b

expandir todo