inflationCollisionChecker

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

Описание

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

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

Создание

Синтаксис

ccConfig = inflationCollisionChecker
ccConfig = inflationCollisionChecker(vehicleDims)
ccConfig = inflationCollisionChecker(vehicleDims,numCircles)
ccConfig = inflationCollisionChecker(___,Name,Value)

Описание

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