检查状态之间的路径是否有效
这个示例展示了如何通过环境验证路径。
加载地图。使用简单的地图创建一个二元占用地图。
负载exampleMaps.mat地图= occupancyMap (simpleMap);显示(图)
指定一个粗略的路径通过地图。
Path = [2 2 /2;10 15 0;17日8 -π/ 2];持有在情节(路径(:1),路径(:,2),”——o”)
控件创建状态验证器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),”或“)结束结束持有从
这个示例展示了如何通过环境验证路径。
加载地图。使用简单的地图创建一个车辆成本地图。指定膨胀半径为1米。
负载exampleMaps.mat地图= vehicleCostmap(双(simpleMap));地图。CollisionChecker = inflationCollisionChecker (“InflationRadius”1);图(图)
指定一个粗略的路径通过地图。
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),”或“)结束结束持有从
创建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)%画出路径
验证器
- - - - - -状态验证器对象导航。StateValidator
的子类的对象导航。StateValidator
.这些是预定义的状态验证器对象:
state1
- - - - - -初始状态的位置初始状态位置,指定为n-元素行向量或米——- - - - - -n矩阵。n状态空间的维数在验证器
.米是要验证的状态数。
数据类型:单
|双
state2
- - - - - -最终状态的位置最终状态位置,指定为n-元素行向量或米——- - - - - -n矩阵。n状态空间的维数在验证器
.米是要验证的状态数。
数据类型:单
|双
你点击一个链接对应于这个MATLAB命令:
通过在MATLAB命令窗口中输入命令来运行命令。Web浏览器不支持MATLAB命令。金宝app
你也可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。