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

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

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

Описание

BinaryOccupancyGrid создает 2D объект сетки заполнения, который можно использовать, чтобы представлять и визуализировать рабочую область робота, включая препятствия. Интегрирование данных о датчике и оценок положения создает пространственное представление аппроксимированных местоположений препятствий.

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

Каждая ячейка в сетке заполнения имеет значение, представляющее состояние заполнения той ячейки. Занятое местоположение представлено как true (1), и свободное местоположение представлено как false (0).

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

Конструкция

пример

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

map = robotics.BinaryOccupancyGrid(width,height,resolution) создает сетку с resolution, заданным в ячейках на метр. Карта находится в мировых координатах по умолчанию. Можно использовать любой из аргументов от предыдущих синтаксисов.

map = robotics.BinaryOccupancyGrid(rows,cols,resolution,"grid") создает 2D бинарную сетку заполнения размера (rows, cols).

пример

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

map = robotics.BinaryOccupancyGrid(p,resolution) создает a BinaryOccupancyGrid объект с resolution заданный в ячейках на метр.

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

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

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

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

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

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

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

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

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

Свойства

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

Количество строк и столбцов в сетке, сохраненной как двухэлементный горизонтальный вектор формы [rows cols]. Это значение только для чтения.

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

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

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

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

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

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

Методы

копияСкопируйте массив объектов указателя
getOccupancyПолучите значение заполнения для одного или нескольких положений
grid2worldПреобразуйте индексы сетки в мировые координаты
раздутьРаздуйте каждое занятое местоположение сетки
occupancyMatrixПреобразуйте сетку заполнения в матрицу
setOccupancyУстановите значение заполнения для одного или нескольких положений
showПокажите значения сетки заполнения
world2gridПреобразуйте мировые координаты в индексы сетки

Примеры

свернуть все

Создайте пустую карту на 10 м x 10 м.

map = robotics.BinaryOccupancyGrid(10,10,10);

Установите заполнение мировых местоположений и покажите карту.

map = robotics.BinaryOccupancyGrid(10,10,10);
x = [1.2; 2.3; 3.4; 4.5; 5.6];
y = [5.0; 4.0; 3.0; 2.0; 1.0];

setOccupancy(map, [x y], ones(5,1))
figure
show(map)

Раздуйте занятые местоположения данным радиусом.

inflate(map, 0.5)
figure
show(map)

Получите местоположения сетки от мировых местоположений.

ij = world2grid(map, [x y]);

Установите местоположения сетки на свободные местоположения.

setOccupancy(map, ij, zeros(5,1), 'grid')
figure
show(map)

Этот пример показывает, как преобразовать изображение в бинарную сетку заполнения для использования с Robotics System Toolbox®

% Import Image
filepath = fullfile(matlabroot,'examples','robotics','imageMap.png');
image = imread(filepath);

% Convert to grayscale and then black and white image based on arbitrary
% threshold.
grayimage = rgb2gray(image);
bwimage = grayimage < 0.5;

% Use black and white image as matrix input for binary occupancy grid
grid = robotics.BinaryOccupancyGrid(bwimage);

show(grid)

Этот пример показывает, как преобразовать файл .pgm, который содержит карту ROS в карту BinaryOccupancyGrid для использования в MATLAB.

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

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

Неизвестные (серые) области должны быть удалены и обработаны как свободное пространство. Создайте логическую матрицу на основе порога. В зависимости от вашего изображения это значение могло отличаться. Занятое место должно быть установлено как 1 (белый в изображении).

imageBW = imageCropped < 100;
imshow(imageBW)

Создайте объект BinaryOccupancyGrid с помощью настроенного изображения карты.

map = robotics.BinaryOccupancyGrid(imageBW);
show(map)

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

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

Представленный в R2015a