exponenta event banner

vehicleCostmap

Схема затрат, представляющая пространство для планирования вокруг транспортного средства

Описание

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

Карта затрат хранится как 2-D сетка ячеек, часто называемая сеткой занятости или картой занятости. Каждая ячейка сетки в карте затрат имеет значение в диапазоне [0, 1], представляющее стоимость навигации по этой ячейке сетки. Состояние каждой ячейки сетки свободно, занято или неизвестно, как определено FreeThreshold и OccupiedThreshold свойства.

На следующем рисунке показана схема затрат с выборочными затратами и состояниями ячеек сетки.

Создание

Описание

costmap = vehicleCostmap(C) создает карту затрат на транспортное средство с использованием значений затрат в матрице C.

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

пример

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

costmap = vehicleCostmap(occMap) создает карту затрат на транспортное средство на основе карты заполняемости occMap. Для использования этого синтаксиса требуется Toolbox™ навигации.

costmap = vehicleCostmap(___,'MapLocation',mapLocation) указывает в mapLocation координаты нижнего левого угла карты затрат. Определить '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, в мировых единицах, заданная как положительный действительный скаляр.

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

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

Карта занятости, указанная как occupancyMap(Панель инструментов навигации) или binaryOccupancyMap(Панель инструментов навигации). Для использования этого аргумента требуется панель инструментов навигации.

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

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

Свойства

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

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

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

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

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

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

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

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

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

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

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

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

  • Радиус инфляции, используемый для раздувания препятствий в карте затрат

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

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

  • Габариты транспортного средства

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

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

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

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

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

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

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

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

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

  • nrows - количество строк ячеек сетки в карте затрат.

  • ncols - количество столбцов ячейки сетки в карте затрат.

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

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

Примеры

свернуть все

Создайте карту затрат размером 10 на 20 метров, которая разделена на квадратные ячейки размером 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]

Отметьте препятствие на карте расходов. Просмотрите карту затрат.

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

plot(costmap)

Figure contains an axes. The axes contains 2 objects of type image, patch. This object represents Inflated Areas.

Отметьте свободную от препятствий область на карте затрат. Просмотрите карту затрат еще раз.

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

Figure contains an axes. The axes contains 2 objects of type image, patch. This object represents Inflated Areas.

Алгоритмы

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

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

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

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

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

    На диаграммах показаны занятые клетки темно-красным цветом. Клетки в надутой области окрашены в светло-красный цвет. Сплошная черная линия показывает исходный радиус накачки. На диаграмме слева R равно 3. На диаграмме справа R равно 2.

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

  4. Проверьте, лежат ли центральные точки транспортного средства на ячейках накачанной сетки.

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

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

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

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

Поза при столкновении, один центрПоза в столкновении, три центра

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

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

Ошибки, начинающиеся с R2020b

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

.
Представлен в R2018a