Сетки занятости используются для представления рабочего пространства робота в виде дискретной сетки. Информация об окружающей среде может быть собрана с датчиков в реальном времени или загружена из предыдущих знаний. Лазерные дальномеры, датчики ударов, камеры и датчики глубины обычно используются для поиска препятствий в среде вашего робота.
Сетки занятости используются в алгоритмах робототехники, таких как планирование пути (см. mobileRobotPRM или plannerRRT(Панель инструментов навигации)). Они используются в картографических приложениях для интеграции сенсорной информации в дискретную карту, при планировании путей для поиска путей, свободных от столкновений, и для локализации роботов в известной среде (см. monteCarloLocalization(Панель инструментов навигации) или matchScans(Панель инструментов навигации)). Можно создавать карты с различными размерами и разрешением в соответствии с конкретным приложением.
Для получения 3-D карт заполняемости см. occupancyMap3D(Панель инструментов навигации).
Для 2-D сеток занятости существует два представления:
Двоичная сетка занятости (см. binaryOccupancyMap)
Таблица вероятностной занятости (см. occupancyMap(Панель инструментов навигации))
Двоичная сетка занятости использует true значения для представления занятого рабочего пространства (препятствия) и false значения для представления свободной рабочей области. Эта сетка показывает, где находятся препятствия и может ли робот перемещаться через это пространство. Используйте двоичную сетку заполнения, если размер памяти является коэффициентом в приложении.
Сетка вероятностной занятости использует значения вероятностей для создания более подробного представления карты. Это представление является предпочтительным способом использования сеток занятости. Эту сетку обычно называют просто сеткой занятости. Каждая ячейка в сетке занятости имеет значение, представляющее вероятность занятости этой ячейки. Значения, близкие к 1, представляют высокую уверенность в том, что ячейка содержит препятствие. Значения, близкие к 0, представляют уверенность в том, что ячейка не занята и не содержит препятствий. Вероятностные значения могут обеспечить лучшую верность объектов и улучшить производительность определенных алгоритмических приложений.
Двоичные и вероятностные сетки занятости имеют несколько свойств и деталей алгоритма. Координаты сетки и мира применяются к обоим типам сеток занятости. Функция инфляции также применяется к обеим сеткам, но каждая сетка реализует ее по-разному. Эффекты представления логарифмических шансов и насыщения вероятности применяются только к сеткам вероятностного занятия.
При работе с сетками занятости в MATLAB ® можно использовать координаты мира, локальные координаты или координаты сетки.
Абсолютная опорная рамка, в которой работает робот, называется мировой рамкой в сетке занятости. Большинство операций выполняется в мировой рамке и является выбором по умолчанию при использовании функций MATLAB на этой панели инструментов. Мировые координаты используются как абсолютная координатная рамка с фиксированным началом координат, а точки могут быть заданы с любым разрешением. Однако все местоположения преобразуются в ячейки сетки из-за ограничений хранения и разрешения данных на самой карте.
Локальный кадр относится к эгоцентрическому кадру для транспортного средства, осуществляющего навигацию по карте. GridOriginInLocal и LocalOriginInWorld свойства определяют начало сетки в локальных координатах и относительное расположение локального кадра в мировых координатах. Вы можете настроить эту локальную рамку с помощью move функция. Пример использования локального кадра в качестве эгоцентрической карты для эмуляции транспортного средства, перемещающегося вокруг и посылающего локальные препятствия, см. в разделе Создание эгоцентрических карт занятости с помощью датчиков дальности (панель инструментов навигации).
Координаты сетки определяют фактическое разрешение сетки занятости и конечное расположение препятствий. Начало координат сетки находится в левом верхнем углу сетки, при этом первое расположение имеет индекс (1,1). Тем не менее, GridLocationInWorld Свойство заполняющей сетки в MATLAB определяет левый нижний угол сетки в мировых координатах. При создании объекта сетки занятости такие свойства, как XWorldLimits и YWorldLimits определяются входными данными width, height, и 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(Панель инструментов навигации)