occupancyMap

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

Описание

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

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

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

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

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

Создание

Описание

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

пример

map = occupancyMap(width,height,resolution) создает карту заполнения с заданным разрешением сетки в ячейках на метр. 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 объект.

Свойства

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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)

Проверяйте заполнение пятна непосредственно перед транспортным средством.

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

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

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

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

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

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

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

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

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

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

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

Ограничения

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

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

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

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

Введенный в R2019b