matchScansLine

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

Описание

relpose = matchScansLine(currScan,refScan,initialRelPose) оценивает относительное положение между двумя сканами на основе совпадающих функций линии, идентифицированных в каждом скане. Задайте исходное предположение на относительном положении, initialRelPose.

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

пример

[relpose,stats,debugInfo] = matchScansLine(___) возвращает дополнительную информацию об отладке, debugInfo, от основанного на линии результата сопоставления сканов.

пример

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

Примеры

свернуть все

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

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

load tb3_scanPair.mat
plot(s1)
hold on
plot(s2)
hold off

Figure contains an axes. The axes with title LiDAR Scan contains 2 objects of type line.

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

smoothnessThresh = 0.2;
compatibilityScale = 0.002;

Вызовите matchScansLine с высказанным исходным предположением и другими параметрами, заданными как пары "имя-значение". Функция вычисляет функции линии каждого скана, пытается совпадать с ними и использует полную оценку, чтобы получить различие в положении.

[relPose, stats, debugInfo] = matchScansLine(s2, s1, initGuess, ...
                                       'SmoothnessThreshold', smoothnessThresh, ...
                                       'CompatibilityScale', compatibilityScale);

После соответствия со сканами, debugInfo выведите дает вам информацию об обнаруженных параметрах функции линии, [rho alpha], и гипотеза которого показывает соответствие между сканами.

debugInfo.MatchHypothesis состояния, что первая, вторая, и шестая функция линии в s1 совпадайте с пятыми, вторыми, и четвертыми функциями в s2.

debugInfo.MatchHypothesis                                  
ans = 1×6

     5     2     0     0     0     4

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

exampleHelperShowLineFeaturesInScan(s1, s2, debugInfo, initGuess);

Figure contains 2 axes. Axes 1 with title s1 Line Features contains 16 objects of type line, text. Axes 2 with title s2 Line Features - Transformed contains 19 objects of type line, text.

Используйте предполагаемое относительное положение от matchScansLine преобразовать s2. Затем график оба скана, чтобы показать, что относительное различие в положении точно и наложение сканов, чтобы показать ту же среду.

s2t = transformScan(s2,relPose);
clf
plot(s1)
hold on
plot(s2t)
hold off

Figure contains an axes. The axes with title LiDAR Scan contains 2 objects of type line.

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

свернуть все

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

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

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

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

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

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

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

Пример: "LineMergeThreshold",[0.10 0.2]

Порог, чтобы обнаружить точки прерывания строки в скане в виде скаляра. Гладкость задана путем вызова diff(diff(scanData)) и принимает равномерно распределенные углы сканирования. Отсканируйте точки, соответствующие значениям гладкости выше, чем этот порог рассматривается точками останова. Для данных о скане лидара с более высоким уровнем шума увеличьте этот порог.

Минимальное количество скана указывает в каждой функции линии в виде положительного целого числа, больше, чем 3.

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

Порог на параметрах линии, чтобы объединить функции линии в виде двухэлементного векторного [rho alpha]. Линия задана двумя параметрами:

  • rho – Расстояние от источника до линии вдоль векторного перпендикуляра к линии, заданной в метрах.

  • alpha – Угол между x- ось и rho вектор, заданный в радианах.

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

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

Выдающееся положение измеряется, насколько локальные экстремальные значения выделяются в данных о лидаре. Только значения выше, чем эта нижняя граница рассматриваются углом. Углы помогают идентифицировать функции линии, но не являются частью самой функции. Для шумных данных о скане лидара увеличьте эту нижнюю границу.

Шкала раньше настраивала пороги совместимости для ассоциации функции в виде положительной скалярной величины. Более низкая шкала означает более трудный порог совместимости для соединения функций. Если никакие функции не найдены в данных о лидаре с очевидными функциями линии, увеличивают это значение. Для недопустимых соответствий функции уменьшайте это значение.

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

свернуть все

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

Информация о сопоставлении сканов, возвращенная как структура со следующими полями:

  • Covariance – 3х3 матрица, представляющая ковариацию относительной оценки положения. matScansLine функция не обеспечивает ковариацию между (x,y) и theta компоненты относительного положения. Поэтому матрица следует за шаблоном: [Cxx, Cxy 0; Cyx Cyy 0; 0 0 Ctheta].

  • ExitFlag – Скалярное значение, указывающее на выходное условие решателя:

    • 0 – Никакая ошибка.

    • 1 – Недостаточное количество функций линии (<2) найдено в одной или обоих из сканов. Рассмотрите использование различных сканов с большим количеством функций линии.

    • 2 – Недостаточное количество соответствий функции линии идентифицировано. Это может указать на initialRelPose недопустимо, или сканы слишком далеко друг от друга.

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

  • ReferenceFeatures – Функции линии извлечены из ссылочного скана как n-by-2 матрица. Каждая функция линии представлена как [rho alpha] для параметрического уравнения, rho = x ∙cos (alpha) + y ∙sin (alpha).

  • ReferenceScanMask – Маска, указывающая, какие точки в ссылочном скане используются для каждой функции линии как n-by-p матрица. Каждая строка соответствует строке в ReferenceFeatures и содержит нули и единицы для каждой точки в refScan.

  • CurrentFeatures – Функции линии извлечены из текущего скана как n-by-2 матрица. Каждая функция линии представлена как [rho alpha] для параметрического уравнения, rho = x ∙cos (alpha) + y ∙sin (alpha).

  • CurrentScanMask – Маска, указывающая, какие точки в текущем скане используются для каждой функции линии как n-by-p матрица. Каждая строка соответствует строке в ReferenceFeatures и содержит нули и единицы для каждой точки в refScan.

  • MatchHypothesis – Лучшая гипотеза соответствия функции линии как вектор элемента n, где n является количеством функций линии в CurrentFeatures. Каждый элемент представляет соответствующую функцию в ReferenceFeaturesи дает индекс совпадающей функции в ReferenceFeatures соответствие индекса

  • MatchValue – Скалярное значение, указывающее на счет к каждому MatchHypothesis. Нижнее значение рассматривается лучшим соответствием. Если два элемента MatchHypothesis имейте тот же индекс, функция с более низким счетом используется.

Ссылки

[1] Neira, J. и J.d. Tardos. “Ассоциация данных в Стохастическом Отображении Используя Объединенный Тест Совместимости”. Транзакции IEEE на Робототехнике и Автоматизации 17, № 6 (2001): 890–97. https://doi.org/10.1109/70.976019.

[2] Шен, Сяотун, Эмилио Фраццоли, Даниэла Рус и Марсело Х. Энг. “Быстрая Объединенная Ветвь Совместимости и Направляющийся в Соответствие Облака Функции”. 2016 Международных конференций IEEE/RSJ по вопросам Интеллектуальных Роботов и Систем (IROS), 2016. https://doi.org/10.1109/iros.2016.7759281.

Введенный в R2020a