pathmetrics

Информация для метрик пути

Описание

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

Создание

Описание

pathMetricsObj = pathmetrics(path) создает основанное на объектах на входе navPath объект. Блок проверки допустимости состояния принят, чтобы быть validatorOccupancyMap объект. path введите устанавливает значение свойства Path.

пример

pathMetricsObj = pathmetrics(path,validator) создает основанное на объектах на входе navPath блок проверки допустимости объектной и ассоциированной страны для проверки валидности пути. validator введите устанавливает значение свойства StateValidator.

Свойства

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

Структура данных пути в виде navPath объект является путем, метрика которого должна быть вычислена.

Блок проверки допустимости для состояний на пути, заданном любой как validatorOccupancyMap или validatorVehicleCostmap объект.

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

clearanceМинимальное разрешение пути
isPathValidОпределите, является ли запланированный путь свободным препятствием
showВизуализируйте метрики пути в среде карты
smoothnessГладкость пути

Примеры

свернуть все

Вычислите гладкость, разрешение и валидность запланированного пути на основе набора положений и связанной среды карты.

Загрузите и присвойте карту блоку проверки допустимости состояния

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

load exampleMaps.mat; % simpleMap
mapResolution = 1; % cells/meter
map = occupancyMap(simpleMap,mapResolution);

Создайте пространство состояний Dubins.

statespace = stateSpaceDubins;

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

statevalidator = validatorOccupancyMap(statespace);

Присвойте карту блоку проверки допустимости.

statevalidator.Map = map;

Установите расстояние валидации для блока проверки допустимости.

statevalidator.ValidationDistance = 0.01;

Обновите границы пространства состояний, чтобы совпасть с пределами карты.

statespace.StateBounds = [map.XWorldLimits;map.YWorldLimits;[-pi pi]];

Запланируйте путь

Создайте RRT* планировщик пути и позвольте дальнейшую оптимизацию.

planner = plannerRRTStar(statespace,statevalidator);
planner.ContinueAfterGoalReached = true;

Сократите максимальное количество итераций и увеличьте максимальное расстояние связи.

planner.MaxIterations = 2500;
planner.MaxConnectionDistance = 0.3;

Задайте запускаются и целевые состояния для планировщика пути как [x, y, theta] векторы. X и Y являются Декартовы координаты, и тета является углом ориентации.

start = [2.5, 2.5, 0]; % [meters, meters, radians]
goal = [22.5, 8.75, 0];

Запланируйте путь от начального состояния до целевого состояния. Функция плана возвращает navPath объект.

rng(100,'twister') % repeatable result
[path,solutionInfo] = plan(planner,start,goal);

Вычислите и визуализируйте метрики пути

Создайте метрический объект пути.

pathMetricsObj = pathmetrics(path,statevalidator);

Проверяйте валидность пути. Результатом является 1 (true) если запланированный путь является свободным препятствием. 0 (false) указывает на недопустимый путь.

isPathValid(pathMetricsObj)
ans = logical
   1

Вычислите минимальное разрешение пути.

clearance(pathMetricsObj)
ans = 0.0257

Оцените гладкость пути. Значения близко к 0 укажите на более сглаженный путь. Прямолинейные пути возвращают значение 0.

smoothness(pathMetricsObj)
ans = 1.7453

Визуализируйте минимальное разрешение пути.

show(pathMetricsObj)
legend('Planned Path','Minimum Clearance')

Запланируйте путь к транспортному средству через парковку с помощью RRT* алгоритм. Вычислите и визуализируйте гладкость, разрешение и валидность запланированного пути.

Загрузите и присвойте карту блоку проверки допустимости состояния

Загрузите costmap парковки. Постройте costmap, чтобы видеть парковку и расширенные области, которых должно избежать транспортное средство.

load parkingLotCostmap.mat;
costmap = parkingLotCostmap;
plot(costmap)
xlabel('X (meters)')
ylabel('Y (meters)')

Создайте stateSpaceDubins возразите и увеличьте минимум радиус Тьюринга до 4 метры.

statespace = stateSpaceDubins;
statespace.MinTurningRadius = 4; % meters

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

statevalidator = validatorVehicleCostmap(statespace);

Присвойте парковку costmap объекту блока проверки допустимости состояния.

statevalidator.Map = costmap;

Запланируйте путь

Задайте запускаются и целевые положения для транспортного средства как [xY, ΘВекторы. Мировые единицы измерения для (xY) местоположения исчисляются в метрах. Мировые единицы измерения для углов ориентации Θ в градусах.

startPose = [5, 5, 90]; % [meters, meters, degrees]
goalPose = [40, 38, 180]; % [meters, meters, degrees]

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

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

Интерполируйте вдоль пути на уровне каждого метра. Преобразуйте углы ориентации от степеней до радианов.

poses = zeros(size(refPath.PathSegments,2)+1,3);
poses(1,:) = refPath.StartPose;
for i = 1:size(refPath.PathSegments,2) 
    poses(i+1,:) = refPath.PathSegments(i).GoalPose; 
end
poses(:,3) = deg2rad(poses(:,3));

Создайте navPath объект с помощью пространства состояний Dubins возражает и состояния, заданные poses.

path = navPath(statespace,poses);

Вычислите и визуализируйте метрики пути

Создайте pathmetrics объект.

pathMetricsObj = pathmetrics(path,statevalidator);

Проверяйте валидность пути. Результатом является 1 TRUE) если запланированный путь является свободным препятствием. 0 ложь) указывает на недопустимый путь.

isPathValid(pathMetricsObj)
ans = logical
   1

Вычислите и визуализируйте минимальный clearance из пути.

clearance(pathMetricsObj)
ans = 1.1014
show(pathMetricsObj)
legend('Inflated Areas','Planned Path','Minimum Clearance')
xlabel('X (meters)')
ylabel('Y (meters)')

Вычислите и визуализируйте smoothness из пути. Значения близко к 0 укажите на более сглаженный путь. Прямолинейные пути возвращают значение 0.

smoothness(pathMetricsObj)
ans = 0.0658
show(pathMetricsObj,'Metrics',{'Smoothness'})
legend('Inflated Areas','Path Smoothness')
xlabel('X (meters)')
ylabel('Y (meters)')

Визуализируйте разрешение для каждого состояния пути.

show(pathMetricsObj,'Metrics',{'StatesClearance'})
legend('Inflated Areas','Planned Path','Clearance of Path States')
xlabel('X (meters)')
ylabel('Y (meters)')

Смотрите также

| |

Введенный в R2019b

Для просмотра документации необходимо авторизоваться на сайте