exponenta event banner

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-axis и 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 (альфа) + y∙sin (альфа).

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

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

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

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

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

Ссылки

[1] Neira, J. и J.d. Тардос. IEEE Transactions on Robotics and Automation 17, No. 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