Заполнение сеток

Обзор

Сетки заполнения используются, чтобы представлять рабочую область робота как дискретную сетку. Информация об окружении может быть собрана с датчиков в режиме реального времени или загружена из предыдущих знаний. Лазерные искатели области значений, датчики отбойника, камеры и датчики глубины обычно используются, чтобы найти препятствия в окружении вашего робота.

Сетки заполнения используются в алгоритмах робототехники, таких как планирование пути (см 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)

Figure contains an axes. The axes with title Binary Occupancy Grid contains an object of type image.

Постройте график исходного местоположения, преобразуйте положение сетки и рисуйте исходный круг. На этом графике видно, что центр сетки [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')

Figure contains an axes. The axes with title Binary Occupancy Grid contains 4 objects of type image, line. These objects represent 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)

Figure contains an axes. The axes with title Occupancy Grid contains an object of type image.

Надьте занятые области на заданный радиус. Большие значения заполнения записываются по меньшим значениям. Вы можете скопировать карту заранее, чтобы вернуть любые нежелательные изменения.

savedMap = copy(map);
inflate(map,0.5)
figure
show(map)

Figure contains an axes. The axes with title Occupancy Grid contains an object of type image.

Логарифмическое представление значений вероятностей

При использовании сеток заполнения со значениями вероятностей цель состоит в том, чтобы оценить вероятность расположения препятствий для использования в приложениях робототехники в реальном времени. The occupancyMap класс использует логарифмическое представление значений вероятностей для каждой камеры. Каждое значение вероятности преобразуется в соответствующее значение логарифмических коэффициентов для внутреннего хранилища. Значение преобразуется назад в вероятность при обращении. Это представление эффективно обновляет значения вероятностей с помощью наименьшего количества операций. Поэтому можно быстро интегрировать данные о датчике в карту.

Представление логарифмических коэффициентов использует следующее уравнение:

Примечание

Значения логарифмических шансов хранятся как int16 значения. Этот тип данных ограничивает разрешение значений вероятностей ± 0,001, но значительно улучшает размер памяти и позволяет создавать большие карты.

Насыщение вероятностей

При обновлении сетки заполнения наблюдениями с помощью представления логарифмических шансов значения имеют область значений от - ∞ до ∞. Эта область значений означает, что, если робот наблюдает местоположение, такое как закрытая дверь, несколько раз, значение логарифмических шансов для этого местоположения становится излишне высоким, или вероятность значения достигает насыщения. Если дверь затем откроется, роботу нужно много раз наблюдать за дверью, прежде чем вероятность изменится с занятой на бесплатную. В динамических окружениях вы хотите, чтобы карта реагировала на изменения, чтобы более точно отслеживать динамические объекты.

Чтобы предотвратить это насыщение, обновите ProbabilitySaturation свойство, которое ограничивает минимальные и максимальные значения вероятностей, допустимые при включении нескольких наблюдений. Это свойство является верхней и нижней границами значений логарифмических шансов и позволяет карте быстро обновляться к изменениям в окружении. Минимальные и максимальные значения по умолчанию пределов насыщения [0.001 0.999]. Для динамических окружений предлагаемые значения как минимум [0.12 0.97]. Рассмотрите изменение этой области значений, если карта не обновляется достаточно быстро для нескольких наблюдений.

См. также

| |

Похожие темы