exponenta event banner

pcmapndt

Карта локализации на основе преобразования нормальных распределений (NDT)

    Описание

    pcmapndt объект создает карту преобразования нормальных распределений (NDT) из предварительно созданной карты облака точек среды. Карта NDT представляет собой сжатое, эффективное с точки зрения памяти представление, пригодное для локализации. Объект преобразовывает карту облака пункта в ряд voxels (3D коробки), каждый представленный 3D нормальным распределением. Используйте selectSubmap объектная функция для выбора подкарты в пределах карты из грубой оценки положения. Используйте findPose функция объекта для локализации позы датчика на основе собранной карты.

    Создание

    Описание

    пример

    ndtMap = pcmapndt(ptCloudMap,voxelSize) возвращает карту неразрушающего контроля из карты облака точек, ptCloudMap.

    Свойства

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

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

    Выбранная в настоящее время подкарта, заданная как 6-элементный вектор вида [xmin, xmax ymin ymax zmin zmax], который описывает диапазон подкарты вдоль каждой оси. Элементы вектора описывают интересующую область, представленную подкартой.

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

    Размер вокселей, определяемый как скалярное значение в мировых единицах.

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

    Диапазон карты вдоль оси X, заданный как 2-элементный вектор вида [xmin xmax].

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

    Диапазон карты вдоль оси Y, заданный как 2-элементный вектор вида [ymin ymax].

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

    Диапазон карты вдоль оси z, заданный как 2-элементный вектор вида [zmin zmax].

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

    Среднее значение каждого вокселя, указанное как матрица M-by-3. Каждая строка матрицы содержит значения [x y z] для вокселя. M - количество вокселов.

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

    Ковариация каждого вокселя, заданного как 3-by-3-by-M массив для М вокселей.

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

    Количество точек в каждом вокселе, указанное как вектор M-by-1 для М вокселей.

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

    selectSubmapВыбор подкарты в карте
    isInsideSubmapПроверьте, находится ли позиция запроса внутри выбранной подкарты
    findPoseЛокализация облака точек на карте с использованием алгоритма преобразования нормальных распределений (NDT)
    showВизуализация карты преобразования нормальных распределений (NDT)

    Примеры

    свернуть все

    Загрузите карту преобразования нормальных распределений (NDT) из файла MAT.

    data = load('ndtMapParkingLot.mat');
    ndtMap = data.ndtMapParkingLot;

    Загрузка результатов сканирования облака точек и оценок позы из второго файла MAT.

    data = load('parkingLotData.mat');
    ptCloudScans = data.parkingLotData.ptCloudScans;
    initPoseEsts = data.parkingLotData.initPoseEsts;

    Отображение карты неразрушающего контроля.

    show(ndtMap)

    Измените угол обзора на вид сверху.

    view(2)

    Выберите подкарту с центром вокруг первой оценки.

    center = initPoseEsts(1).Translation;
    sz = [70 50 20];
    ndtMap = selectSubmap(ndtMap,center,sz);

    Задайте радиус для визуализации текущего местоположения и порог расстояния для обновления подкарты.

    radius = 0.5;
    distThresh = 15;

    Закольцовывайте облака точек, локализуйте их на карте и при необходимости обновите выбранную подкарту.

    numScans   = numel(ptCloudScans);
      
    for n = 1:numScans
        ptCloud = ptCloudScans(n);
        initPose = initPoseEsts(n);
    
        poseTranslation = initPose.Translation;
        [isInside,distToEdge] = isInsideSubmap(ndtMap,poseTranslation);
        submapNeedsUpdate = ~isInside ...       % Current pose is outside submap
            || any(distToEdge(1:2) < distThresh);   % Current pose is close to submap edge
    
    if submapNeedsUpdate
        ndtMap = selectSubmap(ndtMap,poseTranslation,sz);
    end
    
    % Localize the point cloud scan in the map.
    currPose = findPose(ndtMap,ptCloud,initPose);
    
    % Display the position of the estimate as a circle.
    pos = [currPose.Translation(1:2) radius]; 
    showShape('circle',pos,'Color','r');
    
    % Pause to view the change.
    pause(0.05)
    end

    Figure contains an axes. The axes contains an object of type scatter.

    Ссылки

    Бибер, П. и В. Штрассер. «Преобразование нормальных распределений: новый подход к сопоставлению лазерного сканирования». Международная конференция IEEE/RSJ по интеллектуальным роботам и системам (IROS 2003) (Cat. No.03CH37453) Т. 3, 2743-48. Лас-Вегас, Невада, США: IEEE, 2003. https://doi.org/10.1109/IROS.2003.1249285.

    [1] Магнуссон, Мартин. «Преобразование трехмерных нормальных распределений: эффективное представление для регистрации, анализа поверхности и обнаружения петель». Кандидатская диссертация, университет Эребру, 2009 год. http://urn.kb.se/resolve?urn=urn: nbn: se: oru: diva-8458 urn: nbn: se: oru: diva-8458.

    Расширенные возможности

    Создание кода C/C + +
    Создайте код C и C++ с помощью MATLAB ® Coder™

    .

    См. также

    Функции

    Представлен в R2021a