occupancyMap3D

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

Описание

The 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Обновление вероятности заполнения в местоположениях

Примеры

свернуть все

The 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. 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] Hornung, Armin, Kai M. Wurm, Maren Bennewitz, Cyrill Stachniss и Wolfram Burgard. OctoMap: эффективная вероятностная среда 3D отображения, основанная на октреях. Автономные роботы, Том 34, № 3, 2013, с. 189-206.. doi: 10.1007/s10514-012-9321-0.

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

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

.

См. также

Классы

Функции

Введенный в R2019b