робототехника. Класс OccupancyMap3D

Пакет: робототехника

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

Описание

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

Конструкция

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

пример

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

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

Свойства

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

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

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

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

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

Методы

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

Примеры

свернуть все

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

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

map3D = robotics.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)

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

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

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

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

show(map3D)

Алгоритмы

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

Ссылки

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

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

Классы

Функции

Введенный в R2018a