isMotionValid
检查状态之间的路径是否有效
描述
例子
通过占用地图环境验证路径
这个例子展示了如何在一个环境中验证路径。
加载示例映射。使用简单映射来创建一个二进制占用映射。
负载exampleMaps.matmap = occuancymap (simpleMap);显示(图)
指定通过映射的粗路径。
路径= [2 2 pi/2;10 15 0;17 8 -pi/2];持有在情节(路径(:1),路径(:,2),”——o”)
属性创建状态验证器stateSpaceSE2
定义。指定插值和验证路径段的映射和距离。
validator = validatorOccupancyMap(stateSpaceSE2);验证器。地图=地图;验证器。ValidationDistance = 0.1;
检查路径上的点是否处于有效状态。这三个点都在自由空间中,因此被认为是有效的。
isValid = isStateValid(验证器,路径)
isValid =3x1逻辑阵列1 1 1
检查每个连续路径状态之间的运动。的isMotionValid
函数沿着状态之间的路径进行插值。如果路径段无效,则绘制沿路径的最后一个有效点。
startStates = [path(1,:);path(2,:)];endStates = [path(2,:);path(3,:)];为i = 1:2 [isPathValid, lastValid] = isMotionValid(validator,startStates(i,:),endStates(i,:));如果~ isPathValid情节(lastValid (1) lastValid (2),”或“)结束结束持有从
验证通过车辆成本图环境的路径
这个例子展示了如何在一个环境中验证路径。
加载示例映射。使用简单地图创建车辆成本地图。指定膨胀半径为1米。
负载exampleMaps.matmap = vehicleCostmap(double(simpleMap));地图。CollisionChecker =通胀CollisionChecker(“InflationRadius”1);图(图)
指定通过映射的粗路径。
路径= [3 3 pi/2;8 15 0;17 8 -pi/2];持有在情节(路径(:1),路径(:,2),”——o”)
属性创建状态验证器stateSpaceSE2
定义。指定插值和验证路径段的映射和距离。
validator = validatorVehicleCostmap(stateSpaceSE2);验证器。地图=地图;验证器。ValidationDistance = 0.1;
检查路径上的点是否处于有效状态。这三个点都在自由空间中,因此被认为是有效的。
isValid = isStateValid(验证器,路径)
isValid =3x1逻辑阵列1 1 1
检查每个连续路径状态之间的运动。的isMotionValid
函数沿着状态之间的路径进行插值。如果路径段无效,则绘制沿路径的最后一个有效点。
startStates = [path(1,:);path(2,:)];endStates = [path(2,:);path(3,:)];为i = 1:2 [isPathValid, lastValid] = isMotionValid(validator,startStates(i,:),endStates(i,:));如果~ isPathValid情节(lastValid (1) lastValid (2),”或“)结束结束持有从
通过3-D占用地图环境验证路径
创建一个3-D占用图和相关的状态验证器。规划、验证和可视化占用地图中的路径。
加载并分配映射到状态验证器
将一个城市街区的三维占用地图加载到工作区中。指定一个阈值,认为其中的单元格是无障碍的。
mapData = load(“dMapCityBlock.mat”);omap = mapData.omap;的核心。FreeThreshold = 0.5;
扩大占用地图,为障碍物周围的安全操作增加缓冲区。
充气(omap, 1)
创建带有状态变量边界的SE(3)状态空间对象。
ss = stateSpaceSE3([-20 220;-20 220;-10 100;正正;正正;正正;正正]);
使用创建的状态空间创建一个3-D占用映射状态验证器。
sv = validatoroccuancymap3d (ss);
将占用映射分配给状态验证器对象。指定采样距离间隔。
sv。Map = omap;sv。ValidationDistance = 0.1;
规划和可视化路径
创建一个增加最大连接距离的路径规划器。减少最大迭代次数。
planner = plannerRRT(ss,sv);计划。MaxConnectionDistance = 50;计划。MaxIterations = 1000;
创建一个用户自定义的评估函数,用于判断路径是否达到目标。指定抽样过程中选择目标状态的概率。
计划。GoalReachedFcn = @ ~, x, y)(规范(x - y (1:3)) (1:3) < 5);计划。GoalBias = 0.1;
设置开始和目标状态。
Start = [40 180 25 0.7 0.2 0 0.1];目标= [150 33 35 0.3 0 0.1 0.6];
使用指定的起点、目标和计划器规划路径。
[pthObj,solnInfo] = plan(计划,开始,目标);
检查路径上的点是否为有效状态。
isValid = isStateValid(sv,pthObj.States)
isValid =7x1逻辑阵列1 1 1 1 1 1 1 1 1
检查每个顺序路径状态之间的移动是否有效。
isPathValid = 0 (size(pthObj.States,1)-1,1,“逻辑”);为i = 1:size(pthObj.States,1)-1 [isPathValid(i),~] = isMotionValid(sv,pthObj.States(i,:),...: pthObj.States (i + 1));结束isPathValid
isPathValid =6x1逻辑阵列1 1 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)%绘制路径
输入参数
验证器
- - - - - -状态验证器对象
的子类的对象导航。StateValidator
的子类的对象指定的状态验证器对象导航。StateValidator
.这些是预定义的状态验证器对象:
state1
- - - - - -初态位置
n-元行向量|米——- - - - - -n矩阵
初始状态位置,指定为n-元素行向量或米——- - - - - -n矩阵。n状态空间的维数是验证器
.米是要验证的状态数。
数据类型:单
|双
state2
- - - - - -最终状态位置
n-元行向量|米——- - - - - -n矩阵
最终状态位置,指定为n-元素行向量或米——- - - - - -n矩阵。n状态空间的维数是验证器
.米是要验证的状态数。
数据类型:单
|双
输出参数
版本历史
R2019b引入
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入该命令来运行该命令。Web浏览器不支持MATLAB命令。
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。