occupancyMap

Создайте карту заполнения с вероятностными значениями

Описание

occupancyMap создает объект сетки заполнения 2-D. Каждая камера в сетке заполнения имеет значение, представляющее вероятность заполнения этой камеры. Значения, близкие к 1, представляют высокую вероятность того, что камера содержит препятствие. Значения, близкие к 0, представляют высокую вероятность того, что камера не занята и свободна от препятствий.

Карты заполнения используются в алгоритмах навигации, таких как планирование пути (см plannerRRT). Они также используются в приложениях отображения для нахождения путей без столкновений, выполнения предотвращения столкновений и вычисления локализации (см monteCarloLocalization). Карту заполнения можно изменить в соответствии с конкретным приложением.

The occupancyMap объекты поддерживают локальные координаты, мировые координаты и индексы сетки. Первое расположение сетки с индексами (1,1) начинается в левом верхнем углу сетки.

Используйте occupancyMap класс, чтобы создать 2-D карты окружения с вероятностными значениями, представляющими различные препятствия в вашем мире. Можно задать точные значения вероятностей камер или включить наблюдения с датчиков, таких как лазерные сканеры.

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

Создание

Описание

map = occupancyMap(width,height) создает 2-D объект карты заполнения, представляющий мировое пространство width и height в метрах. Сетка по умолчанию имеет разрешение 1 камера на метр.

пример

map = occupancyMap(width,height,resolution) создает карту заполнения с заданным разрешением сетки в камерах на метр. resolution устанавливает свойство Разрешения.

map = occupancyMap(rows,cols,resolution,'grid') создает карту заполнения с заданным количеством строк и столбцов и разрешением в камерах на метр. Значения rows и cols устанавливает свойство GridSize.

map = occupancyMap(p) создает карту заполнения из значений в матрице p. Размер сетки совпадает с размером матрицы, при этом каждое значение вероятности камеры интерпретируется из расположения матрицы.

пример

map = occupancyMap(p,resolution) создает карту заполнения из указанной матрицы и разрешение в камерах на метр.

map = occupancyMap(sourcemap) создает объект с использованием значений другого occupancyMap объект.

map = occupancyMap(sourcemap,resolution) создает объект с использованием значений другого occupancyMap объект, но повторно формирует матрицу, чтобы иметь заданное разрешение.

Входные параметры

расширить все

Ширина карты, заданная как скаляр в метрах.

Высота карты, заданная как скаляр в метрах.

Разрешение сетки, заданное в виде скаляра в камерах на метр.

Количество строк в сетке, заданное как положительное скалярное целое число.

Количество столбцов в сетке, заданное как положительное скалярное целое число.

Входная сетка заполнения, заданная как матрица значений вероятностей из 0 на 1. Размер сетки совпадает с размером матрицы. Каждый элемент матрицы соответствует вероятности занятия местоположения камеры сетки. Значения, близкие к 1 представление высокой уверенности в том, что камера содержит препятствие. Значения, близкие к 0 представление уверенности в том, что камера не занята, и отсутствие препятствий.

Объект карты заполнения, заданный как occupancyMap объект.

Свойства

расширить все

Порог, ниже которого камеры считаются свободными от препятствий, задается как скаляр между 0 и 1 включительно. Камеры со значениями вероятности ниже этого порога считаются свободными от препятствий. Это свойство также определяет свободные местоположения для планирования пути при использовании таких объектов, как plannerRRT.

Типы данных: double

Порог, выше которого камеры считаются занятыми, задается как скаляр. Камеры со значениями вероятности выше этого порога считаются занятыми.

Типы данных: double

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

Типы данных: double

Это свойство доступно только для чтения.

Количество строк и столбцов в сетке, хранящихся в виде вектора с реальным значением 1 на 2, представляющего количество строк и столбцов, в этом порядке.

Типы данных: double

Это свойство доступно только для чтения.

Разрешение сетки, сохраненное в виде скаляра в камерах на метр, представляющих количество и размер расположений сетки.

Типы данных: double

Это свойство доступно только для чтения.

Минимальное и максимальное значения x-координат в локальной системе координат, сохраненные как двухэлементный горизонтальный вектор вида [min max]. Локальная система координат определяется LocalOriginInWorld свойство.

Типы данных: double

Это свойство доступно только для чтения.

Минимальное и максимальное значения y-координат в локальной системе координат, сохраненные как двухэлементный горизонтальный вектор вида [min max]. Локальная система координат определяется LocalOriginInWorld свойство.

Типы данных: double

Это свойство доступно только для чтения.

Минимальные и максимальные значения мировой области значений x-coordinates, сохраненные как вектор 1 на 2, представляющий минимальное и максимальное значения, в этом порядке.

Типы данных: double

Это свойство доступно только для чтения.

Минимальные и максимальные значения мировой области значений y-coordinates, сохраненные как вектор 1 на 2, представляющий минимальное и максимальное значения, в этом порядке.

Типы данных: double

[x, y] мировые координаты левого нижнего угла сетки, заданные как вектор 1 на 2.

Типы данных: double

Расположение источника локальной системы координат в мировых координатах, заданное как двухэлементный вектор, [xLocal yLocal]. Используйте move функция, чтобы переместить локальную систему координат, когда ваше транспортное средство перемещается.

Типы данных: double

Расположение левого нижнего угла сетки в локальных координатах, заданное как двухэлементный вектор, [xLocal yLocal].

Типы данных: double

Значение по умолчанию для неопределенных расположений карты, включая области вне карты, заданное как скаляр между 0 и 1 включительно.

Типы данных: double

Функции объекта

checkOccupancyПроверяйте местоположения на свободные, занятые или неизвестные значения
copyСоздайте копию сетки заполнения
getOccupancyПолучите значение заполнения местоположений
grid2localПреобразуйте индексы сетки в локальные координаты
grid2worldПреобразуйте индексы сетки в мировые координаты
inflateРаздувайте каждое место занятой сетки
insertRayВставьте луч из наблюдения лазерного скана
local2gridПреобразуйте локальные координаты в индексы сетки
local2worldПреобразуйте локальные координаты в мировые
moveПеремещение карты в лабораторной системе координат
occupancyMatrixПреобразуйте сетку заполнения в двойную матрицу
raycastВычислите индексы камер вдоль луча
rayIntersectionНайти точки пересечения лучей и занятых камер карты
setOccupancyУстановите значение заполнения местоположений
showПоказать значения сетки на рисунке
syncWithСинхронизация карты с перекрывающейся картой
updateOccupancyИнтегрирование наблюдений вероятностей в местоположениях
world2gridПреобразуйте мировые координаты в сетчатые индексы
world2localПреобразуйте мировые координаты в локальные

Примеры

свернуть все

Создайте пустую сетку заполнения.

map = occupancyMap(10,10,20);

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

pose = [5,5,0];
ranges = 3*ones(100,1);
angles = linspace(-pi/2,pi/2,100);
maxrange = 20;

Создайте lidarScan объект с заданными областями и углами.

scan = lidarScan(ranges,angles);

Вставьте данные лазерного скана в карту заполнения.

insertRay(map,pose,scan,maxrange);

Отобразите карту, чтобы увидеть результаты вставки лазерного скана.

show(map)

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

Проверить заполнение места непосредственно перед транспортным средством.

getOccupancy(map,[8 5])
ans = 0.7000

Добавьте второе чтение и просмотрите обновление значений заполнения. Дополнительное чтение повышает доверие в показаниях. Свободные и занятые значения становятся более четкими.

insertRay(map,pose,scan,maxrange);
show(map)

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

getOccupancy(map,[8 5])
ans = 0.8448

Преобразуйте портативный файл graymap (PGM), содержащий карту ROS, в occupancyMap для использования в MATLAB.

Импортируйте изображение с помощью imread. Обрезать изображение в область плейпена.

image = imread('playpen_map.pgm');
imageCropped = image(750:1250,750:1250);
imshow(imageCropped)

Figure contains an axes. The axes contains an object of type image.

Значения PGM выражены от 0 до 255 следующим uint8. Нормализуйте эти значения путем преобразования обрезанного изображения в double и деление каждой камеры на 255. Это изображение показывает препятствия как значения, близкие к 0. Вычесть нормированное изображение из 1, чтобы получить значения заполнения с 1, представляющими занятое пространство.

imageNorm = double(imageCropped)/255;
imageOccupancy = 1 - imageNorm;

Создайте occupancyMap объект с использованием скорректированного изображения карты. Импортированное разрешение карты составляет 20 камеры на метр.

map = occupancyMap(imageOccupancy,20);
show(map)

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

Ограничения

Значения заполнения имеют ограниченное разрешение ± 0,001. Значения хранятся как int16 использование представления логарифмических шансов. Этот тип данных ограничивает разрешение, но сохраняет память при хранении больших карт в MATLAB®. При вызове setOccupancy а затем getOccupancyвозвращенное значение может не равняться заданному значению. Для получения дополнительной информации см. раздел Представления логарифмических коэффициентов в разделах Сетки заполнения.

Если размер памяти является ограничением, рассмотрите использование binaryOccupancyMap вместо этого. Двоичная карта заполнения использует меньше памяти с двоичными значениями, но все еще работает с алгоритмами Navigation Toolbox™ и другими приложениями.

Расширенные возможности

Генерация кода C/C + +
Сгенерируйте код C и C++ с помощью Coder™ MATLAB ®

.
Введенный в R2019b