exponenta event banner

occupancyMap

Создание карты занятости с вероятностными значениями

Описание

occupancyMap создает 2-D объект карты сетки занятости. Каждая ячейка в сетке занятости имеет значение, представляющее вероятность занятости этой ячейки. Значения, близкие к 1, представляют высокую вероятность того, что ячейка содержит препятствие. Значения, близкие к 0, представляют высокую вероятность того, что ячейка не занята и не содержит препятствий.

Карты занятости используются в алгоритмах навигации, таких как планирование путей (см. plannerRRT). Они также используются в приложениях отображения для поиска путей без столкновений, выполнения предотвращения столкновений и вычисления локализации (см. monteCarloLocalization). Карту заполняемости можно изменить в соответствии с конкретным приложением.

occupancyMap объекты поддерживают локальные координаты, мировые координаты и индексы сетки. Первое расположение сетки с индексом (1,1) начинается в левом верхнем углу сетки.

Используйте occupancyMap класс для создания 2-D карт среды со значениями вероятности, представляющими различные препятствия в вашем мире. Можно указать точные значения вероятности ячеек или включить наблюдения с датчиков, таких как лазерные сканеры.

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

Создание

Описание

map = occupancyMap(width,height) создает 2-D объект карты занятости, представляющий мировое пространство width и height в метрах. Разрешение сетки по умолчанию - 1 ячейка на метр.

пример

map = occupancyMap(width,height,resolution) создает карту занятости с заданным разрешением сетки в ячейках на метр. resolution задает свойство «Разрешение».

map = occupancyMap(rows,cols,resolution,'grid') создает карту заполнения с заданным количеством строк и столбцов и разрешением в ячейках на метр. Значения rows и cols задает свойство GridSize.

map = occupancyMap(p) создает карту занятости из значений в матрице p. Размер сетки соответствует размеру матрицы, причем каждое значение вероятности ячейки интерпретируется из расположения матрицы.

пример

map = occupancyMap(p,resolution) создает карту занятости из указанной матрицы и разрешения в ячейках на метр.

map = occupancyMap(sourcemap) создает объект с использованием значений из другого occupancyMap объект.

map = occupancyMap(sourcemap,resolution) создает объект с использованием значений из другого occupancyMap объект, но выполняет повторную выборку матрицы с заданным разрешением.

Входные аргументы

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

Ширина карты, заданная как скаляр в метрах.

Высота карты, заданная как скаляр в метрах.

Разрешение сетки, указанное как скаляр в ячейках на метр.

Число строк в сетке, указанное как положительное скалярное целое число.

Число столбцов в сетке, указанное как положительное скалярное целое число.

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

Объект карты занятости, указанный как occupancyMap объект.

Свойства

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

Порог, ниже которого ячейки считаются свободными от препятствий, указанный как скаляр между 0 и 1 включительно. Ячейки со значениями вероятности ниже этого порога считаются свободными от препятствий. Это свойство также определяет свободные расположения для планирования путей при использовании таких объектов, как plannerRRT.

Типы данных: double

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

Типы данных: double

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

Типы данных: double

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

Количество строк и столбцов в сетке, сохраненное в виде вектора вещественного значения 1 на 2, представляющего количество строк и столбцов в указанном порядке.

Типы данных: double

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

Разрешение сетки, хранящееся в виде скаляра в ячейках на метр, представляющего количество и размер расположений сетки.

Типы данных: double

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

Минимальное и максимальное значения координат x в локальном кадре, хранящиеся в виде двухэлементного горизонтального вектора формы [min max]. Локальный кадр определяется LocalOriginInWorld собственность.

Типы данных: double

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

Минимальное и максимальное значения координат y в локальном кадре, хранящиеся в виде двухэлементного горизонтального вектора формы [min max]. Локальный кадр определяется LocalOriginInWorld собственность.

Типы данных: double

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

Минимальное и максимальное значения мирового диапазона координат x, сохраненные в виде вектора 1 на 2, представляющего минимальное и максимальное значения, в этом порядке.

Типы данных: double

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

Минимальное и максимальное значения мирового диапазона координат y, сохраненные в виде вектора 1 на 2, представляющего минимальное и максимальное значения, в этом порядке.

Типы данных: double

мировые координаты нижнего левого угла сетки, заданные как вектор 1 на 2.

Типы данных: double

Местоположение начала локального кадра в мировых координатах, определяемое как двухэлементный вектор, [xLocal yLocal]. Используйте move используется для перемещения локальной рамы по мере перемещения транспортного средства.

Типы данных: double

Расположение нижнего левого угла сетки в локальных координатах, заданных как двухэлементный вектор, [xLocal yLocal].

Типы данных: double

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

Типы данных: double

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

checkOccupancyПроверять местоположения на наличие свободных, занятых или неизвестных значений
copyСоздание копии сетки занятости
getOccupancyПолучение значения заполняемости местоположений
grid2localПреобразование индексов сетки в локальные координаты
grid2worldПреобразование индексов сетки в мировые координаты
inflateНадувать каждое занятое расположение сетки
insertRayВставить луч от наблюдения лазерного сканирования
local2gridПреобразование локальных координат в индексы сетки
local2worldПреобразование локальных координат в мировые
moveПереместить карту в мировой рамке
occupancyMatrixПреобразовать сетку занятости в двойную матрицу
raycastВычисление индексов ячеек вдоль луча
rayIntersectionПоиск точек пересечения лучей и занятых ячеек карты
setOccupancyУстановка значения заполняемости местоположений
showОтображение значений сетки на рисунке
syncWithСинхронизировать карту с перекрывающейся картой
updateOccupancyИнтеграция вероятностных наблюдений в местоположениях
world2gridПреобразование мировых координат в индексы сетки
world2localПреобразование мировых координат в локальные

Примеры

свернуть все

Создайте пустую сетку занятости.

map = occupancyMap(10,10,20);

Входная поза транспортного средства, диапазоны, углы и максимальный диапазон лазерного сканирования.

pose = [5,5,0];
ranges = 3*ones(100,1);
angles = linspace(-pi/2,pi/2,100);
maxrange = 20;

Создать lidarScan с указанными диапазонами и углами.

scan = lidarScan(ranges,angles);

Вставьте данные лазерного сканирования в карту занятости.

insertRay(map,pose,scan,maxrange);

Отображение карты для просмотра результатов вставки лазерного сканирования.

show(map)

Figure contains an axes. The axes with title Occupancy Grid contains an object of type image.

Проверьте наличие места непосредственно перед транспортным средством.

getOccupancy(map,[8 5])
ans = 0.7000

Добавьте второе чтение и просмотрите обновление значений занятости. Дополнительное считывание повышает доверие к показаниям. Свободные и занятые ценности становятся более отчетливыми.

insertRay(map,pose,scan,maxrange);
show(map)

Figure contains an axes. The axes with title Occupancy Grid contains an object of type image.

getOccupancy(map,[8 5])
ans = 0.8448

Преобразование файла PGM, содержащего карту ROS, в occupancyMap для использования в MATLAB.

Импорт изображения с помощью imread. Обрезайте изображение в области воспроизведения.

image = imread('playpen_map.pgm');
imageCropped = image(750:1250,750:1250);
imshow(imageCropped)

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

Значения PGM выражаются от 0 до 255 как uint8. Нормализовать эти значения путем преобразования обрезанного изображения в double и деление каждой ячейки на 255. На этом рисунке препятствия показаны как значения, близкие к 0. Вычитание нормализованного изображения из 1 для получения значений заполняемости с 1, представляющим занятое пространство.

imageNorm = double(imageCropped)/255;
imageOccupancy = 1 - imageNorm;

Создать occupancyMap с использованием скорректированного изображения карты. Разрешение импортированной карты составляет 20 ячеек на метр.

map = occupancyMap(imageOccupancy,20);
show(map)

Figure contains an axes. The axes with title Occupancy Grid contains an object of type image.

Ограничения

Значения заполняемости имеют ограниченное разрешение ± 0,001. Значения сохраняются какint16 с использованием представления логарифмов. Этот тип данных ограничивает разрешение, но экономит память при сохранении больших карт в MATLAB ®. При звонкеsetOccupancy а затем getOccupancy, возвращаемое значение может не совпадать с заданным. Дополнительные сведения см. в разделе Представления регистрационных шансов в Сетках занятости.

Если размер памяти является ограничением, рекомендуется использовать binaryOccupancyMap вместо этого. Двоичная карта занятости использует меньше памяти с двоичными значениями, но все еще работает с алгоритмами Navigation Toolbox™ и другими приложениями.

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

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

.

См. также

| (панель инструментов ROS) | (Панель инструментов ROS) | (Панель инструментов системы робототехники) | (Панель инструментов системы робототехники)

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