主要内容

manipulatorRRT

使用双向RRT计划运动刚体树

自从R2020b

描述

manipulatorRRT对象是一个单查询规划师机械手臂迅速使用双向探索随机树(RRT)算法和一个可选的启发式连接到潜在的增加速度。

双向RRT规划师创建两棵树与根节点指定开始和目标配置。延长每棵树,规划师生成一个随机的配置,如果有效,从最近的节点基于一步MaxConnectionDistance财产。每个扩展后,计划尝试连接在两棵树之间用相反的新的扩展和最近的节点树。无效的配置或连接碰撞的环境中不添加到树中。

贪婪的搜索,使EnableConnectHeuristic属性禁用限制MaxConnectionDistance房地产当连接在两棵树之间。

图像显示扩展两个分支树的开始和结束的目标。当EnableConnectHeurist是真的,连接步骤并不限于最大连接距离。

设置EnableConnectHueristic财产限制了扩展距离在两棵树之间的连接的值MaxConnectionDistance财产。

图像显示扩展两个分支树的开始和结束的目标。EnableConnectHeurist是假的时,连接步骤的限制最大连接距离。

对象的使用rigidBodyTree机器人模型生成的随机配置和节点之间的中间状态。碰撞对象中指定的机器人模型验证与环境配置和检查碰撞或机器人本身。

计划一个开始和一个目标配置之间的路径,使用计划对象的功能。计划之后,可以沿着路径使用插入状态插入对象的功能。尝试缩短路径通过削减边缘,使用缩短对象的功能。

指定一个地区样品末端执行器构成目标附近的配置,创建一个workspaceGoalRegion对象和指定的goalRegion的输入计划对象的功能。改变的概率抽样额外目标配置,指定WorkspaceGoalRegionBias财产。

关于计算复杂度的更多信息,请参阅规划的复杂性

创建

描述

例子

rrt = manipulatorRRT (robotRBT{})创建一个双向RRT规划师为指定的rigidBodyTree机器人模型。空单元数组表示不存在障碍环境中。

rrt = manipulatorRRT (robotRBT,collisionObjects)创建一个计划对于机器人模型与碰撞对象放置在环境。这些对象的规划师检查碰撞。

例子

rrt = manipulatorRRT (___地图=地图)指定了一个3 d入住率地图地图代表环境。这需要导航工具箱™。

输入参数

全部展开

3 d入住率地图代表环境,指定为一个occupancyMap3D(导航工具箱)对象。请注意,manipulatorRRT对象不深复制指定的地图,而是拥有处理指定的地图。

这个输入参数指定需要导航的工具箱。

属性

全部展开

最大长度之间的配置计划,指定为一个积极的标量。运动对象计算的长度之间的欧几里得距离两个联合配置。在扩展过程中,这是一个配置可以改变的最大距离。

当转动关节有无限的限制,两个关节位置计算之间的区别angdiff函数。

如果EnableConnectheuristic属性设置为真正的,对象时忽略了这个距离连接两棵树在连接阶段。

数据类型:

距离分辨率为验证运动之间的配置,指定为一个积极的标量。验证距离决定的两个相邻节点之间的插值节点数树。对象验证每个插值节点通过检查与机器人碰撞和环境。

数据类型:

最大数量的随机生成配置,指定为一个正整数。

数据类型:

直接加入树在连接阶段的计划,指定为一个逻辑1(真正的)或0()。将这个属性设置为真正的导致忽视的对象MaxConnectionDistance房地产当试图连接两棵树在一起。

数据类型:逻辑

概率样本的目标状态空间目标区域,指定为正数的范围(0,1)。偏差的概率定义添加额外的目标状态的树workspaceGoalRegion对象。当这个值设置为0,workspaceGoalRegion对象还是样品单一目标计划的策划人。

增加这个值会增加达到一个目标状态的可能性在目标地区,但可能会导致更长的规划时间,因为每个新目标状态为计划添加了额外的复杂性。

依赖

你必须使用goalRegion输入时调用计划对象的功能。

数据类型:

忽视自我碰撞期间计划,指定为一个逻辑。如果将此属性设置为真正的,计划函数跳过检查身体之间碰撞,只有把身体环境。不检查self-collisions,你可能改善计划阶段的速度。

数据类型:逻辑

身体对跳过检查self-collisions,指定为“父”“附近”:

  • “父”——孩子和家长之间跳过碰撞检查身体。

  • “附近”-跳过碰撞检查身体之间相邻的指数。

看到改变自碰撞检测的行为为更多的信息。

数据类型:字符|字符串

对象的功能

计划 计划使用RRT路径操纵者
插入 插入州从RRT路径
缩短 修剪边缘缩短从RRT路径

例子

全部折叠

使用manipulatorRRT对象为刚体计划路径树机器人模型的环境障碍。可视化与插值计划路径。

一个机器人模型加载到工作区。使用库卡LBR iiwa©机械臂。

机器人= loadrobot (“kukaIiwa14”,“DataFormat”,“行”);

生成机器人的环境。创建碰撞对象相对于机器人基地,并指定他们的姿势。可视化环境。

env = {collisionBox collisionSphere (0.5, 0.5, 0.05) (0.3)};env {1}。构成(3)= -0.05;env {2}。构成(1:3)= (0.1 0.2 0.8);显示(机器人);持有显示(env {1}) (env {2})

图包含一个坐标轴对象。坐标轴对象包含X, Y ylabel包含31个对象类型的补丁,线。这些对象代表世界,iiwa_link_0、iiwa_link_1 iiwa_link_2, iiwa_link_3, iiwa_link_4, iiwa_link_5, iiwa_link_6, iiwa_link_7, iiwa_link_ee, iiwa_link_ee_kuka, iiwa_link_0_mesh, iiwa_link_1_mesh, iiwa_link_2_mesh, iiwa_link_3_mesh, iiwa_link_4_mesh, iiwa_link_5_mesh, iiwa_link_6_mesh iiwa_link_7_mesh。

创建的RRT规划师机器人模型。

rrt = manipulatorRRT(机器人,env);rrt。SkippedSelfCollisions =“父”;

指定一个开始和一个目标配置。

startConfig = (0.08 -0.65 0.05 0.02 - 0.04 0.49 - 0.04);goalConfig = (2.97 -1.05 0.05 0.02 - 0.04 0.49 - 0.04);

计划的路径。由于RRT算法的随机性,设置rng种子可重复性。

rng路径(0)=计划(rrt、startConfig goalConfig);

可视化的路径。添加更多的中间状态,插入路径。默认情况下,插入目标函数使用的价值ValidationDistance属性来确定数量的中间状态。的循环显示插值路径的每个20元素。

interpPath =插入(rrt路径);clf我= 1:20:尺寸(interpPath, 1)显示(机器人,interpPath(我,:));持有结束显示(env {1}) (env {2})

图包含一个坐标轴对象。坐标轴对象包含X, Y ylabel包含437个补丁,类型的对象。这些对象代表世界,iiwa_link_0、iiwa_link_1 iiwa_link_2, iiwa_link_3, iiwa_link_4, iiwa_link_5, iiwa_link_6, iiwa_link_7, iiwa_link_ee, iiwa_link_ee_kuka, iiwa_link_0_mesh, iiwa_link_1_mesh, iiwa_link_2_mesh, iiwa_link_3_mesh, iiwa_link_4_mesh, iiwa_link_5_mesh, iiwa_link_6_mesh iiwa_link_7_mesh。

您的工作区中指定一个目标区域,并计划在这些范围内的道路。的workspaceGoalRegion对象定义的界限xyz-安置和zyx股票欧拉定位机器人的终端执行器。的manipulatorRRT对象计划基于目标区域的路径和随机样本范围内。

加载一个现有的机器人模型rigidBodyTree对象。

机器人= loadrobot (“kinovaGen3”,“DataFormat”,“行”);ax =显示(机器人);

图包含一个坐标轴对象。坐标轴对象包含X, Y ylabel包含25块类型的对象。这些对象代表base_link, Shoulder_Link、HalfArm1_Link HalfArm2_Link, ForeArm_Link, Wrist1_Link, Wrist2_Link, Bracelet_Link, EndEffector_Link, Shoulder_Link_mesh, HalfArm1_Link_mesh, HalfArm2_Link_mesh, ForeArm_Link_mesh, Wrist1_Link_mesh, Wrist2_Link_mesh, Bracelet_Link_mesh base_link_mesh。

创建路径规划

创建一个快速扩展随机树(RRT)的机器人路径规划。这个例子使用一个空的环境,但这工作流也适用于凌乱的环境。您可以添加碰撞对象等环境collisionBoxcollisionMesh对象。

规划师= manipulatorRRT(机器人,{});planner.SkippedSelfCollisions =“父”;

定义目标区域

创建一个工作空间目标地区使用机器人的末端执行器机构的名字。

为你的工作空间定义目标区域的参数。目标区域包括一个参考姿势,xyz-安置范围和方向限制zyx股票欧拉角。本例中指定的界限xy飞机在米,允许旋转的z设在弧度。

goalRegion = workspaceGoalRegion (robot.BodyNames{结束});goalRegion。ReferencePose = trvec2tform (0.5 [0.5—0.2]);goalRegion。范围(1:)= (-0.2 - 0.2);% X范围goalRegion。范围(2:)= (-0.2 - 0.2);% Y范围goalRegion。范围(4:)=(-π/ 2π/ 2);%绕z轴旋转

你也可以申请一个固定抵消所有采样区域内。这个偏移量占把握工具或维度的变化在你的工作区。对于这个示例,使用一个固定的转换,工作区上方的终端执行器5厘米的地方。

goalRegion。EndEffectorOffsetPose = trvec2tform ([0 0 0.05]);持有显示(goalRegion);

图包含一个坐标轴对象。坐标轴对象包含X, Y ylabel包含35行,类型的对象。这些对象代表base_link, Shoulder_Link、HalfArm1_Link HalfArm2_Link, ForeArm_Link, Wrist1_Link, Wrist2_Link, Bracelet_Link, EndEffector_Link, Shoulder_Link_mesh, HalfArm1_Link_mesh, HalfArm2_Link_mesh, ForeArm_Link_mesh, Wrist1_Link_mesh, Wrist2_Link_mesh, Bracelet_Link_mesh base_link_mesh。

计划路径目标区域

计划一个路径的目标区域从机器人的主配置。由于RRT算法的随机性,本例中设置rng种子,以确保可重复的结果。

rng路径(0)=计划(规划师,homeConfiguration(机器人),goalRegion);

显示执行路径的机器人。想象一个更现实的路径,路径之间插入点配置。

interpConfigurations =插入(规划师路径5);i = 1:尺寸(interpConfigurations)显示(机器人,interpConfigurations(我,:)“PreservePlot”、假);集(ax,“ZLim”(-0.05 - 0.75),“YLim”(-0.05 - 1),“XLim”(-0.05 - 1),“CameraViewAngle”5)drawnow结束持有

图包含一个坐标轴对象。坐标轴对象包含X, Y ylabel包含35行,类型的对象。这些对象代表base_link, Shoulder_Link、HalfArm1_Link HalfArm2_Link, ForeArm_Link, Wrist1_Link, Wrist2_Link, Bracelet_Link, EndEffector_Link, Shoulder_Link_mesh, HalfArm1_Link_mesh, HalfArm2_Link_mesh, ForeArm_Link_mesh, Wrist1_Link_mesh, Wrist2_Link_mesh, Bracelet_Link_mesh base_link_mesh。

调整末端执行器构成

注意到机器人手臂的方法从底部工作区。翻转的方向最终位置,添加一个π旋转的轴参考姿势。

goalRegion。EndEffectorOffsetPose =goalRegion。EndEffectorOffsetPose * eul2tform([0π0],“ZYX股票”);

再次重新计划和想象机器人运动路径。现在的机器人的方法从顶部。

持有显示(goalRegion);路径=计划(规划师,homeConfiguration(机器人),goalRegion);interpConfigurations =插入(规划师路径5);i = 1:尺寸(interpConfigurations)显示(机器人,interpConfigurations(我,:)“PreservePlot”、假);集(ax,“ZLim”(-0.05 - 0.75),“YLim”(-0.05 - 1),“XLim”,(-0.05 - 1))drawnow;结束持有

图包含一个坐标轴对象。坐标轴对象包含X, Y ylabel包含45行类型的对象,补丁。这些对象代表base_link, Shoulder_Link、HalfArm1_Link HalfArm2_Link, ForeArm_Link, Wrist1_Link, Wrist2_Link, Bracelet_Link, EndEffector_Link, Shoulder_Link_mesh, HalfArm1_Link_mesh, HalfArm2_Link_mesh, ForeArm_Link_mesh, Wrist1_Link_mesh, Wrist2_Link_mesh, Bracelet_Link_mesh base_link_mesh。

加载Kinova第三代机器人。

rbt = loadrobot (“kinovagen3”DataFormat =“行”);

创建一个3 d入住率地图,设置坐标(0.4 0.0 0.4)占领。

地图= occupancyMap3D (10);map.setOccupancy (0.4 [0.0—0.4], 1);

在地图上显示机器人。

显示(地图);持有显示(rbt);轴(“平等”)xlim ([1.0]) ylim ([1.0]) zlim ([-0.5, 1.2])

定义一个启动配置。

startconfig = (2.2131, -1.3950, 0.1618, 0.2053, -0.1624, 1.1684, -2.1886);

定义一个目标配置是一样的开始配置除了第一个关节。

goalconfig = startconfig;goalconfig (1) = 3.4;

创建的机器人和机械手RRT规划指定地图的环境使用地图论点。

规划师= manipulatorRRT (rbt,{},地图=地图);planner.ValidationDistance = 0.1;planner.MaxConnectionDistance = 0.2;planner.SkippedSelfCollisions =“父”;

计划开始和目标之间的路径配置。然后插入之间的路径。

plannedpath =计划(计划、startconfig goalconfig);interpoalatedpath =插入(规划师,plannedpath);

动画后的机器人路径。

rc = rateControl (10);视图((π/ 3π/ 2π/ 4]);i = 1:尺寸(interpoalatedpath, 1)显示(rbt, interpoalatedpath(我,:),FastUpdate = true, PreservePlot = false);等待(rc);结束

图包含一个坐标轴对象。坐标轴对象与标题入住率地图,包含X [m], ylabel Y [m]包含26个对象类型的补丁,线。

提示

规划的复杂性

  • 当规划树中的节点之间的运动,一组配置生成和验证。这个计算的时间计划配置生成的数量成正比。节点之间的数量配置的比例控制MaxConnectionDistanceValidationDistance属性。改善计划,考虑增加或减少验证距离最大连接距离。

  • 验证每个配置的复杂度O (mn + m2),是碰撞体的数量吗rigidBodyTree对象和n碰撞对象的数量在吗worldObjects。使用大量的网格来表示你的机器人或环境中增加了验证的时间每个配置。

无限的联合限制

  • 如果你的rigidBodyTree机器人模型有共同的局限性,有无限的范围(如转动关节的极限(负无穷到正无穷)),manipulatorRRT对象使用的局限性(1)e10 1 e10)执行统一的随机抽样的联合限制。

引用

[1]Kuffner, J·J。,和S. M. LaValle. “RRT-Connect: An Efficient Approach to Single-Query Path Planning.” In诉讼。举行2000年“国际机器人与自动化会议”年会议。IEEE机器人与自动化国际会议上。专题讨论会论文集(猫。No.00CH37065),2:995 - 1001。美国旧金山,CA: IEEE 2000。https://doi: 10.1109 / ROBOT.2000.844730。

扩展功能

C / c++代码生成
生成C和c++代码使用MATLAB®编码器™。

版本历史

介绍了R2020b

全部展开