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