Пакет: военно-морской
Создайте пространство состояний для планирования пути
nav.StateSpace
интерфейс для пространств состояний, используемых для планирования пути. Выведите из этого класса, если вы хотите задать свое собственное пространство состояний. Это представление допускает выборку, интерполяцию и вычисление расстояний между пробелами в пространстве состояний.
Чтобы создать демонстрационный шаблон для генерации вашего собственного класса пространства состояний, вызвать createPlanningTemplate
. Для наших реализаций класса пространства состояний смотрите Пространства состояний.
nav.StateSpace
классом является handle
класс.
создает объект пространства состояний с именем и границами состояния. ssObj
= nav.StateSpace(Name
,NumStateVariables
,Bounds
)NumStateVariables
задает количество переменных состояния. Этот конструктор может только быть назван от производного класса. Создайте свое собственное использование определения класса createPlanningTemplate
.
NumStateVariables
— Количество переменных в пространстве состоянийКоличество переменных в пространстве состояний в виде положительного числового скаляра. Это свойство является размерностью пространства состояний.
Пример 3
SetAccess - immutable
StateBounds
— Min и макс. границы переменных состояния[min max]
| n-by-2 матрицаMin и макс. границы переменных состояния в виде [min max]
n-by-2 матрица. Это свойство зависит от NumStateVariables
, где n является количеством переменных состояния. При определении на конструкции используйте Bounds
входной параметр.
Пример: [-10 10; -10 10; -pi pi]
GetAccess | public |
SetAccess | protected |
Dependent | true |
Типы данных: double
Name
— Имя объекта пространства состоянийИмя пространства состояний возражает в виде строкового скаляра или вектора символов.
Пример: "customSE2StateSpace"
GetAccess | protected |
SetAccess | protected |
copy | Скопируйте массив объектов указателя |
distance | Расстояние между двумя состояниями |
enforceStateBounds | Предельное состояние, чтобы утвердить границы |
interpolate | Интерполируйте между состояниями |
sampleGaussian | Демонстрационное состояние с помощью Распределения Гаусса |
sampleUniform | Демонстрационное состояние с помощью равномерного распределения |
В этом примере показано, как использовать createPlanningTemplate
функция, чтобы сгенерировать шаблон для настройки вашего собственного определения пространства состояний и сэмплера, чтобы использовать с алгоритмами планирования пути. Простой реализации предоставляют шаблон.
Вызовите создать функцию шаблона. Эта функция генерирует файл определения класса для вас, чтобы изменить для вашей собственной реализации.
createPlanningTemplate
Класс и определение свойства
Первая часть шаблона задает определение класса и любые свойства для класса. Выведите из nav.StateSpace
класс. В данном примере создайте свойство для равномерных и нормальных распределений. Можно задать любые дополнительные пользовательские свойства здесь.
classdef MyCustomStateSpace < nav.StateSpace & ... matlabshared.planning.internal.EnforceScalarHandle properties UniformDistribution NormalDistribution % Specify additional properties here end
Сохраните свой пользовательский класс пространства состояний и гарантируйте, что ваше имя файла совпадает с именем класса.
Конструктор класса
Используйте конструктора, чтобы определить имя пространства состояний, количество переменных состояния, и задать его контуры. В качестве альтернативы можно добавить входные параметры в функцию и передать переменные в том, когда вы создаете объект.
Для каждой переменной состояния задайте [min max]
значения для границ состояния.
Вызовите конструктора базового класса.
В данном примере вы указываете, что значения свойств нормального и равномерного распределения с помощью предопределили NormalDistribution
и UniformDistribution
классы.
Задайте любые другие пользовательские значения свойств здесь.
methods function obj = MyCustomStateSpace spaceName = "MyCustomStateSpace"; numStateVariables = 3; stateBounds = [-100 100; % [min max] -100 100; -100 100]; obj@nav.StateSpace(spaceName, numStateVariables, stateBounds); obj.NormalDistribution = matlabshared.tracking.internal.NormalDistribution(numStateVariables); obj.UniformDistribution = matlabshared.tracking.internal.UniformDistribution(numStateVariables); % User-defined property values here end
Копировать семантику
Задайте copy
определение метода. Скопируйте все значения своих пользовательских переменных в новый объект, таким образом, copyObj
глубокая копия. Поведение по умолчанию, данное в этом примере, создает новую копию объекта с тем же именем, границами состояния и распределениями.
function copyObj = copy(obj) copyObj = feval(class(obj)); copyObj.StateBounds = obj.StateBounds; copyObj.UniformDistribution = obj.UniformDistribution.copy; copyObj.NormalDistribution = obj.NormalDistribution.copy; end
Осуществите границы состояния
Задайте, как гарантировать, что состояния всегда в границах состояния. В данном примере значения состояния насыщаются в минимальных или максимальных значениях для границ состояния.
function boundedState = enforceStateBounds(obj, state) nav.internal.validation.validateStateMatrix(state, nan, obj.NumStateVariables, "enforceStateBounds", "state"); boundedState = state; boundedState = min(max(boundedState, obj.StateBounds(:,1)'), ... obj.StateBounds(:,2)'); end
Произведите однородно
Задайте поведение для выборки через равномерное распределение. поддержите несколько синтаксисов, чтобы ограничить равномерное распределение к соседнему состоянию на определенном расстоянии и выборке несколько состояний.
STATE = sampleUniform(OBJ) STATE = sampleUniform(OBJ,NUMSAMPLES) STATE = sampleUniform(OBJ,NEARSTATE,DIST) STATE = sampleUniform(OBJ,NEARSTATE,DIST,NUMSAMPLES)
В данном примере используйте функцию валидации, чтобы обработать varargin
введите, который обрабатывает различные входные параметры.
function state = sampleUniform(obj, varargin) narginchk(1,4); [numSamples, stateBounds] = obj.validateSampleUniformInput(varargin{:}); obj.UniformDistribution.RandomVariableLimits = stateBounds; state = obj.UniformDistribution.sample(numSamples); end
Выборка от распределения Гаусса
Задайте поведение для выборки через Распределение Гаусса. Поддержите несколько синтаксисов для выборки одного состояния или нескольких состояний.
STATE = sampleGaussian(OBJ, MEANSTATE, STDDEV) STATE = sampleGaussian(OBJ, MEANSTATE, STDDEV, NUMSAMPLES)
function state = sampleGaussian(obj, meanState, stdDev, varargin) narginchk(3,4); [meanState, stdDev, numSamples] = obj.validateSampleGaussianInput(meanState, stdDev, varargin{:}); obj.NormalDistribution.Mean = meanState; obj.NormalDistribution.Covariance = diag(stdDev.^2); state = obj.NormalDistribution.sample(numSamples); state = obj.enforceStateBounds(state); end
Интерполируйте между состояниями
Задайте, как интерполировать между двумя состояниями в вашем пространстве состояний. Используйте вход, fraction
, определить, как произвести вдоль пути между двумя состояниями. В данном примере задайте основной метод линейной интерполяции с помощью различия между состояниями.
function interpState = interpolate(obj, state1, state2, fraction) narginchk(4,4); [state1, state2, fraction] = obj.validateInterpolateInput(state1, state2, fraction); stateDiff = state2 - state1; interpState = state1 + fraction' * stateDiff; end
Вычислите расстояние между состояниями
Задайте, как вычислить расстояние между двумя состояниями в вашем пространстве состояний. Используйте state1
и state2
входные параметры, чтобы задать положения начала и конца. Оба входных параметров могут быть одним состоянием (вектор-строка) или несколько состояний (матрица векторов-строк). В данном примере вычислите расстояние на основе Евклидова расстояния между каждой парой положений состояния.
function dist = distance(obj, state1, state2) narginchk(3,3); nav.internal.validation.validateStateMatrix(state1, nan, obj.NumStateVariables, "distance", "state1"); nav.internal.validation.validateStateMatrix(state2, size(state1,1), obj.NumStateVariables, "distance", "state2"); stateDiff = bsxfun(@minus, state2, state1); dist = sqrt( sum( stateDiff.^2, 2 ) ); end
Отключите разделы класса и методы.
end end
Сохраните свое определение класса пространства состояний. Можно теперь использовать конструктора класса, чтобы создать объект для пространства состояний.
nav.StateValidator
| stateSpaceDubins
| stateSpaceReedsShepp
| stateSpaceSE2
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.