getOccupancy

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

Получите заполнение местоположения

Синтаксис

occval = getOccupancy(map,xy)
occval = getOccupancy(map,ij,"grid")

Описание

пример

occval = getOccupancy(map,xy) возвращает массив значений заполнения вероятности в местоположениях xy. Значения близко к 1 представляют высокую уверенность, что ячейка содержит препятствие. Значения близко к 0 представляют уверенность, что ячейка не занята и свободное препятствие.

occval = getOccupancy(map,ij,"grid") задает индексы ячейки сетки ij вместо местоположений xy.

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

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

Сопоставьте представление, заданное как объект robotics.OccupancyGrid. Этот объект представляет среду робота. Объект содержит матричную сетку со значениями, представляющими вероятность заполнения той ячейки. Значения близко к 1 представляют высокую уверенность, что ячейка содержит препятствие. Значения близко к 0 представляют уверенность, что ячейка не занята и свободное препятствие.

Мировые координаты, заданные как n-by-2 матрица пар [x y], где n является количеством мировых координат.

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

Положения сетки, заданные как n-by-2 матрица пар [i j] в формате [rows cols], где n является количеством положений сетки.

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

Выходные аргументы

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

Значения заполнения вероятности, возвращенные как вектор-столбец та же длина или как xy или как ij.

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

Примеры

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

Доступ к значениям заполнения и проверке их состояние заполнения на основе занятых и свободных порогов объекта OccupancyGrid.

Создайте матрицу и заполните ее со значениями. Используйте эту матрицу, чтобы создать сетку заполнения.

p = 0.5*ones(20,20);
p(11:20,11:20) = 0.75*ones(10,10);
map = robotics.OccupancyGrid(p,10);

Получите заполнение других мест и проверяйте их состояния заполнения. Состояние заполнения возвращается 0 для свободного пространства и 1 для занятого места. Неизвестные значения возвращаются-1.

pocc = getOccupancy(map,[1.5 1])
pocc = 0.7500
occupied = checkOccupancy(map,[1.5 1])
occupied = 1
pocc2 = getOccupancy(map,[5 5],'grid')
pocc2 = 0.5000
occupied2 = checkOccupancy(map,[5 5],'grid')
occupied2 = -1

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

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

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

Ограничения

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

Введенный в R2017b