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.

poseGraphSolverOptions

Opciones de solución para la optimización del gráfico de pose

Desde R2020b

Descripción

ejemplo

solverOptions = poseGraphSolverOptions(solverType) devuelve el conjunto de opciones de solver con valores predeterminados para el tipo de solver de gráfico de pose especificado.

Ejemplos

contraer todo

Optimice un gráfico de pose en función de los nodos y las restricciones de los bordes. Recorte el bucle cerrado en función de los errores residuales de sus bordes.

Cargue el conjunto de datos que contiene un gráfico de pose 2D. Inspeccione el objeto poseGraph para ver el número de nodos y cierres de bucle.

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

               NumNodes: 120
               NumEdges: 193
    NumLoopClosureEdges: 74
     LoopClosureEdgeIDs: [120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 ... ] (1x74 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. Las poses en el gráfico deben seguir un patrón de cuadrícula, pero muestran evidencia de variación con el tiempo.

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

Optimice el gráfico de pose usando la función optimizePoseGraph . De forma predeterminada, esta función utiliza el solver "builtin-trust-region" . Debido a que el gráfico de pose contiene algunos cierres de bucle incorrectos, el gráfico de pose resultante en realidad no es deseable.

pgOptim = optimizePoseGraph(pg);
figure;
show(pgOptim);

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

Observe los errores residuales de los bordes del gráfico de pose original. Los valores de error atípicos grandes al final indican cierres de bucle incorrectos.

resErrorVec = edgeResidualErrors(pg);
plot(resErrorVec);
title('Edge Residual Errors by Edge ID')

Figure contains an axes object. The axes object with title Edge Residual Errors by Edge ID contains an object of type line.

Ciertos cierres de bucle deben recortarse del gráfico de pose en función de su error residual. Utilice la función trimLoopClosures para recortar estos cierres de bucle incorrectos. Establezca el umbral máximo y de truncamiento para los parámetros del recortador. Este umbral se establece en función de la precisión de la medición y debe ajustarse a su sistema.

trimParams.MaxIterations = 100;
trimParams.TruncationThreshold = 25;

solverOptions = poseGraphSolverOptions; 

Utilice la función trimLoopClosures con los parámetros del recortador y las opciones del solver .

[pgNew, trimInfo, debugInfo] = trimLoopClosures(pg,trimParams,solverOptions);

A partir de la salida trimInfo , trace los cierres de bucle eliminados del gráfico de pose optimizado. Al trazar con el gráfico de errores residuales anterior, puede ver que se eliminaron los grandes cierres de bucles de errores.

removedLCs = trimInfo.LoopClosuresToRemove;

hold on
plot(removedLCs,zeros(length(removedLCs)),'or')
title('Edge Residual Errors and Removed Loop Closures')
legend('Residual Errors', 'Removed Loop Closures')
xlabel('Edge IDs')
ylabel('Edge Residual Error')
hold off

Figure contains an axes object. The axes object with title Edge Residual Errors and Removed Loop Closures, xlabel Edge IDs, ylabel Edge Residual Error contains 45 objects of type line. One or more of the lines displays its values using only markers These objects represent Residual Errors, Removed Loop Closures.

Muestre el nuevo gráfico de pose con los cierres de bucle defectuosos recortados.

show(pgNew,"IDs","off");

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

Argumentos de entrada

contraer todo

Tipo de solver de gráfico de pose, especificado como 'builtin-trust-region' o 'g2o-levenberg-marquardt'.

La función genera un conjunto de opciones de solver con valores predeterminados para el tipo de solver de gráfico de pose especificado:

pgSolverTrustRegion = poseGraphSolverOptions('builtin-trust-region')
pgSolverTrustRegion = 

TrustRegion (builtin-trust-region-dogleg) options:

               MaxIterations: 300
                     MaxTime: 10
           FunctionTolerance: 1.0000e-08
           GradientTolerance: 5.0000e-09
               StepTolerance: 1.0000e-12
    InitialTrustRegionRadius: 100
               VerboseOutput: 'off'
pgSolverG2o = poseGraphSolverOptions('g2o-levenberg-marquardt')
pgSolverG2o = 

G2oLevenbergMarquardt (g2o-levenberg-marquardt) options:

        MaxIterations: 300
              MaxTime: 10
    FunctionTolerance: 1.0000e-09
        VerboseOutput: 'off'

Tipos de datos: char | string

Argumentos de salida

contraer todo

Opciones del solver de gráficos Pose, especificadas como un conjunto de parámetros generados al llamar a la función poseGraphSolverOptions . La función genera un conjunto de opciones de solver con valores predeterminados para el tipo de solver de gráfico de pose especificado.

Si la entrada solverType se establece en "builtin-trust-region":

 Por defectoDescripción
MaxIterations300Número máximo de iteraciones, especificado como un entero positivo. El optimizador sale después de exceder este número de iteraciones.
MaxTime500Tiempo máximo permitido, especificado como un escalar numérico positivo en segundos. El optimizador sale después de exceder este tiempo.
FunctionTolerance1e-8Límite inferior del cambio en la función de costes, especificado como escalar. Si el cambio de la función de costes cae por debajo de este valor entre los pasos de optimización, el optimizador sale.
GradientTolerance0.5e-8Límite inferior de la norma del gradiente, especificado como escalar. La norma del gradiente se calcula en función de la función de coste de la optimización. Si la norma cae por debajo de este valor, el optimizador sale.
StepTolerance1e-12Límite inferior del tamaño del paso, especificado como escalar. Si la norma del paso de optimización cae por debajo de este valor, el optimizador sale.
InitialTrustRegionRadius100Radio de la región de confianza inicial, especificado como escalar.
VerboseOutput'off' o 'on'Muestra información de iteración intermedia en la línea de comando MATLAB® .

Si la entrada solver se establece en "g2o-levenberg-marquardt":

 Por defectoDescripción
MaxIterations300Número máximo de iteraciones, especificado como un entero positivo. El optimizador sale después de exceder este número de iteraciones.
MaxTime500Tiempo máximo permitido, especificado como un escalar numérico positivo en segundos. El optimizador sale después de exceder este tiempo.
FunctionTolerance1e-8Límite inferior del cambio en la función de costes, especificado como escalar. Si el cambio de la función de costes cae por debajo de este valor entre los pasos de optimización, el optimizador sale.
VerboseOutput'off' o 'on'Muestra información de iteración intermedia en la línea de comando MATLAB .

Historial de versiones

Introducido en R2020b