exponenta event banner

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