vehicleCostmap

Пробел планирования представления Costmap вокруг автомобиля

Описание

Объект vehicleCostmap создает costmap, который представляет пространство поиска планирования вокруг автомобиля. costmap содержит информацию о среде, такой как препятствия или области, которые не может пересечь автомобиль. Чтобы проверять на столкновения, costmap раздувает препятствия с помощью радиуса инфляции, заданного в свойстве CollisionChecker. costmap используется алгоритмами планирования пути, такими как pathPlannerRRT, чтобы найти, что пути без коллизий для автомобиля следуют.

costmap хранится как 2D сетка ячеек, часто названных occupancy grid. Каждая ячейка сетки в costmap имеет значение в области значений [0, 1] представление стоимости навигации через ту ячейку сетки. Состоянием каждой ячейки сетки является free, occupied или unknown, как определено свойствами FreeThreshold и OccupiedThreshold.

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

Создание

Синтаксис

costmap = vehicleCostmap(C)
costmap = vehicleCostmap(mapWidth,mapLength)
costmap = vehicleCostmap(mapWidth,mapLength,costVal)
costmap = vehicleCostmap(occGrid)
costmap = vehicleCostmap(___,'MapLocation',mapLocation)
costmap = vehicleCostmap(___,Name,Value)

Описание

costmap = vehicleCostmap(C) создает автомобиль costmap использование величины затрат в матричном C.

costmap = vehicleCostmap(mapWidth,mapLength) создает автомобиль costmap представление области ширины mapWidth и длина mapLength в мировых модулях. По умолчанию каждая ячейка сетки находится в неизвестном состоянии.

пример

costmap = vehicleCostmap(mapWidth,mapLength,costVal) также присваивает стоимость по умолчанию, costVal, к каждой ячейке в сетке.

costmap = vehicleCostmap(occGrid) создает автомобиль costmap из сетки заполнения occGrid. Использование этого синтаксиса требует Robotics System Toolbox™.

costmap = vehicleCostmap(___,'MapLocation',mapLocation) задает в mapLocation нижние левые угловые координаты costmap. Задайте 'MapLocation',mapLocation после любых из предыдущих входных параметров и в любом порядке среди аргументов пары Name,Value.

costmap = vehicleCostmap(___,Name,Value) использование аргументы пары Name,Value, чтобы задать FreeThreshold, OccupiedThreshold, CollisionChecker и свойства CellSize. Например, vehicleCostmap(C,'CollisionChecker',ccConfig) использует объект inflationCollisionChecker, ccConfig, чтобы представлять форму автомобиля и проверку на столкновения. После того, как вы создадите объект, можно обновить все эти свойства кроме CellSize.

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

развернуть все

Величина затрат, заданная как матрица действительных значений, которые находятся в области значений [0, 1].

При создании объекта vehicleCostmap, если вы не задаете C или универсальную величину затрат, costVal, затем величиной затрат по умолчанию на каждую ячейку сетки является (FreeThreshold + OccupiedThreshold)/2.

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

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

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

Универсальная величина затрат применилась ко всем ячейкам в costmap, заданном как действительный скаляр в области значений [0, 1].

При создании объекта vehicleCostmap, если вы не задаете costVal или матрицу величины затрат, C, затем величиной затрат по умолчанию на каждую ячейку сетки является (FreeThreshold + OccupiedThreshold)/2.

Сетка заполнения, заданная как объект robotics.OccupancyGrid или robotics.BinaryOccupancyGrid. Использование этого аргумента требует Robotics System Toolbox.

Местоположение Costmap, заданное как двухэлементный вектор с действительным знаком формы [mapX mapY]. Этот вектор задает координатное местоположение нижнего левого угла costmap.

Пример: 'MapLocation',[8 8]

Свойства

развернуть все

Порог, ниже которого ячейка сетки свободна, задана как действительный скаляр в области значений [0, 1].

Ячейка сетки со стоимостью c может иметь одно из этих состояний:

  • Если c <FreeThreshold, состояние ячейки сетки свободно.

  • Если cFreeThreshold и cOccupiedThreshold, состояние ячейки сетки неизвестно.

  • Если c> OccupiedThreshold, состояние ячейки сетки занято.

Порог, выше которого занята ячейка сетки, задал как действительный скаляр в области значений [0, 1].

Ячейка сетки со стоимостью c может иметь одно из этих состояний:

  • Если c <FreeThreshold, состояние ячейки сетки свободно.

  • Если cFreeThreshold и cOccupiedThreshold, состояние ячейки сетки неизвестно.

  • Если c> OccupiedThreshold, состояние ячейки сетки занято.

Проверяющая столкновение настройка, заданная как объект InflationCollisionChecker. Чтобы создать этот объект, используйте функцию inflationCollisionChecker. Используя свойства объекта InflationCollisionChecker, можно сконфигурировать:

  • Радиус инфляции раньше раздувал препятствия в costmap

  • Количество кругов раньше заключало автомобиль при вычислении радиуса инфляции

  • Размещение каждого круга вдоль продольной оси автомобиля

  • Размерности автомобиля

По умолчанию CollisionChecker использует объект InflationCollisionChecker по умолчанию, который создается с помощью синтаксиса inflationCollisionChecker(). Эта проверяющая столкновение настройка заключает автомобиль в один круг.

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

Степень costmap вокруг автомобиля, заданного как четырехэлементный, неотрицательный целочисленный вектор формы [xmin xmax ymin ymax].

  • xmin и xmax описывают длину карты в мировых координатах.

  • ymin и ymax описывают ширину карты в мировых координатах.

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

Можно задать CellSize, когда вы создаете объект vehicleCostmap. Однако после того, как вы создаете объект, CellSize становится только для чтения.

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

Размер costmap сетки, заданной как двухэлементный, положительный целочисленный вектор формы [nrows ncols].

  • nrows является количеством строк ячейки сетки в costmap.

  • ncols является количеством столбцов ячейки сетки в costmap.

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

checkFreeПроверяйте автомобиль costmap на положения без коллизий или точки
checkOccupiedПроверяйте автомобиль costmap на занятые положения или точки
getCostsПолучите величину затрат на ячейки в автомобиле costmap
setCostsУстановите величину затрат на ячейки в автомобиле costmap
plotПостройте автомобиль costmap

Примеры

свернуть все

Создайте 10 20 метр costmap, который разделен на квадратные ячейки размера 0.5 0.5 метры. Задайте величину затрат по умолчанию на 0,5 для всех ячеек.

mapWidth = 10;
mapLength = 20;
costVal = 0.5;
cellSize = 0.5;

costmap = vehicleCostmap(mapWidth,mapLength,costVal,'CellSize',cellSize)
costmap = 
  vehicleCostmap with properties:

        FreeThreshold: 0.2000
    OccupiedThreshold: 0.6500
     CollisionChecker: [1x1 driving.costmap.InflationCollisionChecker]
             CellSize: 0.5000
              MapSize: [40 20]
            MapExtent: [0 10 0 20]

Отметьте препятствие на costmap. Отобразите costmap.

occupiedVal = 0.9;
xyPoint = [2,4]; 
setCosts(costmap,xyPoint,occupiedVal)

plot(costmap)

Отметьте область без препятствий на costmap. Отобразите costmap снова.

freeVal = 0.15; 
[X,Y] = meshgrid(3.5:cellSize:5,0.5:cellSize:1.5); 
setCosts(costmap,[X(:),Y(:)],freeVal)
plot(costmap) 

Алгоритмы

Чтобы упростить проверку то, является ли положение автомобиля в столкновении, vehicleCostmap раздувает размер препятствий. Проверяющий столкновение алгоритм выполняет эти шаги:

  1. Вычислите радиус инфляции, в мировых модулях, от размерностей автомобиля. Радиус инфляции по умолчанию равен радиусу самого маленького набора перекрывающихся кругов, требуемых полностью заключать автомобиль. Центральные точки кругов простираются вдоль продольной оси автомобиля. Увеличение числа кругов уменьшает радиус инфляции, который включает более точную проверку столкновения.

    Радиус инфляции, один центрРадиус инфляции, три центра

  2. Преобразуйте радиус инфляции во многие ячейки сетки, R. Окружите значения нецелого числа R к следующему самому большому целому числу.

  3. Раздуйте размер препятствий с помощью R. Маркируйте все ячейки в расширенной области, как занято.

    Схемы отображают занятые ячейки темно-красным. Ячейки в расширенной области окрашены светло-красные. Чистая черная строка показывает исходный радиус инфляции. В схеме слева, R равняется 3. В схеме справа, R равняется 2.

    Расширенные ячейки сетки, один центрРасширенные ячейки сетки, три центра

  4. Проверяйте, лежат ли центральные точки автомобиля на расширенных ячейках сетки.

    • Если какая-либо центральная точка находится на расширенной ячейке сетки, то положение автомобиля занято. Функция checkOccupied возвращает true. Занятое положение не обязательно означает столкновение. Например, автомобиль может лечь на расширенную ячейку сетки, но не на ячейку сетки, которая на самом деле занята.

    • Если никакие центральные точки не лежат на расширенных ячейках сетки, и величина затрат на каждую ячейку, содержащую центральную точку, является меньше, чем FreeThreshold, то положение автомобиля свободно. Функция checkFree возвращает true.

    • Если никакие центральные точки не лежат на расширенных ячейках сетки, и величина затрат на любую ячейку, содержащую центральную точку, больше, чем FreeThreshold, то положение автомобиля неизвестно. И checkFree и checkOccupied возвращают false.

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

Позируйте в столкновении, одном центреПозируйте в столкновении, трех центрах

Вопросы совместимости

развернуть все

Не рекомендуемый запуск в R2018b

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

Введенный в R2018a