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 объект.

Свойства

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

Порог, ниже которого ячейки рассматриваются без препятствий в виде скаляра между 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

[x, y] мировые координаты нижнего левого угла сетки в виде вектора 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

Преобразуйте портативный graymap (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™.

Введенный в R2019b