occupancyMap3D

Создайте 3-D карту заполнения

Описание

occupancyMap3D класс хранит 3-D информацию карты и карты. Карта хранится как вероятностные значения в структуре данных дерева октантов. Класс обрабатывает произвольные среды и расширяет его размер динамически на основе входных параметров наблюдения. Можно добавить наблюдения как облака точек или как определенные местоположения xyz. Эти наблюдения обновляют значения вероятности. Вероятностные значения представляют заполнение местоположений. Структура данных дерева октантов обрезает данные соответственно, чтобы остаться эффективной и в памяти и на диске.

Создание

Описание

omap = occupancyMap3D создает пустую 3-D карту заполнения без наблюдений и значений свойств по умолчанию.

пример

omap = occupancyMap3D(res) задает разрешение карты в ячейках/метр и устанавливает Resolution свойство.

omap = occupancyMap3D(res,Name,Value) создает объект с дополнительными опциями, заданными одним или несколькими Name,Value парные аргументы. Например, 'FreeThreshold',0.25 устанавливает порог, чтобы считать ячейки без препятствий как значение вероятности 0,25. Заключите каждое имя свойства в кавычки.

Свойства

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

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

Порог, чтобы рассмотреть ячейки как без препятствий в виде положительной скалярной величины. Значения вероятности ниже этого порога рассматриваются без препятствий.

Порог, чтобы рассмотреть ячейки, как занято в виде положительной скалярной величины. Значения вероятности выше этого порога рассматриваются занятыми.

Насыщение ограничивает на значениях вероятности в виде [min max] вектор. Значения выше или ниже этих степеней насыщения установлены к min или max значения. Это свойство уменьшает перенасыщение ячеек при слиянии нескольких наблюдений.

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

checkOccupancyПроверяйте, свободны ли местоположения или заняты
getOccupancyПолучите вероятность заполнения местоположений
inflateРаздуйте карту
insertPointCloudВставьте 3-D точки или наблюдение облака точек в карту
rayIntersectionНайдите точки пересечения лучей и занятых ячеек карты
setOccupancyУстановите вероятность заполнения местоположений
showПокажите карту заполнения
updateOccupancyОбновите вероятность заполнения в местоположениях

Примеры

свернуть все

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

Создайте occupancyMap3D объект с разрешением карты 10 ячеек/метр.

map3D = occupancyMap3D(10);

Задайте набор 3-D точек как наблюдение от положения [x y z qw qx qy qz]. Это положение для датчика, который наблюдает эти точки и сосредоточен на источнике. Задайте два набора точек, чтобы вставить несколько наблюдений.

pose = [ 0 0 0 1 0 0 0];

points = repmat((0:0.25:2)', 1, 3);
points2 = [(0:0.25:2)' (2:-0.25:0)' (0:0.25:2)'];
maxRange = 5;

Вставьте первый набор точек с помощью insertPointCloud. Функция использует положение датчика и данные точки, чтобы вставить наблюдения в карту. Цвета отобразили коррелят к высоте точки только в иллюстративных целях.

insertPointCloud(map3D,pose,points,maxRange)
show(map3D)

Figure contains an axes object. The axes object with title Occupancy Map contains an object of type patch.

Вставьте второй набор точек. Луч между положением датчика (источник) и этими точками перекрывает точки от предыдущей вставки. Поэтому свободное пространство между датчиком и новыми точками обновлено и отмечено как свободное пространство.

insertPointCloud(map3D,pose,points2,maxRange)
show(map3D)

Figure contains an axes object. The axes object with title Occupancy Map contains an object of type patch.

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

vehicleRadius = 0.2;
safetyRadius = 0.3;
inflationRadius = vehicleRadius + safetyRadius;
inflate(map3D, inflationRadius);

show(map3D)

Figure contains an axes object. The axes object with title Occupancy Map contains an object of type patch.

Алгоритмы

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

Ссылки

[1] Hornung, Армин, Кай М. Верм, Марен Бенневитс, Кирилль Штахнисс и Вольфрам Burgard. "OctoMap: эффективная вероятностная 3D среда отображения на основе деревьев октантов". Автономные Роботы, Издание 34, № 3, 2013, стр 189–206.. doi:10.1007/s10514-012-9321-0.

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

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Смотрите также

Классы

Функции

Введенный в R2019b