scanContextLoopDetector

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

Описание

scanContextLoopDetector обнаруживает закрытия цикла в данных об облаке точек с помощью глобальных дескрипторов контекста скана. scan context descriptor кодирует представление облака точек в 2D дескриптор. scanContextLoopDetector хранит дескрипторы соответствующим идентификатором представления, чтобы сопоставить обнаруженные закрытия цикла к представлению в pcviewset для создания карты.

Создание

Описание

пример

loopDetector = scanContextLoopDetector() создает scanContextLoopDetector по умолчанию объект. Используйте addDescriptor возразите функции, чтобы добавить дескрипторы в детектор цикла. Используйте detectLoop возразите функции, чтобы обнаружить закрытия цикла.

Свойства

развернуть все

Это свойство доступно только для чтения.

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

Это свойство доступно только для чтения.

Отсканируйте дескрипторы контекста в виде M-by-N-by-P массив. M является количеством радиальных интервалов, и N является количеством азимутальных интервалов в дескрипторе. P является количеством дескрипторов в детекторе.

Функции объекта

addDescriptorДобавьте дескриптор в детектор закрытия цикла
deleteDescriptorУдалите дескрипторы из детектора закрытия цикла
detectLoopОбнаружьте закрытия цикла

Примеры

свернуть все

Создайте детектор закрытия цикла.

loopDetector = scanContextLoopDetector;

Создайте средство чтения файлов Velodyne PCAP.

veloReader = velodyneFileReader('lidarData_ConstructionRoad.pcap','HDL32E');

Считайте облака точек и извлеките дескриптор контекста скана из каждого скана облака точек. Добавьте дескрипторы в детектор.

for viewId = 1:10
    ptCloud = readFrame(veloReader,viewId);
    descriptor = scanContextDescriptor(ptCloud);
    addDescriptor(loopDetector,viewId,descriptor);
end

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

viewId = viewId + 1;
ptCloud = readFrame(veloReader,viewId);
descriptor = scanContextDescriptor(ptCloud);
[loopViewId,dists] = detectLoop(loopDetector,descriptor,'NumExcludedDescriptors',0)
loopViewId = uint32
    10
dists = single
    0.0831
Введенный в R2021b