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

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

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

Описание

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

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

Объекты OccupancyGrid поддерживают мировые и декартовы координаты. Источник мировых координат задан свойством GridLocationInWorld объекта, который задает нижний левый угол сетки. Номер и размер местоположений сетки заданы свойством Resolution. Первое местоположение сетки с индексом (1,1) начинается в верхнем левом углу сетки.

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

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

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

Конструкция

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

map = robotics.OccupancyGrid(width,height,resolution) создает сетку заполнения с заданным разрешением сетки в ячейках на метр.

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

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

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

Входные параметры

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

Сопоставьте ширину, заданную как скаляр в метрах.

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

Сопоставьте высоту, заданную как скаляр в метрах.

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

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

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

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

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

Свойства

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

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

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

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

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

Количество строк и столбцов в сетке, сохраненной как вектор [rows cols].

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

Минимальные и максимальные мировые значения области значений x - координаты, сохраненные как вектор [min max]. Это значение только для чтения.

Минимальные и максимальные мировые значения области значений y - координаты, сохраненные как вектор [min max]. Это значение только для чтения.

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

Методы

checkOccupancyПроверяйте местоположения бесплатно, занятые, или неизвестные значения
копияСоздайте копию сетки заполнения
getOccupancyПолучите заполнение местоположения
grid2worldПреобразуйте индексы сетки в мировые координаты
раздутьРаздуйте каждое занятое местоположение сетки
insertRayВставьте луч от лазерного наблюдения сканирования
occupancyMatrixПреобразуйте сетку заполнения, чтобы удвоить матрицу
rayIntersectionВычислите точки пересечения карты лучей
raycastВычислите индексы ячейки вдоль луча
setOccupancyУстановите заполнение местоположения
showПокажите значения сетки в фигуре
updateOccupancyИнтегрируйте наблюдение вероятности в местоположении
world2gridПреобразуйте мировые координаты в индексы сетки

Примеры

свернуть все

Возьмите область значений и угловые показания от лазерного сканирования и вставьте эти показания в сетку заполнения.

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

map = robotics.OccupancyGrid(10,10,20);

Вставьте лазерное сканирование в сетку заполнения. Задайте положение областей значений робота и углов и макс. области значений лазерного сканирования.

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

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

show(map)

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

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

insertRay(map,pose,ranges,angles,maxrange);
show(map)

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

Преобразуйте портативный graymap (.pgm) файл, содержащий карту ROS в карту OccupancyGrid для использования в 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;

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

map = robotics.OccupancyGrid(imageOccupancy,20);
show(map)

Ограничения

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

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

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

Введенный в R2017b