exponenta event banner

occupancyMap3D

Создать карту занятости 3-D

Описание

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

Создание

Описание

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 объект сохраняет препятствия в 3-D пространстве, используя наблюдения датчиков для отображения среды. Создайте карту и добавьте точки из облака точек для определения препятствий. Затем надувайте препятствия на карте, чтобы обеспечить безопасное рабочее пространство вокруг препятствий.

Создание 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. The axes with title Occupancy Map contains an object of type patch.

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

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

Figure contains an axes. The axes 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. The axes with title Occupancy Map contains an object of type patch.

Алгоритмы

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

Ссылки

[1] Хорнунг, Армин, Кай М. Вурм, Марен Бенневиц, Сирилл Стахнисс и Вольфрам Бургард. «OctoMap: эффективная вероятностная структура отображения 3D, основанная на octrees». Автономные роботы, т. 34, № 3, 2013, стр. 189-206.. doi: 10.1007/s10514-012-9321-0.

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

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

.

См. также

Классы

Функции

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