主要内容

导航。StateValidator类

包:导航

为路径规划创建状态验证器

描述

导航。StateValidator是用于路径规划的所有状态验证器的接口。如果您想定义自己的状态验证器,则从该类派生。这种表示允许状态和运动验证。

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

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

类属性

摘要
真正的

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

创建

描述

例子

ssObj=导航。StateValidator (stateSpace创建一个验证给定状态空间中的状态的状态验证器对象。此构造函数只能从派生类调用。使用。创建自己的类定义createPlanningTemplate

属性

全部展开

的子类的对象指定的状态空间定义导航。StateSpace.属性指定此属性stateSpace施工投入。类中指定任何预定义对象验证状态部分运动规划

例子:stateSpaceSE2

属性:

GetAccess
公共
SetAccess
不可变的

方法

全部展开

例子

全部折叠

方法的使用createPlanningTemplate函数生成用于自定义自己的状态验证类的模板。状态验证与路径规划算法一起使用,以确保有效路径。模板函数为示例目的提供了一个基本实现。

调用create template函数。此函数生成一个类定义文件,供您修改为自己的实现。保存该文件。

createPlanningTemplate (“StateValidator”

类和属性定义

模板的第一部分指定类定义和类的所有属性。从导航。StateValidator类。您可以在这里指定任何其他用户定义属性。

classdefMyCustomStateValidator < nav.;StateValidator &...matlabshared.planning.internal.EnforceScalarHandle属性%用户定义属性结束

保存您的自定义状态验证器类,并确保您的文件名与类名匹配。

类构造函数

使用构造函数设置状态空间验证器的名称并指定状态空间对象。如果没有提供,则为状态空间设置一个默认值。调用基类的构造函数。初始化任何其他用户定义属性。本例使用的默认值为MyCustomStateSpace,这在前面的例子中已经说明了。

方法函数obj = MyCustomStateValidator(space) narginchk(0,1)如果nargin == 0 space = MyCustomStateSpace;结束obj@nav.StateValidator(空间);初始化用户定义的属性结束

复制语义

指定复制方法定义。将所有用户定义变量的值复制到一个新对象中,因此copyObj是深度拷贝。本例中给出的默认行为创建了一个具有相同类型的对象的新副本。

函数copyObj = copy(obj) copyObj = feval(class(obj), obj. statespace);结束

检查状态有效性

定义如何验证给定的状态。的状态输入可以是单个行向量,也可以是多个状态的行向量矩阵。为状态空间的任何特殊验证行为定制此函数,例如针对障碍物的碰撞检查。

函数isValid = isStateValid(obj, state) narginchk(2,2);nav.internal.validation.validateStateMatrix(state, nan, obj. statspace . numstatevariables,...“isStateValid”“状态”);bounds = obj. statspace . statebounds ';inBounds = state >= bounds(1,:) & state <= bounds(2,:);isValid = all(inBounds, 2);结束

检查运动有效性

定义如何生成状态之间的运动,并确定它是否有效。对于本例,使用linspace在状态之间均匀地插入并检查这些状态是否有效使用isStateValid.自定义此函数以在状态之间进行采样或考虑其他分析方法,以确定车辆是否可以在给定状态之间移动。

函数[isValid, lastValid] = isMotionValid(obj, state1, state2) narginchk(3,3);state1 = nav.internal.validation.validateStateVector(state1,...obj.StateSpace.NumStateVariables,“isMotionValid”“state1”);state2 = nav.internal.validation.validateStateVector(state2,...obj.StateSpace.NumStateVariables,“isMotionValid”“state2”);如果(~ obj.isStateValid (state1))错误(“statevalidator: StartStateInvalid”"运动的起始状态无效");结束在状态之间的固定间隔内插,并检查状态有效性numInterpPoints = 100;interpStates = obj. statspace .interpolate(state1, state2, linspace(0,1,numInterpPoints));interpValid = obj.isStateValid(interpStates);查找无效状态。设置lastValid state为index-1。firstInvalidIdx = find(~interpValid, 1);如果isempty(firstInvalidIdx) isValid = true;lastValid = state2;其他的isValid = false;lastValid = interpStates(firstInvalidIdx-1,:);结束结束

终止方法和类部分。

结束结束

保存状态空间验证器类定义。现在可以使用类构造函数创建对象,以验证给定状态空间的状态。

扩展功能

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

版本历史

R2019b引入

Baidu
map