主要内容

isStateValid

检查状态是否有效

自从R2019b

描述

例子

isValid= isStateValid (验证器,)检查一组给定的状态是有效的。

例子

全部折叠

这个例子展示了如何通过一个环境验证路径。

加载地图。使用简单的地图创建一个二进制入住率地图。

负载exampleMaps.mat地图= occupancyMap (simpleMap);显示(图)

图包含一个坐标轴对象。坐标轴对象与标题占用网格,包含X [m], ylabel Y(米)包含一个类型的对象的形象。

指定一个粗糙的地图路径。

路径=[2 2π/ 2;10 15 0;17日8 -π/ 2];持有情节(路径(:1),路径(:,2),”——o”)

图包含一个坐标轴对象。坐标轴对象与标题占用网格,包含X [m], ylabel Y [m]包含2类型的对象形象,线。

创建一个验证器使用状态stateSpaceSE2定义。指定映射和插值和验证路径段的距离。

验证器= validatorOccupancyMap (stateSpaceSE2);验证器。地图=地图;验证器。ValidationDistance = 0.1;

检查路径的点是有效的。三个点都在自由的空间,所以被认为是有效的。

isValid = isStateValid(验证器,路径)
isValid =3 x1逻辑阵列1 1 1

检查每个连续的路径之间的运动状态。的isMotionValid函数沿着路径状态之间的篡改。如果一个路径段是无效的,情节最后有效点沿着路径。

startStates =[路径(1:);路径(2:)];endStates =[路径(2:);路径(3:)];我= 1:2 (isPathValid lastValid] = isMotionValid(验证器,startStates(我,:),endStates(我,:));如果~ isPathValid情节(lastValid (1) lastValid (2),”或“)结束结束持有

图包含一个坐标轴对象。坐标轴对象与标题占用网格,包含X [m], ylabel Y [m]包含3类型的对象形象,线。一个或多个行显示的值只使用标记

这个例子展示了如何通过一个环境验证路径。

加载地图。使用简单的地图创建车辆成本地图。指定一个通胀raidus 1米。

负载exampleMaps.mat地图= vehicleCostmap(双(simpleMap));地图。CollisionChecker = inflationCollisionChecker (“InflationRadius”1);图(图)

图包含一个坐标轴对象。坐标轴对象包含X, Y ylabel包含2对象类型的形象,补丁。该对象代表的地区。

指定一个粗糙的地图路径。

路径=[3 3π/ 2;8 15 0;17日8 -π/ 2];持有情节(路径(:1),路径(:,2),”——o”)

图包含一个坐标轴对象。坐标轴对象包含X, Y ylabel包含3类型的对象形象,补丁,线。该对象代表的地区。

创建一个验证器使用状态stateSpaceSE2定义。指定映射和插值和验证路径段的距离。

验证器= validatorVehicleCostmap (stateSpaceSE2);验证器。地图=地图;验证器。ValidationDistance = 0.1;

检查路径的点是有效的。三个点都在自由的空间,所以被认为是有效的。

isValid = isStateValid(验证器,路径)
isValid =3 x1逻辑阵列1 1 1

检查每个连续的路径之间的运动状态。的isMotionValid函数沿着路径状态之间的篡改。如果一个路径段是无效的,情节最后有效点沿着路径。

startStates =[路径(1:);路径(2:)];endStates =[路径(2:);路径(3:)];我= 1:2 (isPathValid lastValid] = isMotionValid(验证器,startStates(我,:),endStates(我,:));如果~ isPathValid情节(lastValid (1) lastValid (2),”或“)结束结束持有

图包含一个坐标轴对象。坐标轴对象包含X, Y ylabel包含4对象类型的形象,补丁,线。一个或多个行显示的值只使用标记这个对象代表的地区。

创建一个3 d入住率地图和相关的验证器。计划、验证和可视化通过占用道路地图。

加载和分配映射到状态验证器

一块3 d占用城市地图加载到工作区。指定一个阈值的细胞考虑无障碍。

mapData =负载(“dMapCityBlock.mat”);omap = mapData.omap;的核心。FreeThreshold = 0.5;

膨胀的入住率地图添加一个缓冲地带安全运行的障碍。

充气(omap, 1)

创建一个SE(3)状态空间对象状态变量的范围。

党卫军= stateSpaceSE3 ([-20 220;-20 220;-10 100;正正;正正;正正;正正]);

创建一个3 d入住率映射状态验证器使用创建的状态空间。

sv = validatorOccupancyMap3D (ss);

分配入住率validator对象映射到状态。指定采样间隔的距离。

sv。地图= omap;sv。ValidationDistance = 0.1;

计划和可视化道路

创建一个路径规划与最大连接距离增加。减少迭代的最大数量。

规划师= plannerRRT (ss、sv);计划。MaxConnectionDistance = 50;计划。MaxIterations = 1000;

创建一个用户定义的评估函数来确定是否达到目标的路径。指定在抽样选择目标状态的概率。

计划。GoalReachedFcn = @ ~, x, y)(规范(x - y (1:3)) (1:3) < 5);计划。GoalBias = 0.1;

设定开始和目标状态。

开始= 25 [40 180 0.7 0.2 0.1 0];目标= (150 33 35 0.3 0 0.1 - 0.6);

使用指定的开始规划一条路径,目标,计划。

[pthObj, solnInfo] =计划(计划,开始,目标);

检查的路径是有效的。

pthObj.States isValid = isStateValid (sv)
isValid =7 x1逻辑阵列1 1 1 1 1 1 1

检查每个连续的路径之间的运动状态是有效的。

isPathValid = 0(大小(pthObj.States 1) 1, 1,“逻辑”);i = 1:尺寸(pthObj.States, 1) 1 (isPathValid(我)~]= isMotionValid (sv, pthObj.States(我,:):pthObj.States (i + 1));结束isPathValid
isPathValid =6 x1逻辑阵列1 1 1 1 1 1

可视化结果。

显示(omap)scatter3(开始(1,1),开始(1、2),开始(1、3)‘g’,“填充”)%画开始状态scatter3(目标(1,1)、目标(1、2)、目标(1、3)“r”,“填充”)%画目标状态plot3 (pthObj.States (: 1) pthObj.States (:, 2), pthObj.States (:, 3),的r -,“线宽”,2)%画出路径

图包含一个坐标轴对象。坐标轴对象与标题入住率地图,包含X [m], ylabel Y(米)包含4对象类型的补丁,散点、线。

输入参数

全部折叠

状态验证器对象,指定为对象的子类nav.StateValidator。这些预定义的状态验证器对象:

国家的立场,作为一个指定n有效行向量或——- - - - - -n矩阵。n状态空间中指定的尺寸吗验证器是验证的状态数。

数据类型:|

输出参数

全部折叠

有效的国家,作为一个返回元逻辑列向量。

数据类型:逻辑

版本历史

介绍了R2019b