робототехника. Класс OccupancyGrid
Пакет: робототехника
Создайте сетку заполнения с вероятностными значениями
Описание
OccupancyGrid
создает 2D карту сетки заполнения. Каждая ячейка в сетке заполнения имеет значение, представляющее вероятность заполнения той ячейки. Значения близко к 1 представляют высокую уверенность, что ячейка содержит препятствие. Значения близко к 0 представляют уверенность, что ячейка не занята и свободное препятствие.
Сетки заполнения используются в алгоритмах робототехники, таких как планирование пути (см. robotics.PRM
). Они также используются в отображении приложений для нахождения путей без коллизий, выполнения предотвращения столкновения и вычисления локализации (см. robotics.MonteCarloLocalization
). Можно изменить сетку заполнения, чтобы соответствовать определенному приложению.
Объекты OccupancyGrid
поддерживают мировые и декартовы координаты. Источник мировых координат задан свойством GridLocationInWorld
объекта, который задает нижний левый угол сетки. Номер и размер местоположений сетки заданы свойством Resolution
. Первое местоположение сетки с индексом (1,1)
начинается в верхнем левом углу сетки.
Используйте класс OccupancyGrid
, чтобы создать 2D карты среды со значениями вероятности, представляющими различные препятствия в вашем мире. Можно задать точные значения вероятности ячеек или включать наблюдения от датчиков, таких как лазерные сканеры.
Значения вероятности хранятся с помощью двоичного файла фильтр Бейеса, чтобы оценить заполнение каждой ячейки сетки. Представление логарифмических разногласий используется со значениями, сохраненными как int16
, чтобы уменьшать размер ресурса хранения карты и допускать приложения реального времени.
Если емкость памяти является ограничением, рассмотрите использование robotics.BinaryOccupancyGrid
вместо этого. Бинарная сетка заполнения использует меньше памяти с двоичными значениями, но все еще работает с алгоритмами Robotics System Toolbox™ и другими приложениями.
Конструкция
map
= robotics.OccupancyGrid(width
,height
)
создает 2D объект сетки заполнения представление мирового пробела width
и height
в метрах. Разрешение сетки по умолчанию является 1 ячейкой на метр.
map
= robotics.OccupancyGrid(width
,height
,resolution
)
создает сетку заполнения с заданным разрешением сетки в ячейках на метр.
map
= robotics.OccupancyGrid(rows,cols,resolution
,"grid")
создает сетку заполнения с конкретным количеством строк и столбцов и с разрешением в ячейках на метр.
map
= robotics.OccupancyGrid(p
)
создает сетку заполнения из значений в матричном p
. Размер сетки совпадает с размером матрицы с каждым значением вероятности ячейки, интерпретированным от матричного местоположения.
map
= robotics.OccupancyGrid(p
,resolution
)
создает сетку заполнения из заданной матрицы и разрешения в ячейках на метр.
Входные параметры
развернуть все
width
Сопоставьте ширину
скаляр в метрах
Сопоставьте ширину, заданную как скаляр в метрах.
Типы данных: double
высота
Сопоставьте высоту
скаляр в метрах
Сопоставьте высоту, заданную как скаляр в метрах.
Типы данных: double
resolution
— Разрешение сетки
1
(значение по умолчанию) | скаляр в ячейках на метр
Разрешение сетки, заданное как скаляр в ячейках на метр.
Типы данных: double
p
Введите сетку заполнения
матрица значений вероятности от 0
до 1
Введите сетку заполнения, заданную как матрица значений вероятности от 0
до 1
. Размер сетки совпадает с размером матрицы. Каждый элемент матрицы соответствует вероятности занимаемого местоположения ячейки сетки. Значения близко к 0 представляют высокую уверенность, что ячейка содержит препятствие. Значения близко к 1 представляют уверенность, что ячейка не занята и свободное препятствие.
Типы данных: double
Свойства
развернуть все
FreeThreshold
— Порог, чтобы рассмотреть ячейки как без препятствий
скаляр
Порог, чтобы считать ячейки столь же без препятствий, заданными как скаляр. Значения вероятности ниже этого порога рассматриваются свободным препятствием. Это свойство также задает свободные местоположения для планирования пути при использовании robotics.PRM
.
OccupiedThreshold
— Порог, чтобы рассмотреть ячейки, как занято
скаляр
Порог, чтобы считать ячейки, как занято, заданными как скаляр. Значения вероятности выше этого порога рассматриваются занятыми.
ProbabilitySaturation
— Насыщение ограничивает для вероятности
[0.001 0.999]
(значение по умолчанию) | вектор [min max]
Насыщение ограничивает для вероятности, заданной как вектор [min max]
. Значения выше или ниже этих степеней насыщения установлены к значениям max
и min
. Это свойство уменьшает перенасыщение ячеек при слиянии нескольких наблюдений.
GridSize
— Количество строк и столбцов в сетке
Вектор [rows cols]
Это свойство доступно только для чтения.
Количество строк и столбцов в сетке, сохраненной как вектор [rows cols]
.
Resolution
— Разрешение сетки
1
(значение по умолчанию) | скаляр в ячейках на метр
Разрешение сетки, сохраненное как скаляр в ячейках на метр. Это значение только для чтения.
XWorldLimits
— Минимальные и максимальные мировые значения области значений x - координаты
Вектор [min max]
Минимальные и максимальные мировые значения области значений x - координаты, сохраненные как вектор [min max]
. Это значение только для чтения.
YWorldLimits
— Минимальные и максимальные мировые значения области значений y - координаты
Вектор [min max]
Минимальные и максимальные мировые значения области значений y - координаты, сохраненные как вектор [min max]
. Это значение только для чтения.
GridLocationInWorld
— мировые координаты [x,y]
сетки
[0 0] (значение по умолчанию) | двухэлементный вектор
Мировые координаты [x,y]
нижнего левого угла сетки, заданной как двухэлементный вектор.
Методы
checkOccupancy | Проверяйте местоположения бесплатно, занятые, или неизвестные значения |
копия | Создайте копию сетки заполнения |
getOccupancy | Получите заполнение местоположения |
grid2world | Преобразуйте индексы сетки в мировые координаты |
раздуть | Раздуйте каждое занятое местоположение сетки |
insertRay | Вставьте луч от лазерного наблюдения сканирования |
occupancyMatrix | Преобразуйте сетку заполнения, чтобы удвоить матрицу |
rayIntersection | Вычислите точки пересечения карты лучей |
raycast | Вычислите индексы ячейки вдоль луча |
setOccupancy | Установите заполнение местоположения |
show | Покажите значения сетки в фигуре |
updateOccupancy | Интегрируйте наблюдение вероятности в местоположении |
world2grid | Преобразуйте мировые координаты в индексы сетки |
Примеры
свернуть все
Вставьте лазерные сканирования в сетку заполнения
Возьмите область значений и угловые показания от лазерного сканирования и вставьте эти показания в сетку заполнения.
Создайте пустую карту сетки заполнения.
Вставьте лазерное сканирование в сетку заполнения. Задайте положение областей значений робота и углов и макс. области значений лазерного сканирования.
Покажите карту, чтобы видеть результаты вставки лазерного сканирования. Проверяйте заполнение пятна непосредственно перед роботом.
Добавьте второе чтение и просмотрите обновление значений заполнения. Дополнительное чтение увеличивает уверенность в показаниях. Свободные и занятые значения становятся более отличными.
Преобразуйте изображение PGM, чтобы сопоставить
Преобразуйте портативный graymap (.pgm
) файл, содержащий карту ROS в карту OccupancyGrid
для использования в MATLAB.
Импортируйте изображение с помощью imread
. Обрежьте изображение к соответствующей области.
Значения PGM выражаются от 0 до 255 как uint8
. Нормируйте эти значения путем преобразования кадрированного изображения в double
и деления каждой ячейки на 255. Это изображение показывает препятствия значениями близко к 0. Вычтите нормированное изображение от 1, чтобы добраться, значения заполнения с 1 представлением заняли место.
Создайте объект OccupancyGrid
с помощью настроенного изображения карты. Импортированное разрешение карты является 20 ячейками на метр.
Ограничения
Значения заполнения имеют ограниченное разрешение ±0.001. Значения хранятся как int16
с помощью представления логарифмических разногласий. Этот тип данных ограничивает разрешение, но сохраняет вас память при хранении больших карт в MATLAB®. При вызове set
и затем get
, возвращенное значение не может равняться значению, которое вы устанавливаете. Для получения дополнительной информации смотрите раздел представлений логарифмических разногласий в Сетках Заполнения.
Расширенные возможности
Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.
Введенный в R2017b