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, представляющая Гессиана функции затрат NDT в заданном pose решение. Гессиан используется в качестве индикатора неопределенности, связанной с оценкой положения.

Ссылки

[1] Biber, P., and W. Strasser. Преобразование нормальных распределений: новый подход к лазерному Сопоставлению сканов. Интеллектуальные роботы и системные труды. 2003.

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

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

.
Введенный в R2019b