exponenta event banner

matchScans

Оценка позы между двумя лазерными сканированиями

Описание

пример

pose = matchScans(currScan,refScan) находит относительную позу между привязкой lidarScan и ток lidarScan объект, использующий преобразование нормальных распределений (NDT).

пример

pose = matchScans(currRanges,currAngles,refRanges,refAngles) находит относительную позу между двумя лазерными сканированиями, заданными как диапазоны и углы.

[pose,stats] = matchScans(___) возвращает дополнительные статистические данные о результатах проверки с использованием предыдущих входных аргументов.

[___] = matchScans(___,Name,Value) указывает дополнительные параметры, указанные одним или несколькими Name,Value аргументы пары.

Примеры

свернуть все

Создание эталонного лидарного сканирования с помощью lidarScan. Укажите диапазоны и углы в качестве векторов.

refRanges = 5*ones(1,300);
refAngles = linspace(-pi/2,pi/2,300); 
refScan = lidarScan(refRanges,refAngles);

Использование transformScan (Robotics System Toolbox), создание второго лидарного сканирования на x,y смещение (0.5,0.2).

currScan = transformScan(refScan,[0.5 0.2 0]);

Сопоставьте эталонное сканирование и второе сканирование, чтобы оценить разницу между ними.

pose = matchScans(currScan,refScan);

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

currScan2 = transformScan(currScan,pose);

subplot(2,1,1);
hold on
plot(currScan)
plot(refScan)
title('Original Scans')
hold off

subplot(2,1,2);
hold on
plot(currScan2)
plot(refScan)
title('Aligned Scans')
xlim([0 5])
hold off

Figure contains 2 axes. Axes 1 with title Original Scans contains 2 objects of type line. Axes 2 with title Aligned Scans contains 2 objects of type line.

В этом примере используется 'fminunc' алгоритм решателя для выполнения сопоставления сканирования. Этот алгоритм решателя требует лицензии Optimization Toolbox™.

Укажите эталонное лазерное сканирование в качестве диапазонов и углов.

refRanges = 5*ones(1,300);
refAngles = linspace(-pi/2,pi/2,300);

Использование transformScan (Robotics System Toolbox), создать второе лазерное сканирование на x,y смещение (0.5,0.2).

[currRanges,currAngles] = transformScan(refRanges,refAngles,[0.5 0.2 0]);

Сопоставьте эталонное сканирование и второе сканирование, чтобы оценить разницу между ними.

pose = matchScans(currRanges,currAngles,refRanges,refAngles,'SolverAlgorithm','fminunc');

Улучшите оценку, дав начальную оценку позы.

pose = matchScans(currRanges,currAngles,refRanges,refAngles,...
                  'SolverAlgorithm','fminunc','InitialPose',[-0.4 -0.1 0]);

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

[currRanges2,currAngles2] = transformScan(currRanges,currAngles,pose);

[x1, y1] = pol2cart(refAngles,refRanges);
[x2, y2] = pol2cart(currAngles,currRanges);
[x3, y3] = pol2cart(currAngles2,currRanges2);

subplot(1,2,1)
plot(x1,y1,'o',x2,y2,'*r')
title('Original Scans')
subplot(1,2,2)
plot(x1,y1,'o',x3,y3,'*r')
title('Aligned Scans')

Figure contains 2 axes. Axes 1 with title Original Scans contains 2 objects of type line. Axes 2 with title Aligned Scans contains 2 objects of type line.

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

свернуть все

Текущие показания сканирования лидара, указанные как lidarScan объект.

Сканирование лидара может содержать Inf и NaN значения, но алгоритм игнорирует их.

Ссылочные показания сканирования лидара, указанные как lidarScan объект.

Сканирование лидара может содержать Inf и NaN значения, но алгоритм игнорирует их.

Текущие диапазоны лазерного сканирования, заданные как вектор. Диапазоны даны как расстояния до объектов, измеренные от лазерного датчика.

Диапазоны лазерного сканирования могут содержать Inf и NaN значения, но алгоритм игнорирует их.

Текущие углы лазерного сканирования, заданные как вектор в радианах. Углы даны как ориентации соответствующих измерений диапазона.

Эталонные диапазоны лазерного сканирования, заданные как вектор в метрах. Диапазоны даны как расстояния до объектов, измеренные от лазерного датчика.

Диапазоны лазерного сканирования могут содержать Inf и NaN значения, но алгоритм игнорирует их.

Опорные углы лазерного сканирования, заданные как вектор в радианах. Углы даны как ориентации соответствующих измерений диапазона.

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: "InitialPose",[1 1 pi/2]

Алгоритм оптимизации, указанный как "trust-region" или "fminunc". Используя "fminunc" требуется лицензия Optimization Toolbox™.

Начальное предположение о текущей позе относительно эталонного лазерного сканирования, определяемого как разделенная запятыми пара, состоящая из "InitialPose" и [x y theta] вектор. [x y] - перевод в метрах и theta - поворот в радианах.

Длина стороны ячейки в метрах, указанная как разделенная запятыми пара, состоящая из "CellSize" и числовой скаляр. matchScans использует размер ячейки для дискретизации пространства для алгоритма NDT.

Настройка размера ячейки важна для правильного использования алгоритма NDT. Оптимальный размер ячейки зависит от входного сканирования и среды робота. Большие размеры ячеек могут привести к менее точному соответствию с плохо отобранными областями. Меньшие размеры ячеек требуют больше памяти и меньше вариаций между последующими сканированиями. Шум датчика влияет и на алгоритм с меньшими размерами ячеек. Выбор подходящего размера ячейки зависит от масштаба среды и входных данных.

Максимальное количество итераций, указанное как пара, разделенная запятыми, состоящая из "MaxIterations" и скалярное целое число. Большее число итераций приводит к более точным оценкам позы, но за счет более длительного времени выполнения.

Нижняя граница при изменении оценки NDT, указанная как пара, разделенная запятыми, состоящая из "ScoreTolerance" и числовой скаляр. Оценка NDT хранится в Score поле вывода stats структура. Между итерациями, если оценка изменяется меньше, чем этот допуск, алгоритм сходится к решению. Меньший допуск приводит к более точным оценкам позы, но требует более длительного времени выполнения.

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

свернуть все

Позиция текущего сканирования относительно эталонного сканирования, возвращенная как [x y theta], где [x y] - перевод в метрах и theta - поворот в радианах.

Сканировать статистику соответствия, возвращенную в виде структуры со следующими полями:

  • Score - Числовой скаляр, представляющий оценку NDT при выполнении сопоставления сканирования. Эта оценка представляет собой оценку вероятности того, что преобразованное текущее сканирование соответствует эталонному сканированию. Score всегда неотрицательно. Более крупные баллы указывают на лучшее совпадение.

  • Hessian - матрица 3 на 3, представляющая гессен функции стоимости неразрушающего контроля при данном pose решение. Гессен используется как индикатор неопределенности, связанной с оценкой позы.

Ссылки

[1] Бибер, П. и В. Штрассер. «Преобразование нормальных распределений: новый подход к сопоставлению лазерного сканирования». Интеллектуальные роботы и системные процедуры. 2003.

[2] Магнуссон, Мартин. «Преобразование трехмерных нормальных распределений - эффективное представление для регистрации, анализа поверхности и обнаружения петель». Кандидатская диссертация. Университет Эребру, Школа науки и техники, 2009 год.

Расширенные возможности

.
Представлен в R2019b