Сетки заполнения используются, чтобы представлять рабочую область робота как дискретную сетку. Информация о среде может быть собрана от датчиков в режиме реального времени или загрузиться от предварительных знаний. Лазерные средства поиска области значений, датчики удара, камеры и датчики глубины обычно используются, чтобы найти препятствия в среде вашего робота.
Сетки заполнения используются в алгоритмах робототехники, таких как планирование пути (см. mobileRobotPRM
или plannerRRT
). Они используются в отображении приложений для интеграции информации о датчике в дискретной карте в планировании пути для нахождения путей без коллизий, и для локализации роботов в известной среде (см. monteCarloLocalization
или matchScans
). Можно создать карты с различными размерами и разрешениями, чтобы соответствовать определенному приложению.
Для 3-D карт заполнения смотрите occupancyMap3D
.
Для 2D сеток заполнения существует два представления:
Бинарная сетка заполнения (см. binaryOccupancyMap
)
Сетка заполнения вероятности (см. occupancyMap
)
Бинарная сетка заполнения использует true
значения, чтобы представлять занятую рабочую область (препятствия) и false
значения, чтобы представлять свободную рабочую область. Эта сетка показывает, где препятствия и может ли робот переместиться через тот пробел. Используйте бинарную сетку заполнения, если емкость памяти является фактором в вашем приложении.
Сетка заполнения вероятности использует значения вероятности, чтобы создать более подробное представление карты. Это представление является предпочтительным методом для использования сеток заполнения. Эта сетка обычно упоминается как просто сетка заполнения. Каждая ячейка в сетке заполнения имеет значение, представляющее вероятность заполнения той ячейки. Значения близко к 1 представляют высокую уверенность, что ячейка содержит препятствие. Значения близко к 0 представляют уверенность, что ячейка не занята и свободное препятствие. Вероятностные значения могут дать лучшую точность объектов и улучшать производительность определенных приложений алгоритма.
Двоичный файл и сетки заполнения вероятности совместно используют несколько свойств и деталей алгоритма. Декартовы и мировые координаты применяются к обоим типам сеток заполнения. Функция инфляции также применяется к обеим сеткам, но каждая сетка реализует ее по-другому. Эффекты насыщения представления и вероятности логарифмических разногласий применяются к сеткам заполнения вероятности только.
При работе с сетками заполнения в MATLAB® можно использовать или мир, локальные, или декартовы координаты.
Система координат абсолютной ссылки, в которой действует робот, упоминается как world frame в сетке заполнения. Большинство операций выполняется в мировой системе координат, и это - выбор по умолчанию при использовании функций MATLAB в этом тулбоксе. Мировые координаты используются в качестве системы координат абсолютной координаты с фиксированным источником, и точки могут быть заданы с любым разрешением. Однако все местоположения преобразованы в местоположения сетки из-за хранения данных и пределов разрешения самой карты.
local frame относится к эгоцентрической системе координат для транспортного средства, перемещающегося по карте. GridOriginInLocal
и LocalOriginInWorld
свойства задают источник сетки в локальных координатах и относительном местоположении локальной системы координат в мировых координатах. Можно настроить эту локальную систему координат с помощью move
функция. Для примера с помощью локальной системы координат в качестве эгоцентрической карты, чтобы эмулировать транспортное средство перемещающиеся и передающие локальные препятствия, смотрите, Создают Эгоцентрические Карты Заполнения Используя Датчики Области значений (Navigation Toolbox).
Декартовы координаты задают фактическое разрешение сетки заполнения и конечные местоположения препятствий. Источник декартовых координат находится в верхнем левом углу сетки с первым местоположением, имеющим индекс (1,1)
. Однако GridLocationInWorld
свойство сетки заполнения в MATLAB задает нижний левый угол сетки в мировых координатах. При создании объекта сетки заполнения, свойства, такие как XWorldLimits
и YWorldLimits
заданы входом width
высота
, и resolution
. Этот рисунок показывает визуальное представление этих свойств и отношения между мировыми и декартовыми координатами.
И бинарные и нормальные сетки заполнения имеют опцию для расширения препятствий. Эта инфляция используется, чтобы добавить коэффициент безопасности на препятствиях и создать буферные зоны между роботом и препятствием в среде. inflate
функция объекта сетки заполнения преобразует заданный radius
к количеству ячеек, окруженных от resolution*radius
значение. Каждый алгоритм использует это значение ячейки отдельно, чтобы изменить значения вокруг препятствий.
inflate
функционируйте берет каждую занятую ячейку и непосредственно раздувает его путем добавления занятого места вокруг каждой точки. Этот основной пример инфляции иллюстрирует, как значение радиуса используется.
В этом примере показано, как создать карту, установите местоположения препятствия и раздуйте ее радиусом 1 м. Дополнительные графики на фигуре помогают проиллюстрировать инфляцию и сдвиг из-за преобразования в местоположения сетки.
Создайте бинарную сетку заполнения. Установите заполнение положения [5,5].
map = binaryOccupancyMap(10,10,5); setOccupancy(map,[5 5], 1);
Раздуйте занятые пробелы на карте на 1 м.
inflate(map,1); show(map)
Постройте исходное местоположение, преобразованное положение сетки и нарисуйте исходный круг. Вы видите из этого графика, что центр сетки [4.9 4.9], который смещен от [5 5] местоположение. Круг на 1 м нарисован оттуда, и заметьте, что любые ячейки, которые касаются этого круга, отмечены, как занято. Фигура увеличена масштаб к соответствующей области.
hold on theta = linspace(0,2*pi); x = 4.9+cos(theta); % x circle coordinates y = 4.9+sin(theta); % y circle coordinates plot(5,5,'*b','MarkerSize',10) % Original location plot(4.9,4.9,'xr','MarkerSize',10) % Grid location center plot(x,y,'-r','LineWidth',2); % Circle of radius 1m. axis([3.6 6 3.6 6]) ax = gca; ax.XTick = [3.6:0.2:6]; ax.YTick = [3.6:0.2:6]; grid on legend('Original Location','Grid Center','Inflation')
Как вы видите от вышеупомянутой фигуры, даже ячейки, которые едва перекрываются с радиусом инфляции, помечены, как занято.
binaryOccupancyMap
| occupancyMap
| occupancyMap3D