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

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

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);

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

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

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

свернуть все

Текущие показания сканирования лидара в виде 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