Определите, является ли запланированный путь свободным препятствием
isPathValid(
возвращает любого логический pathMetricsObj
)1 (true)
если запланированный путь является свободным препятствием или логический 0 (false)
если путь недопустим.
Вычислите гладкость, разрешение и валидность запланированного пути на основе набора положений и связанной среды карты.
Загрузите и присвойте карту блоку проверки допустимости состояния
Создайте карту заполнения из карты в качестве примера и установите разрешение карты.
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.21
Оцените гладкость пути. Значения близко к 0
укажите на более сглаженный путь. Прямолинейные пути возвращают значение 0
.
smoothness(pathMetricsObj)
ans = 2.21
Визуализируйте минимальное разрешение пути.
show(pathMetricsObj) legend('Planned Path','Minimum Clearance')
pathMetricsObj
— Информация для метрик путиpathmetrics
объектИнформация для метрик пути, заданных как pathmetrics
объект.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.