inflationCollisionChecker

Проверяющая столкновение настройка для costmap на основе инфляции

Описание

inflationCollisionChecker функция создает InflationCollisionChecker объект, который содержит проверяющую столкновение настройку транспортного средства costmap. Транспортное средство costmap с этой настройкой раздувает размер препятствий в среде транспортного средства. Эта инфляция основана на заданном InflationCollisionChecker свойства, такие как размерности транспортного средства и радиус кругов, требуемых заключать транспортное средство. Для получения дополнительной информации см. Алгоритмы. Алгоритмы планирования пути, такие как pathPlannerRRT, используйте эту costmap проверяющую столкновение настройку, чтобы избежать раздутых препятствий и запланировать пути без коллизий через среду.

Используйте InflationCollisionChecker возразите, чтобы установить CollisionChecker свойство вашего vehicleCostmap объект. Эта проверяющая столкновение настройка влияет на возвращаемые значения checkFree и checkOccupied функции используются vehicleCostmap. Эти значения указывают, свободно ли положение транспортного средства или занято.

Создание

Описание

ccConfig = inflationCollisionChecker создает InflationCollisionChecker объект, ccConfig, это содержит проверяющую столкновение настройку транспортного средства costmap. Этот объект использует один круг, чтобы заключить транспортное средство. Размерности транспортного средства соответствуют значениям vehicleDimensions по умолчанию объект.

ccConfig = inflationCollisionChecker(vehicleDims) задает размерности транспортного средства, где vehicleDims vehicleDimensions объект. vehicleDims введите устанавливает VehicleDimensions свойство ccConfig.

пример

ccConfig = inflationCollisionChecker(vehicleDims,numCircles) также указывает, что количество кругов раньше заключало транспортное средство. numCircles введите устанавливает NumCircles свойство ccConfig.

пример

ccConfig = inflationCollisionChecker(___,Name,Value) устанавливает CenterPlacements и InflationRadius свойства с помощью пар "имя-значение" и входных параметров от любого из предыдущих синтаксисов. Заключите каждое имя свойства в кавычки.

Пример: inflationCollisionChecker('CenterPlacements',[0.2 0.5 0.8],'InflationRadius',1.2)

Свойства

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

Количество кругов раньше заключало транспортное средство и вычисляло радиус инфляции, заданный как положительное целое число. Типичные значения от 1 до 5.

  • Для более быстрой но более консервативной проверки столкновения сократите число кругов. Этот подход улучшает производительность, потому что алгоритм планирования пути осуществляет меньше проверок столкновения.

  • Для более медленной но более точной проверки столкновения увеличьте число кругов. Этот подход полезен при планировании пути вокруг тупиков или через узкие коридоры, такой как на парковке.

Нормированное размещение центров круга вдоль продольной оси транспортного средства, заданного как 1 NumCircles вектор действительных значений в области значений [0, 1].

  • Значение 0 мест центр круга с задней стороны транспортного средства.

  • Значение 1 места центр круга впереди транспортного средства.

Задайте CenterPlacements когда это необходимо, выровнять круги с точными позициями по транспортному средству. Если вы оставляете CenterPlacements незаданный, объект вычисляет центральные размещения так, чтобы круги полностью заключили транспортное средство. Если вы изменяете количество центральных размещений, NumCircles обновляется к числу элементов в CenterPlacements.

Размерности транспортного средства использовались для расчета радиуса инфляции, заданного как vehicleDimensions объект. По умолчанию, InflationCollisionChecker возразите использует размерности vehicleDimensions по умолчанию объект. Размерности транспортного средства находятся в мировых единицах измерения.

Радиус инфляции, заданный как неотрицательное вещественное число. По умолчанию объект вычисляет радиус инфляции на основе значений NumCircles, CenterPlacements, и VehicleDimensions. Для получения дополнительной информации см. Алгоритмы.

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

plotПостройте настройку столкновения

Примеры

свернуть все

Запланируйте путь к транспортному средству к узкому месту для парковки при помощи оптимизированного быстро исследующего случайного дерева (RRT*) алгоритм. Попробуйте различные проверяющие столкновение настройки в costmap, используемом RRT* планировщик пути.

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

data = load('parkingLotCostmap.mat');
costmap = data.parkingLotCostmap;

figure
plot(costmap)
title('Collision Checking with One Circle')

Используйте inflationCollisionChecker создать новую проверяющую столкновение настройку для costmap.

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

  • Чтобы задать размерности транспортного средства, используйте vehicleDimensions объект.

Задайте проверяющую столкновение настройку в CollisionChecker свойство costmap.

vehicleDims = vehicleDimensions(4.5,1.7);  % 4.5 m long, 1.7 m wide
numCircles = 3;
ccConfig = inflationCollisionChecker(vehicleDims,numCircles);
costmap.CollisionChecker = ccConfig;

Отобразите costmap с новой проверяющей столкновение настройкой. Расширенные области уменьшаются.

figure
plot(costmap)
title('Collision Checking with Three Circles')

Опишите задачу планирования: транспортное средство запускается около левого входа парковки и концов в месте для парковки.

startPose = [11 10 0];   % [meters, meters, degrees]
goalPose = [31.5 17 90]; 

Используйте pathPlannerRRT возразите, чтобы запланировать путь к месту для парковки. Постройте запланированный путь.

planner = pathPlannerRRT(costmap);
refPath = plan(planner,startPose,goalPose);

hold on
plot(refPath)
hold off

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

Задайте размерности транспортного средства при помощи vehicleDimensions объект.

length = 5; % meters
width = 2; % meters
vehicleDims = vehicleDimensions(length,width);

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

distFromSide = 0.175;
centerPlacements = [distFromSide 0.5 1-distFromSide];
inflationRadius = 1.2;

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

ccConfig = inflationCollisionChecker(vehicleDims, ...
    'CenterPlacements',centerPlacements,'InflationRadius',inflationRadius);

figure
plot(ccConfig)

В этой настройке углы транспортного средства не заключены в кругах. Чтобы полностью заключить транспортное средство, увеличьте радиус инфляции. Отобразите обновленную настройку.

ccConfig.InflationRadius = 1.3;
plot(ccConfig)

Используйте эту проверяющую столкновение настройку, чтобы создать 10 20 метр costmap.

costmap = vehicleCostmap(10,20,0.1,'CollisionChecker',ccConfig);

Советы

  • Чтобы визуально проверить, что круги полностью заключают транспортное средство, используйте plot функция. Если круги не полностью заключают транспортное средство, некоторые свободные положения, возвращенные checkFree (или незанятые положения, возвращенные checkOccupied) может на самом деле быть в столкновении.

Алгоритмы

InflationRadius свойство InflationCollisionChecker определяет сумму, в мировых единицах измерения, которыми можно раздуть препятствия. По умолчанию, InflationRadius равно радиусу самого маленького набора перекрывающихся кругов, требуемых полностью заключать транспортное средство, как определено следующими свойствами:

  • NumCircles — Количество кругов раньше заключало транспортное средство

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

  • VehicleDimensions — Размерности транспортного средства

Для получения дополнительной информации о том, как эта проверяющая столкновение настройка задает раздутые области в costmap, смотрите раздел Algorithms vehicleCostmap.

Ссылки

[1] Циглер, J. и К. Стиллер. "Быстрая проверка столкновения интеллектуальное планирование движения транспортного средства". IEEE интеллектуальный симпозиум транспортного средства. 21-24 июня 2010.

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

Введенный в R2018b