poseGraphSolverOptions

Опции решателя для оптимизации графика положения

Описание

пример

solverOptions = poseGraphSolverOptions(solverType) возвращает набор опций решателя со значениями по умолчанию для заданного типа решателя графика положения.

Примеры

свернуть все

Оптимизируйте график положения на основе узлов и ограничений по ребрам. Обрезка цикла закрыта на основе их ребра невязкой ошибок.

Загрузите набор данных, содержащий 2-D графики положения. Осмотрите poseGraph объект для просмотра числа узлов и замыканий цикла.

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

               NumNodes: 120
               NumEdges: 193
    NumLoopClosureEdges: 74
     LoopClosureEdgeIDs: [1x74 double]
        LandmarkNodeIDs: [1x0 double]

Постройте график положения с отключенными идентификаторами. Красные линии указывают на закрытие цикла, идентифицированное в наборе данных. Положения в графике должны следовать сетке, но показу свидетельством дрейфа с течением времени.

show(pg,'IDs','off');
title('Original Pose Graph')

Figure contains an axes. The axes with title Original Pose Graph contains 3 objects of type line.

Оптимизируйте график положения с помощью optimizePoseGraph функция. По умолчанию эта функция использует "builtin-trust-region" решатель. Поскольку график положения содержит некоторые плохие замыкания цикла, полученный график положения фактически нежелателен.

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

Figure contains an axes. The axes contains 225 objects of type line, text.

Проверьте остаточные ошибки ребра для исходного графика положения. Значения ошибки больших выбросов в конце указывают на плохие закрытия цикла.

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

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

Некоторые замыкания цикла должны быть отделены от графика положения на основе их остаточной ошибки. Используйте trimLoopClosures функция для обрезки замыканий плохих циклов. Установите максимальный и порог усечения для параметров триммера. Этот порог устанавливается на основе точности измерений и должен быть настроен для вашей системы.

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

solverOptions = poseGraphSolverOptions; 

Используйте trimLoopClosures функция с параметрами триммера и опциями решателя.

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

Из trimInfo выход, постройте график замыканий цикла, удаленный из оптимизированного графика положения. При построении графика с графиком остаточных ошибок ранее можно увидеть, что закрытие большого цикла ошибок было удалено.

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. The axes with title Edge Residual Errors and Removed Loop Closures contains 45 objects of type line. These objects represent Residual Errors, Removed Loop Closures.

Отобразите новый график положения с обрезкой замыканий плохих циклов.

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

Figure contains an axes. The axes contains 3 objects of type line.

Входные параметры

свернуть все

График положения решателя, заданный как 'builtin-trust-region' или 'g2o-levenberg-marquardt'.

Функция генерирует набор опций решателя со значениями по умолчанию для заданного типа решателя графика положения:

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'

Типы данных: char | string

Выходные аргументы

свернуть все

Опции решателя графика положения, заданные как набор параметров, сгенерированных вызовом poseGraphSolverOptions функция. Функция генерирует набор опций решателя с значениями по умолчанию для заданного типа решателя графика положения.

Если на solverType установлено значение "builtin-trust-region":

 ДефолтОписание
MaxIterations300Максимальное количество итераций, заданное как положительное целое число. Оптимизатор выходит после того, как превысит это количество итераций.
MaxTime500Максимально допустимое время, заданное как положительный числовой скаляр в секундах. Оптимизатор выходит после того, как превысит это время.
FunctionTolerance1e-8Нижняя граница изменения функции затрат, заданная как скаляр. Если изменение функции стоимости падает ниже этого значения между шагами оптимизации, оптимизатор выходит.
GradientTolerance0.5e-8Нижняя граница нормы градиента, заданная как скаляр. Норма градиента вычисляется на основе функции затрат оптимизации. Если норма падает ниже этого значения, оптимизатор выходит.
StepTolerance1e-12Нижняя граница размера шага, заданная как скаляр. Если норма шага оптимизации падает ниже этого значения, оптимизатор выходит.
InitialTrustRegionRadius100Радиус начальной доверительной области, заданный как скаляр.
VerboseOutput'off' или 'on'Отображение информации о промежуточной итерации в MATLAB® командная строка.

Если на solver установлено значение "g2o-levenberg-marquardt":

 ДефолтОписание
MaxIterations300Максимальное количество итераций, заданное как положительное целое число. Оптимизатор выходит после того, как превысит это количество итераций.
MaxTime500Максимально допустимое время, заданное как положительный числовой скаляр в секундах. Оптимизатор выходит после того, как превысит это время.
FunctionTolerance1e-8Нижняя граница изменения функции затрат, заданная как скаляр. Если изменение функции стоимости падает ниже этого значения между шагами оптимизации, оптимизатор выходит.
VerboseOutput'off' или 'on'Отображение информации о промежуточной итерации в командной строке MATLAB.

Введенный в R2020b