主要内容

plannerRRT

为几何规划创建一个RRT规划器

描述

plannerRRT对象创建一个快速探索随机树(RRT)规划器,用于解决几何规划问题。RRT是一个基于树的运动规划器,它从给定的状态空间中随机抽取样本,逐步构建搜索树。该树最终跨越搜索空间,并将开始状态连接到目标状态。树木生长的一般过程如下:

  1. 计划器对一个随机状态进行采样x兰德在状态空间中。

  2. 计划者找到一个状态x附近它已经在搜索树中,并且是最接近的(基于状态空间中的距离定义)x兰德

  3. 计划器从x附近x兰德,直到一个州x是达到了。

  4. 然后是新州x添加到搜索树中。

对于几何RRT,可以在不违反规划器对象的状态空间中指定的约束的情况下,解析地找到两个状态之间的展开和连接。

创建

描述

规划师= plannerRRT (stateSpacestateVal从状态空间对象创建一个RRT计划器,stateSpace和一个状态验证器对象,stateVal.的状态空间stateVal一定和stateSpacestateSpace而且stateVal也设置StateSpace而且StateValidator的属性规划师

例子

规划师= plannerRRT (___名称=值除前面语法中的输入参数外,还使用一个或多个名称-值参数设置属性。您可以指定MaxNumTreeNodesMaxIterationsMaxConnectionDistanceGoalReachedFcn,GoalBias属性作为名称-值参数。

属性

全部展开

计划器的状态空间,指定为状态空间对象。您可以使用状态空间对象,例如stateSpaceSE2stateSpaceDubinsstateSpaceReedsShepp,stateSpaceSE3.方法还可以自定义状态空间对象导航。StateSpace对象。

计划器的状态验证器,指定为状态验证器对象。您可以使用状态验证器对象,例如validatorOccupancyMapvalidatorVehicleCostmap,validatorOccupancyMap3D

搜索树中的最大节点数(不包括根节点),指定为正整数。

例子:MaxNumTreeNodes = 2500

数据类型:|

最大迭代次数,指定为正整数。

例子:MaxIterations = 2500

数据类型:|

树中允许的运动的最大长度,用标量指定。

例子:MaxConnectionDistance = 0.3

数据类型:|

回调函数评估目标是否达到,指定为函数句柄。你可以创建自己的目标实现函数。函数必须遵循以下语法:

函数isReached = myGoalReachedFcn(planner,currentState,goalState)

地点:

  • 规划师—已创建的规划器对象,指定为plannerRRT对象。

  • 现状后-当前状态,指定为三元素实向量。

  • goalState-目标状态,指定为三个元素的实向量。

  • isReached-一个布尔变量,指示当前状态是否已达到目标状态,返回为真正的

使用自定义GoalReachedFcn在代码生成工作流中,该属性必须在调用plan函数之前设置为自定义函数句柄,并且在初始化后不能更改。

数据类型:函数处理

在状态采样期间选择目标状态的概率,指定为范围[0,1]内的实标量。属性定义了在从状态空间中随机选择状态的过程中选择实际目标状态的概率。您可以先将概率设置为一个小值,例如0.05

例子:GoalBias = 0.1

数据类型:|

对象的功能

计划 规划两种状态之间的路径
复制 创建计划器对象的副本

例子

全部折叠

创建状态空间。

ss = stateSpaceSE2;

创建一个occupancyMap基于的状态验证器,使用所创建的状态空间。

sv = validatoroccuancymap (ss);

从示例地图创建一个占用地图,并将地图分辨率设置为10 cell /米。

负载exampleMapsmap = occuancymap (simpleMap,10);sv。地图=地图;

为验证器设置验证距离。

sv。ValidationDistance = 0.01;

更新状态空间边界使其与映射限制相同。

ss.StateBounds = [map.XWorldLimits;map.YWorldLimits;[-pi pi]];

创建路径规划器并增加最大连接距离。

planner = plannerrt (ss,sv,MaxConnectionDistance=0.3);

设置开始和目标状态。

Start = [0.5 0.5 0];目标= [2.5 0.2 0];

使用默认设置规划路径。

rng (100“旋风”);%表示可重复的结果[pthObj,solnInfo] = plan(计划,开始,目标);

想象结果。

显示(map)%树扩展情节(solnInfo.TreeData (: 1) solnInfo.TreeData (:, 2),“。”绘制路径情节(pthObj.States (: 1) pthObj.States (:, 2),的r -“线宽”, 2)

在工作区中加载一个城市街区的3-D占用地图。指定将单元格视为无障碍的阈值。

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

膨胀占用地图,以增加一个缓冲区的安全操作周围的障碍。

充气(omap, 1)

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

ss = stateSpaceSE3([0 220;0 220;0 100;inf inf;inf inf;

使用创建的状态空间创建一个3d占用地图状态验证器。将占用映射分配给状态验证器对象。指定采样距离间隔。

sv = validatoroccuancymap3d (ss,...Map = omap,...ValidationDistance = 0.1);

创建RRT路径规划器,增加最大连接距离,减少最大迭代次数。指定一个自定义目标函数,该函数确定如果到目标的欧氏距离低于1米的阈值,则路径达到目标。

planner = plannerrt (ss,sv)...MaxConnectionDistance = 50,...MaxIterations = 1000,...GoalReachedFcn = @(~,s,g)(norm(s(1:3)-g(1:3))<1),...GoalBias = 0.1);

指定起始姿势和目标姿势。

Start = [40 180 25 0.7 0.2 0 0.1];目标= [150 33 35 0.3 0 0.1 0.6];

配置随机数生成器以获得可重复的结果。

rng (1,“旋风”);

规划好路径。

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

将规划的路径形象化。

显示(omap)轴平等的视图([-10 55])保持%启动状态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)

参考文献

S.M.拉瓦尔和J.J.库夫纳。“随机运动动力学规划。”国际机器人研究杂志。2001年第5期,第20卷,第378 - 400页。

扩展功能

版本历史

在R2019b中引入

Baidu
map