主要内容

导航。StateValidator类

包:导航

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

描述

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

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

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

类属性

摘要
真正的

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

创建

描述

例子

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

属性

全部展开

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

例子:stateSpaceSE2

属性:

GetAccess
公共
SetAccess
不可变的

方法

全部展开

例子

全部折叠

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

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

createPlanningTemplate (“StateValidator”

类和属性定义

模板的第一部分指定类定义和类的任何属性。源自导航。StateValidator类。您可以在这里指定任何附加的用户定义属性。

classdefMyCustomStateValidator <导航。StateValidator &...matlabshared.planning.internal.EnforceScalarHandle属性%用户定义的属性结束

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

类构造函数

使用构造函数设置状态空间验证器的名称并指定状态空间对象。如果没有提供状态空间,则设置状态空间的默认值。调用基类的构造函数。初始化任何其他用户定义的属性。

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

复制语义

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

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

检查状态的有效性

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

函数isValid = isStateValid(obj, state) narginchk(2,2);nav.internal.validation.validateStateMatrix(州、南obj.StateSpace.NumStateVariables...“isStateValid”“状态”);边界= obj.StateSpace.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.StateSpace.interpolate(stat1, stat2, linspace(0,1,numInterpPoints));interpValid = obj.isStateValid (interpStates);查找无效状态。设置lastValid state为index-1。firstinvalidx =查找(~interpValid, 1);如果isempty(firstInvalidIdx) isValid = true;lastValid = state2;其他的isValid = false;lastValid = interpStates (firstInvalidIdx-1:);结束结束

终止方法和类节。

结束结束

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

扩展功能

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

介绍了R2019b