Сетки заполнения используются, чтобы представлять рабочую область робота как дискретную сетку. Информация о среде может быть собрана от датчиков в режиме реального времени или загрузиться от предварительных знаний. Лазерные средства поиска области значений, датчики удара, камеры и датчики глубины обычно используются, чтобы найти препятствия в среде вашего робота.
Сетки заполнения используются в алгоритмах робототехники, таких как планирование пути (см. mobileRobotPRM
или plannerRRT
). Они используются в отображении приложений для интеграции информации о датчике в дискретной карте в планировании пути для нахождения путей без коллизий, и для локализации роботов в известной среде (см. monteCarloLocalization
или matchScans
). Можно создать карты с различными размерами и разрешениями, чтобы соответствовать определенному приложению.
Для 3-D карт заполнения смотрите occupancyMap3D
.
Для 2D сеток заполнения существует два представления:
Бинарная сетка заполнения (см. binaryOccupancyMap
)
Сетка заполнения вероятности (см. occupancyMap
)
Бинарная сетка заполнения использует true
значения, чтобы представлять занятую рабочую область (препятствия) и false
значения, чтобы представлять свободную рабочую область. Эта сетка показывает, где препятствия и может ли робот переместиться через тот пробел. Используйте бинарную сетку заполнения, если емкость памяти является фактором в вашем приложении.
Сетка заполнения вероятности использует значения вероятности, чтобы создать более подробное представление карты. Это представление является предпочтительным методом для использования сеток заполнения. Эта сетка обычно упоминается как просто сетка заполнения. Каждая ячейка в сетке заполнения имеет значение, представляющее вероятность заполнения той ячейки. Значения близко к 1 представляют высокую уверенность, что ячейка содержит препятствие. Значения близко к 0 представляют уверенность, что ячейка не занята и свободное препятствие. Вероятностные значения могут дать лучшую точность объектов и улучшать производительность определенных приложений алгоритма.
Двоичный файл и сетки заполнения вероятности совместно используют несколько свойств и деталей алгоритма. Декартовы и мировые координаты применяются к обоим типам сеток заполнения. Функция инфляции также применяется к обеим сеткам, но каждая сетка реализует ее по-другому. Эффекты насыщения представления и вероятности логарифмических разногласий применяются к сеткам заполнения вероятности только.
При работе с сетками заполнения в MATLAB® можно использовать или мир, локальные, или декартовы координаты.
Система координат абсолютной ссылки, в которой действует робот, упоминается как world frame в сетке заполнения. Большинство операций выполняется в мировой системе координат, и это - выбор по умолчанию при использовании функций MATLAB в этом тулбоксе. Мировые координаты используются в качестве системы координат абсолютной координаты с фиксированным источником, и точки могут быть заданы с любым разрешением. Однако все местоположения преобразованы в местоположения сетки из-за хранения данных и пределов разрешения самой карты.
local frame относится к эгоцентрической системе координат для транспортного средства, перемещающегося по карте. GridOriginInLocal
и LocalOriginInWorld
свойства задают источник сетки в локальных координатах и относительном местоположении локальной системы координат в мировых координатах. Можно настроить эту локальную систему координат с помощью move
функция. Для примера с помощью локальной системы координат в качестве эгоцентрической карты, чтобы эмулировать транспортное средство перемещающиеся и передающие локальные препятствия, смотрите, Создают Эгоцентрические Карты Заполнения Используя Датчики Области значений.
Декартовы координаты задают фактическое разрешение сетки заполнения и конечные местоположения препятствий. Источник декартовых координат находится в верхнем левом углу сетки с первым местоположением, имеющим индекс (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')
Как вы видите от вышеупомянутой фигуры, даже ячейки, которые едва перекрываются с радиусом инфляции, помечены, как занято.
inflate
функционируйте использует радиус инфляции, чтобы выполнить вероятностную инфляцию. Вероятностная инфляция действует как локальный максимальный оператор и находит самые высокие значения вероятности для соседних ячеек. inflate
функционируйте использует это определение, чтобы раздуть более высокие значения вероятности в сетке. Эта инфляция увеличивает размер любых занятых местоположений и создает буферную зону для роботов, чтобы перейти вокруг препятствий. В этом примере показано, как инфляция работает с областью значений значений вероятности.
В этом примере показано, как раздувать метод выполняет вероятностную инфляцию на препятствиях, чтобы раздуть их размер и создать буферную зону для областей с более высокой вероятностью препятствий.
Создайте пустую карту на 10 м x 10 м.
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)
При использовании сеток заполнения со значениями вероятности цель состоит в том, чтобы оценить вероятность местоположений препятствия для использования в режиме реального времени приложения робототехники. occupancyMap
класс использует представление логарифмических разногласий значений вероятности для каждой ячейки. Каждое значение вероятности преобразовано в соответствующее значение логарифмических разногласий для внутренней памяти. Значение преобразовано назад в вероятность, когда получено доступ. Это представление эффективно обновляет значения вероятности с наименьшим количеством операций. Поэтому можно быстро интегрировать данные о датчике в карту.
Представление логарифмических разногласий использует следующее уравнение:
Значения логарифмических разногласий хранятся как int16
значения. Этот тип данных ограничивает разрешение значений вероятности к ±0.001, но значительно улучшает емкость памяти и допускает создание увеличенных карт.
При обновлении сетки заполнения с наблюдениями с помощью представления логарифмических разногласий значения имеют область значений – ∞ к ∞. Эта область значений означает, наблюдает ли робот местоположение, такое как закрытая дверь многократно, значение логарифмических разногласий для этого местоположения становится излишне высоким, или вероятность значения насыщается. Если дверь затем открывается, робот должен наблюдать дверь, открытую много раз, прежде чем вероятность изменится от занятого до свободного. В динамических средах вы хотите, чтобы карта реагировала на изменения, чтобы более точно отследить динамические объекты.
Чтобы предотвратить это насыщение, обновите ProbabilitySaturation
свойство, которое ограничивает минимальные и максимальные значения вероятности, позволило при слиянии нескольких наблюдений. Это свойство является верхней и нижней границей на значениях логарифмических разногласий и позволяет карте обновиться быстро к изменениям в среде. Минимальными и максимальными значениями по умолчанию пределов насыщения является [0.001 0.999]
. Для динамических сред предложенными значениями является, по крайней мере, [0.12 0.97]
. Рассмотрите изменение этой области значений, если карта не обновляется достаточно быстро для нескольких наблюдений.
binaryOccupancyMap
| occupancyMap
| occupancyMap3D