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)

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

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
Для просмотра документации необходимо авторизоваться на сайте