matchScansGrid

Оцените положение между двумя сканированиями лазерного дальномера с помощью основанного на сетке поиска

Синтаксис

pose = matchScansGrid(currScan,refScan)
[pose,stats] = matchScansGrid(___)
[___] = matchScansGrid(___,Name,Value)

Описание

пример

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

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

[___] = matchScansGrid(___,Name,Value) задает опции с помощью одного или нескольких аргументов пары Name,Value. Например, 'InitialPose',[1 1 pi/2] задает начальную оценку положения для соответствия сканирования.

Примеры

свернуть все

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

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

load laserScans.mat scan scan2
plot(scan)
hold on
plot(scan2)
hold off

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

relPose = matchScansGrid(scan2,scan);

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

scan2Tformed = transformScan(scan2,relPose);

plot(scan)
hold on
plot(scan2Tformed)
hold off

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

свернуть все

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

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

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

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

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

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

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

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

Ячейки сетки на метр, заданный как пара, разделенная запятой, состоящая из 'Resolution' и положительного целого числа. Точность результата соответствия сканирования точна до размера ячейки сетки.

Максимальная область значений датчика лазерного дальномера, заданного как пара, разделенная запятой, состоящая из 'MaxRange' и положительной скалярной величины.

Поисковая область значений для перевода, заданного как пара, разделенная запятой, состоящая из 'TranslationSearchRange' и вектора [x y]. Эти значения задают окно поиска в метрах вокруг начальной оценки перевода, данной в InitialPose. Если InitialPose дан как [x0 y0], то координатами окна поиска является [x0-x x0+x] и [y0-y y0+y]. Этот параметр используется только, когда InitialPose задан.

Поисковая область значений для вращения, заданного как пара, разделенная запятой, состоящая из 'RotationSearchRange' и положительной скалярной величины. Это значение задает окно поиска в радианах вокруг начальной оценки вращения, данной в InitialPose. Если вращение InitialPose дано как th0, то окном поиска является [th0-a th0+a], где a является областью значений поиска вращения. Этот параметр используется только, когда InitialPose задан.

Уровень максимального разрешения используется для соответствия сканирования, заданного как пара, разделенная запятой, состоящая из 'MaxLevel' и положительного целого числа. Уровень ниже 6 рекомендуется. Уменьшение уровня ускоряет производительность, но может привести к более грубому разрешению соответствующего решения.

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

свернуть все

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

Отсканируйте соответствие со статистикой, возвращенной как структура со следующим полем:

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

Ссылки

[1] Гесс, Вольфганг, Дэймон Колер, Хольгер Рапп и Дэниел Андор. "Закрытие цикла в реальном времени в 2D ЛАЗЕРНОМ ДАЛЬНОМЕРЕ SLAM". 2 016 международных конференций IEEE по вопросам робототехники и автоматизации (ICRA). 2016.

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

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Введенный в R2018a