vehicleCostmap

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

Описание

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

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

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

Создание

Описание

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

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

пример

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

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

Карта заполнения в виде occupancyMap (Navigation Toolbox) или binaryOccupancyMap Объект (Navigation Toolbox). Использование этого аргумента требует Navigation 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)

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

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

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 object. The axes object 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