vehicleCostmap

Costmap, представляющая пространство планирования вокруг транспортного средства

Описание

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

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

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

Создание

Описание

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

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

пример

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

costmap = vehicleCostmap(occMap) создает транспортное средство косметику из карты заполнения occMap. Для использования этого синтаксиса требуется Navigation 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

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

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

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

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

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

Расположение Costmap, заданное как двухэлементный вектор с реальным значением вида [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 вокруг транспортного средства, определенного как неотрицательный целочисленный вектор с четырьмя элементами формы [<reservedrangesplaceholder3> <reservedrangesplaceholder2> <reservedrangesplaceholder1> <reservedrangesplaceholder0> ].

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

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

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

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

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

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

  • nrows - количество строк камер сетки в косметической карте.

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

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

checkFreeПроверьте косметику транспортного средства на безколлизионные положения или точки
checkOccupiedПроверьте косметику транспортного средства на занятые положения или точки
getCostsПолучите значение затрат на камеры в транспортное средство costmap
setCostsУстановите значение затрат на камеры в транспортное средство costmap
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