matchScansLine

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

Описание

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

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

пример

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

пример

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

Примеры

свернуть все

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

Загрузите пару сканов лидара. The .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);

Используйте расчетное относительное положение из 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 вектор, заданный в радианах.

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

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

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

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

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

свернуть все

Положение текущего скана относительно ссылка скана, возвращаемое следующим [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 = <reservedrangesplaceholder3> cos (<reservedrangesplaceholder2>) + <reservedrangesplaceholder1> sin (<reservedrangesplaceholder0>).

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

  • CurrentFeatures -- функции линии, извлеченные из текущего скана как матрица n -by-2. Каждая функция линии представлена как [rho alpha] для параметрического уравнения, rho = <reservedrangesplaceholder3> cos (<reservedrangesplaceholder2>) + <reservedrangesplaceholder1> sin (<reservedrangesplaceholder0>).

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

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

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

Ссылки

[1] Neira, J. and J.d. Тардос. «Ассоциация данных в стохастическом отображении с использованием теста совместимости». Транзакции IEEE по робототехнике и автоматизации 17, № 6 (2001): 890-97. https://doi.org/10.1109/70.976019.

[2] Shen, Xiaotong, Emilio Frazzoli, Daniela Rus, and Marcelo H. Ang. «Fast Joint Compatibility Branch and Bound for Feature Cloud Matching». 2016 IEEE/RSJ International по интеллектуальным роботам и системам https://doi.org/10.1109/iros.2016.7759281.

См. также

|

Введенный в R2020b