Сетки заполнения используются, чтобы представлять рабочую область робота как дискретную сетку. Информация об окружении может быть собрана с датчиков в режиме реального времени или загружена из предыдущих знаний. Лазерные искатели области значений, датчики отбойника, камеры и датчики глубины обычно используются, чтобы найти препятствия в окружении вашего робота.
Сетки заполнения используются в алгоритмах робототехники, таких как планирование пути (см mobileRobotPRM
(Robotics System Toolbox) или plannerRRT
). Они используются в приложениях отображения для интеграции информации о датчике в дискретной карте, в планировании пути для нахождения путей без столкновения и для локализации роботов в известном окружении (см monteCarloLocalization
или matchScans
). Вы можете создать карты с различными размерами и разрешениями, чтобы соответствовать вашему конкретному приложению.
Для получения 3-D карт заполнения смотрите occupancyMap3D
.
Для 2-D сеток заполнения существует два представления:
Двоичная сетка заполнения (см binaryOccupancyMap
)
Сетка заполнения вероятностей (см occupancyMap
)
Двоичная сетка заполнения использует true
значения для представления занятой рабочей области (препятствия) и false
значения для представления свободной рабочей области. Эта сетка показывает, где находятся препятствия и может ли робот перемещаться через это пространство. Используйте двоичную сетку заполнения, если размер памяти является фактором в вашем приложении.
Сетка заполнения вероятностей использует значения вероятностей, чтобы создать более подробное представление карты. Это представление является предпочтительным методом для использования сеток заполнения. Эта сетка обычно называется просто сеткой заполнения. Каждая камера в сетке заполнения имеет значение, представляющее вероятность заполнения этой камеры. Значения, близкие к 1, представляют высокую уверенность в том, что камера содержит препятствие. Значения, близкие к 0, представляют уверенность в том, что камера не занята и свободна от препятствий. Вероятностные значения могут дать лучшую точность объектов и улучшить эффективность некоторых приложений алгоритмов.
Двоичные сетки и сетки заполнения вероятностей имеют несколько свойств и деталей алгоритма. Сетка и мировые координаты применяются к обоим типам сетки заполнения. Функция инфляции также применяется к обеим сеткам, но каждая сетка реализует ее по-разному. Эффекты представления логарифмических шансов и насыщения вероятностей применяются только к сеткам заполнения вероятностей.
При работе с сетками заполнения в MATLAB®можно использовать координаты мира, локальные координаты или координаты сетки.
Абсолютная система координат, в которой работает робот, упоминается как world frame в сетке заполнения. Большинство операций выполняется в мировой системе координат, и это выбор по умолчанию при использовании функций MATLAB в этом тулбоксе. Мировые координаты используются как абсолютная координатная система координат с фиксированным источником, и точки могут быть заданы с любым разрешением. Однако все местоположения преобразуются в местоположения сетки из-за пределов на хранение данных и разрешение на самой карте.
local frame относится к эгоцентрической системе координат для транспортного средства, перемещающегося по карте. The GridOriginInLocal
и LocalOriginInWorld
свойства определяют источник сетки в локальных координатах и относительное расположение локальной системы координат в мировых координатах. Вы можете настроить эту локальную систему координат, используя move
функция. Например, использование локальной системы координат в качестве эгоцентрической карты для эмуляции транспортного средства, движущейся вокруг и посылающей локальные препятствия, смотрите, Создают эгоцентрические карты заполнения с использованием Области значений Sensors.
Координаты сетки определяют фактическое разрешение сетки заполнения и конечные местоположения препятствий. Источник координат сетки находится в левом верхнем углу сетки, причем первое расположение имеет индекс (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')
Как видно из приведенной выше рисунка, даже камеры, которые едва перекрываются с радиусом инфляции, маркируются как занятые.
inflate
функция использует радиус инфляции, чтобы выполнить вероятностную инфляцию. Вероятностная инфляция выступает в качестве локального максимального оператора и находит самые высокие значения вероятности для ближайших камер. The inflate
функция использует это определение, чтобы увеличить значения более высоких вероятностей по всей сетке. Эта инфляция увеличивает размер любых занятых мест и создает буферную зону для роботов, чтобы перемещаться вокруг препятствий. Этот пример показывает, как инфляция работает с областью значений значений вероятностей.
Этот пример показывает, как метод надувания выполняет вероятностную инфляцию на препятствиях, чтобы раздуть их размер и создать буферную зону для областей с более высокой вероятностью препятствий.
Создайте пустую карту размером 10m x 10m.
map = occupancyMap(10,10,10);
Обновление заполнения мировых локаций с определенными значениями в pvalues
.
x = [1.2; 2.3; 3.4; 4.5; 5.6]; y = [5.0; 4.0; 3.0; 2.0; 1.0]; pvalues = [0.2 0.4 0.6 0.8 1]; updateOccupancy(map,[x y],pvalues) figure show(map)
Надьте занятые области на заданный радиус. Большие значения заполнения записываются по меньшим значениям. Вы можете скопировать карту заранее, чтобы вернуть любые нежелательные изменения.
savedMap = copy(map); inflate(map,0.5) figure show(map)
При использовании сеток заполнения со значениями вероятностей цель состоит в том, чтобы оценить вероятность расположения препятствий для использования в приложениях робототехники в реальном времени. The occupancyMap
класс использует логарифмическое представление значений вероятностей для каждой камеры. Каждое значение вероятности преобразуется в соответствующее значение логарифмических коэффициентов для внутреннего хранилища. Значение преобразуется назад в вероятность при обращении. Это представление эффективно обновляет значения вероятностей с помощью наименьшего количества операций. Поэтому можно быстро интегрировать данные о датчике в карту.
Представление логарифмических коэффициентов использует следующее уравнение:
Примечание
Значения логарифмических шансов хранятся как int16
значения. Этот тип данных ограничивает разрешение значений вероятностей ± 0,001, но значительно улучшает размер памяти и позволяет создавать большие карты.
При обновлении сетки заполнения наблюдениями с помощью представления логарифмических шансов значения имеют область значений от - ∞ до ∞. Эта область значений означает, что, если робот наблюдает местоположение, такое как закрытая дверь, несколько раз, значение логарифмических шансов для этого местоположения становится излишне высоким, или вероятность значения достигает насыщения. Если дверь затем откроется, роботу нужно много раз наблюдать за дверью, прежде чем вероятность изменится с занятой на бесплатную. В динамических окружениях вы хотите, чтобы карта реагировала на изменения, чтобы более точно отслеживать динамические объекты.
Чтобы предотвратить это насыщение, обновите ProbabilitySaturation
свойство, которое ограничивает минимальные и максимальные значения вероятностей, допустимые при включении нескольких наблюдений. Это свойство является верхней и нижней границами значений логарифмических шансов и позволяет карте быстро обновляться к изменениям в окружении. Минимальные и максимальные значения по умолчанию пределов насыщения [0.001 0.999]
. Для динамических окружений предлагаемые значения как минимум [0.12 0.97]
. Рассмотрите изменение этой области значений, если карта не обновляется достаточно быстро для нескольких наблюдений.
binaryOccupancyMap
| occupancyMap
| occupancyMap3D