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.

edgeResidualErrors

Calcular los errores residuales del borde del gráfico de pose

Desde R2020b

    Descripción

    resErrorVec = edgeResidualErrors(poseGraphObj) devuelve los errores residuales para cada borde en el gráfico de pose con las estimaciones del nodo de pose actual. El orden de los errores residuales coincide con el orden de los ID de borde en poseGraph.

    ejemplo

    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

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

    Argumentos de salida

    contraer todo

    Errores residuales de borde para el gráfico de pose, especificados como un vector de escalares positivos.

    Capacidades ampliadas

    Historial de versiones

    Introducido en R2020b