主要内容

导航。StateSpace类

包:导航

创建用于路径规划的状态空间

描述

导航。StateSpace是用于路径规划的状态空间的接口。如果您想定义自己的状态空间,则从该类派生。这种表示允许在状态空间中进行采样、插值和计算空间之间的距离。

要创建用于生成您自己的状态空间类的示例模板,请调用createPlanningTemplate.有关通用应用程序的状态验证器类的具体实现,请参见状态空间运动规划

导航。StateSpace类是一个处理类。

类属性

摘要
真正的

有关类属性的信息,请参见类属性

创建

描述

例子

ssObj=导航。StateSpace (的名字NumStateVariables界限创建具有给定名称和状态边界的状态空间对象。NumStateVariables指定状态变量的数量。此构造函数只能从派生类调用。使用。创建自己的类定义createPlanningTemplate

属性

全部展开

公共属性

状态空间中的变量数,指定为正数值标量。这个属性是状态空间的维度。

例子:3.

属性:

SetAccess——不可变的

状态变量的最小和最大界限,指定为(最小最大)n2矩阵。这个属性取决于NumStateVariables,在那里n是状态变量的个数。当指定构造时,使用界限输入。

例子:[-10 10;-10年10;π-π)

属性:

GetAccess
公共
SetAccess
受保护的
依赖
真正的

数据类型:

受保护的属性

状态空间对象的名称,指定为字符串标量或字符向量。

例子:“customSE2StateSpace”

属性:

GetAccess
受保护的
SetAccess
受保护的

方法

全部展开

例子

全部折叠

这个例子展示了如何使用createPlanningTemplate函数生成一个模板,用于自定义自己的状态空间定义和用于路径规划算法的采样器。模板提供了一个简单的实现。

调用create template函数。此函数生成一个类定义文件,以便您为自己的实现进行修改。

createPlanningTemplate

类和属性定义

模板的第一部分指定类定义和类的任何属性。源自导航。StateSpace类。对于本例,为均匀分布和正态分布创建一个属性。您可以在这里指定任何其他用户定义的属性。

classdefMyCustomStateSpace <导航。StateSpace &...matlabshared.planning.internal.EnforceScalarHandle属性UniformDistribution NormalDistribution%在这里指定其他属性结束

保存自定义状态空间类,并确保文件名与类名匹配。

类构造函数

使用构造函数设置状态空间的名称、状态变量的数量,并定义其边界。或者,您可以向函数添加输入参数,并在创建对象时传递变量。

  • 对于每个状态变量,定义(最小最大)状态边界的值。

  • 调用基类的构造函数。

  • 对于本例,您可以使用预定义值指定正态分布和均匀分布属性值NormalDistributionUniformDistribution类。

  • 在这里指定任何其他用户定义的属性值。

方法函数obj = MyCustomStateSpace spaceName =“MyCustomStateSpace”;numStateVariables = 3;statbounds = [-100 100;% (min马克斯)-100 100;-100 100);obj@nav.StateSpace (spaceName numStateVariables stateBounds);obj。NormalDistribution = matlabshared.tracking.internal.NormalDistribution (numStateVariables);obj。UniformDistribution = matlabshared.tracking.internal.UniformDistribution (numStateVariables);%此处用户定义的属性值结束

复制语义

指定复制方法定义。将用户定义变量的所有值复制到一个新对象中,所以copyObj是一份深度拷贝。本例中给出的默认行为将创建具有相同名称、状态边界和分布的对象的新副本。

函数copyObj = copy(obj) copyObj = feval(class(obj));copyObj。StateBounds = obj.StateBounds;copyObj。UniformDistribution = obj.UniformDistribution.copy;copyObj。NormalDistribution = obj.NormalDistribution.copy;结束

执行国家界限

指定如何确保状态始终在状态范围内。对于本例,状态值在状态边界的最小值或最大值处趋于饱和。

函数nav.internal. validate . validatestatematrix (state, nan, obj. state) . validatestatematrix (state, nan, obj。NumStateVariables,“enforceStateBounds”“状态”);boundedState =状态;boundedState = min(max(boundedState, obj.StateBounds(:,1)'),...obj.StateBounds (:, 2) ');结束

样品一致

指定跨均匀分布进行抽样的行为。金宝app支持多种语法来约束在一定距离内均匀分布到附近的一个状态,并对多个状态进行抽样。

STATE = sampleUniform(OBJ) STATE = sampleUniform(OBJ,NUMSAMPLES) STATE = sampleUniform(OBJ,NEARSTATE,DIST) STATE = sampleUniform(OBJ,NEARSTATE,DIST,NUMSAMPLES)

对于本例,使用验证函数来处理变长度输入宗量处理不同输入参数的输入。

函数state = sampleUniform(obj, varargin) narginchk(1,4);[numSamples, stateBounds] = obj.validateSampleUniformInput(varargin{:});obj.UniformDistribution.RandomVariableLimits = stateBounds;状态= obj.UniformDistribution.sample (numSamples);结束

高斯分布的样本

指定跨高斯分布采样的行为。金宝app支持对单个或多个状态进行抽样的多种语法。

STATE = sampleGaussian(OBJ, MEANSTATE, STDDEV) STATE = sampleGaussian(OBJ, MEANSTATE, STDDEV)

函数state = sampleGaussian(obj, meanState, stdDev, varargin) narginchk(3,4);[meanState, stdDev, numSamples] = obj. txt;validateSampleGaussianInput (meanState stdDev,变长度输入宗量{:});obj.NormalDistribution.Mean = meanState;obj.NormalDistribution.Covariance =诊断接头(stdDev。^ 2);状态= obj.NormalDistribution.sample (numSamples);状态= obj.enforceStateBounds(状态);结束

国家之间插入

定义如何在状态空间的两个状态之间插入。使用一个输入,分数,以确定如何沿着两种状态之间的路径进行采样。对于本例,定义一个使用状态差的基本线性插值方法。

函数interpState = interpolate(obj, state1, state2, fraction) narginchk(4,4); / /插入数据[state1, state2, fraction] = obj。validateInterpolateInput (state1 state2,分数);stateDiff = state2 - state1;interpState = state1 +分数' * stateDiff;结束

计算状态距离

指定如何计算状态空间中两个状态之间的距离。使用state1state2输入来定义开始和结束位置。两个输入都可以是单个状态(行向量)或多个状态(行向量矩阵)。对于这个例子,根据每对状态位置之间的欧氏距离计算距离。

函数/ /距离= obj, state1, state2nav.internal.validation.validateStateMatrix (nan, state1 obj。NumStateVariables,“距离”“state1”);nav.internal.validation.validateStateMatrix (state2、尺寸(state1, 1), obj。NumStateVariables,“距离”“state2”);stateDiff = bsxfun(@minus, state2, state1);dist = sqrt(sum(stateDiff.))^2, 2));结束

终止方法和类部分。

结束结束

保存状态空间类定义。现在可以使用类构造函数为状态空间创建对象。

扩展功能

C / c++代码生成
使用MATLAB®Coder™生成C和c++代码。

介绍了R2019b