主要内容

isMotionValid

检查状态之间的路径是否有效

描述

例子

isValidlastValid) = isMotionValid (验证器state1state2检查两个状态之间的路径是否有效的插值之间的状态。该函数还返回路径上的最后一个有效状态。

例子

全部折叠

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

加载地图。使用简单的地图创建一个二元占用地图。

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

图中包含一个轴对象。标题为“占用网格”的axis对象包含一个类型为image的对象。

指定一个粗略的路径通过地图。

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

图中包含一个轴对象。标题为“占用网格”的轴对象包含两个类型为image, line的对象。

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

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

检查路径上的点是否处于有效状态。所有三个点都在自由空间中,因此被认为是有效的。

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

检查每个顺序路径状态之间的运动。的isMotionValid函数沿着状态之间的路径进行插值。如果一个路径段是无效的,沿着该路径绘制最后一个有效点。

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

图中包含一个轴对象。标题为“占用网格”的轴对象包含3个类型为image、line的对象。

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

加载地图。使用简单的地图创建一个车辆成本地图。指定膨胀半径为1米。

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

图中包含一个轴对象。axis对象包含两个类型为image, patch的对象。这个对象表示膨胀的区域。

指定一个粗略的路径通过地图。

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

图中包含一个轴对象。坐标轴对象包含图像、补丁、线三个对象。这个对象表示膨胀的区域。

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

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

检查路径上的点是否处于有效状态。所有三个点都在自由空间中,因此被认为是有效的。

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

检查每个顺序路径状态之间的运动。的isMotionValid函数沿着状态之间的路径进行插值。如果一个路径段是无效的,沿着该路径绘制最后一个有效点。

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

图中包含一个轴对象。轴对象包含图像、补丁、线4个对象。这个对象表示膨胀的区域。

创建3-D占用地图和相关的状态验证器。计划,验证,并可视化通过占用地图的路径。

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

将一个城市街区的三维占用地图加载到工作区中。指定一个阈值,使单元格被认为是无障碍的。

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

将占用地图充气,在障碍物周围增加一个安全操作的缓冲区。

充气(omap, 1)

创建一个带有状态变量边界的SE(3)状态空间对象。

ss = stateSpaceSE3([-20 220;-20 220;-10 100;正正;正正;正正;正正]);

使用创建的状态空间创建一个3-D占用地图状态验证器。

sv = validatorOccupancyMap3D (ss);

将占用映射分配给状态验证器对象。指定采样距离间隔。

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;

设定开始和目标状态。

起始= [40 180 25 0.7 0.2 0 0.1];目标= [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

检查每个顺序路径状态之间的运动是否有效。

isPathValid = 0(大小(pthObj.States 1) 1, 1,“逻辑”);i = 1:size(pthob . states,1)-1 [isPathValid(i),~] = isMotionValid(sv, pthob . states (i,:),),...: pthObj.States (i + 1));结束isPathValid
isPathValid =6 x1逻辑阵列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)%画出路径

图中包含一个轴对象。标题为“占用地图”的轴对象包含4个类型为patch, scatter, line的对象。

输入参数

全部折叠

的子类的对象导航。StateValidator.这些是预定义的状态验证器对象:

初始状态位置,指定为n-元素行向量或——- - - - - -n矩阵。n状态空间的维数在验证器是要验证的状态数。

数据类型:|

最终状态位置,指定为n-元素行向量或——- - - - - -n矩阵。n状态空间的维数在验证器是要验证的状态数。

数据类型:|

输出参数

全部折叠

有效状态,返回为元素逻辑列向量。

数据类型:逻辑

每个路径上的最终有效状态,返回为n-元素行向量或——- - - - - -n矩阵。n状态空间的维数是否在状态空间属性中指定验证器是已验证的路径数。每一行都包含沿着关联路径的最终有效状态。

数据类型:|

介绍了R2019b