主要内容

Manipulatorrt.

使用双向RRT计划刚体树的动作

描述

Manipulatorrt.对象是一个用于操纵臂的单个查询规划仪,它使用双向迅速探索随机树(RRT)算法具有可选的启发式,以潜在地提高速度。

Bidirectional RRT Planner在指定的开始和目标配置中创建具有根节点的两棵树。要扩展每棵树,策划器会生成随机配置,如果有效,则基于的最近节点迈出步骤maxconnectiondistance.财产。在每个扩展之后,计划者尝试使用新的扩展和相对树上的最近节点在两棵树之间连接。与环境碰撞的无效配置或连接不会添加到树中。

对于贪婪的搜索,使能EnableConnectheuristic.属性禁用限制maxconnectiondistance.两棵树之间连接时的财产。

从开始和最终目标显示两个分支树的延伸的图像。当EnableConnectHeurist为True时,连接步骤不受最大连接距离的限制。

设置EnableConnecthueristic.财产错误的在两个树之间连接到值的值时限制延伸距离maxconnectiondistance.财产。

从开始和最终目标显示两个分支树的延伸的图像。当EnableConnectHeurist是FALSE时,连接步骤受最大连接距离的限制。

该对象使用一个刚性小组细胞机器人模型生成节点之间的随机配置和中间状态。碰撞对象在机器人模型中指定,以验证配置并检查与环境或机器人本身的冲突。

要在开始和目标配置之间进行规划路径,请使用计划对象功能。规划后,您可以使用该路径插入状态对象功能。要尝试通过修剪边缘缩短路径,请使用缩短对象功能。

要指定要在目标配置附近的采样末端执行器的区域,请创建一个WorkspaceGoAlRegion.对象并将其指定为守门员输入到计划对象功能。要更改采样额外目标配置的概率,请指定WorkspaceGoAlRegionBias.财产。

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

创建

描述

例子

rrt = manipulatorrt(Robotrbt.,{})为指定创建一个双向RRT规划仪刚性小组细胞机器人模型。空单元格数组表示环境中没有障碍。

rrt = manipulatorrt(Robotrbt.CollisionObjects.为具有碰撞对象放置在环境中的机器人模型创建一个策划员。策划者检查与这些对象的冲突。

特性

展开全部

计划配置之间的最大长度,指定为正标量。该物体将运动的长度计算为两个关节配置之间的欧几里德距离。使用该旋转关节两个接合位置之间的差异计算angdiff功能。在扩展过程中,这是配置可以改变的最大距离。

如果是EnableConnectheuristic.属性设置为真的当在连接阶段连接两棵树时,该物体忽略此距离。

数据类型:双倍的

用于验证配置之间的运动的距离分辨率,指定为正标量。验证距离确定树中两个相邻节点之间的内插节点的数量。该对象通过检查与机器人和环境的冲突来验证每个内插节点。

数据类型:双倍的

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

数据类型:双倍的

在规定的计划员的连接阶段,直接连接树,指定为逻辑1真的) 或者0.错误的)。将此属性设置为真的导致对象忽略maxconnectiondistance.尝试将两棵树连接在一起时的财产。

数据类型:逻辑

从工作区目标区域采样目标状态的概率,指定为范围的正值[0,1)。偏差定义了从树中添加额外目标状态的概率WorkspaceGoAlRegion.目的。当此值设置为零时,WorkspaceGoAlRegion.对象仍然对计划者设定一个目标来计划。

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

依赖性

你必须使用守门员打电话时输入计划对象功能。

数据类型:双倍的

对象功能

计划 使用RRT进行操纵器的计划路径
沿RRT的路径插入状态
缩短 修剪边缘以缩短来自RRT的路径

例子

全部收缩

使用Manipulatorrt.对象规划一个僵硬车身树机器人模型的路径,在环境中具有障碍物。用内插状态可视化计划的路径。

将机器人模型加载到工作区中。使用Kuka LBR IIWA©Manipulator Arm。

robot = loadrobot(“kukaiiwa14”“dataformat”“排”);

为机器人生成环境。创建碰撞对象并指定相对于机器人基础的构成。可视化环境。

Env = {CollisionBox(0.5,0.5,0.05)CollisionSphere(0.3)};Env {1} .Poses(3,结束)= -0.05;Env {2} .Poses(1:3,端)= [0.1 0.2 0.8];展示(机器人);抓住show(env {1})显示(env {2})

为机器人模型创建RRT规划仪。

rrt = manipulatorrt(机器人,env);

指定开始和目标配置。

Startconfig = [0.08 -0.65 0.05 0.02 0.04 0.49 0.04];守门符= [2.97 -1.05 0.05 0.02 0.04 0.49 0.04];

规划道路。由于RRT算法的随机性,请设置RNG.种子可重复性。

RNG(0)PATH = PLAN(RRT,StartConfig,GoalConfig);

可视化路径。要添加更多中间状态,内插路径。默认情况下,对象函数使用值验证数据确定中间状态数量的财产。这为了循环显示插值路径的每20个元素。

InterpPath =内插(RRT,PATH);CLF.为了i = 1:20:大小(Interppath,1)显示(机器人,Interppath(i,:));抓住结尾显示(env {1})显示(env {2})持有离开

在工作区中指定目标区域,并在这些界限内计划路径。这WorkspaceGoAlRegion.对象定义了机器人末端执行器的XYZ位置和Zyx欧拉方向上的界限。这Manipulatorrt.对象计划基于该目标区域的路径,并在界限内采样随机姿势。

加载现有的机器人模型作为一个刚性小组细胞目的。

robot = loadrobot(“kinovagen3”“dataformat”“排”);斧头= show(机器人);

图包含轴。轴包含25个类型的贴片物体,线。这些对象代表base_link,hompent_link,falmararm1_link,forearm_link,wrist1_link,wrist2_link,bracket_link,endeffectr_link,hompent_link_mesh,fallarm2_link_mesh,forearm_link_mesh,wrist1_link_mesh,wrist2_link_mesh,bracelet_link_mesh,base_link_mesh。

创建路径规划师

为机器人创建一个快速探索的随机树(RRT)路径规划仪。此示例使用空的环境,但此工作流程也适用于杂乱的环境。您可以将碰撞对象添加到环境中的环境中collisionbox.或者CollisionMesh.目的。

Planner = Manipulatorrt(机器人,{});

定义目标区域

使用机器人的最终效应器正文名称创建工作区目标区域。

为工作区定义目标区域参数。目标区域包括参考姿势,XYZ位置界限和Zyx欧拉角上的方向限制。此示例指定以米为单位的XY平面上的边界,并允许围绕弧度旋转Z轴。

GoalRegion = WorkspaceGoAlRegion(Robot.Bodynames {END});守门员。翻译= TRVEC2TFORM([0.5 0.5 0.2]);守门员.Bounds(1,:) = [-0.2 0.2];%x边界守门员.Bounds(2,:) = [-0.2 0.2];%y界限守门员.Bounds(4,:) = [-pi / 2 pi / 2];关于z轴的%旋转

您还可以将固定偏移应用于该区域内的所有姿势。此偏移量可以解释用于掌握工具或工作区中的维度的变化。对于此示例,请应用一个固定的变换,将最终执行器5cm上方的工作区放置。

GoalRegion.endeffectorOffsetapes = trvec2tform([0 0 0.05]);抓住展示(守门员);

图包含轴。轴包含35个类型的型号,贴片。这些对象代表base_link,hompent_link,falmararm1_link,forearm_link,wrist1_link,wrist2_link,bracket_link,endeffectr_link,hompent_link_mesh,fallarm2_link_mesh,forearm_link_mesh,wrist1_link_mesh,wrist2_link_mesh,bracelet_link_mesh,base_link_mesh。

计划目标区域的途径

从机器人的家庭配置计划到目标区域的路径。由于RRT算法中的随机性,此示例设置了RNG.种子确保可重复的结果。

RNG(0)PATH = PLAN(Planner,HomeConfiguration(机器人),守门员);

显示执行路径的机器人。要可视化更现实的路径,请在路径配置之间插入点。

Interpconfigurations =内插(计划者,路径,5);为了i = 1:大小(Interpconfigurations)显示(机器人,interpconfigurations(i,:),“preserveplot”,错误的);套(斧头,'zlim',[ -  0.05 0.75],'ylim',[ -  0.05 1],'xlim',[ -  0.05 1],......'cameraviewangle',5)绘制结尾抓住离开

图包含轴。轴包含35个类型的型号,贴片。这些对象代表base_link,hompent_link,falmararm1_link,forearm_link,wrist1_link,wrist2_link,bracket_link,endeffectr_link,hompent_link_mesh,fallarm2_link_mesh,forearm_link_mesh,wrist1_link_mesh,wrist2_link_mesh,bracelet_link_mesh,base_link_mesh。

调整末端效应姿势

请注意,机器人臂从底部接近工作区。要翻转最终位置的方向,请添加一个PI.旋转到Y轴的参考姿势。

PoalOregion.endeffectorOffsetPose =......PoalOregion.endeffectorOffsetapes * Eul2tform([0 pi 0],“Zyx”);

再次重新调整路径并再次可视化机器人运动。机器人现在从顶部接近。

抓住展示(守门员);Path = Plan(Planner,Homeconfiguration(机器人),守门员);Interpconfigurations =内插(计划者,路径,5);为了i = 1:大小(Interpconfigurations)显示(机器人,interpconfigurations(i,:),“preserveplot”,错误的);套(斧头,'zlim',[ -  0.05 0.75],'ylim',[ -  0.05 1],'xlim',[ -  0.05 1])绘制;结尾抓住离开

图包含轴。轴包含45个类型的类型,贴片。这些对象代表base_link,hompent_link,falmararm1_link,forearm_link,wrist1_link,wrist2_link,bracket_link,endeffectr_link,hompent_link_mesh,fallarm2_link_mesh,forearm_link_mesh,wrist1_link_mesh,wrist2_link_mesh,bracelet_link_mesh,base_link_mesh。

尖端

规划复杂性

  • 当规划树中节点之间的运动时,生成并验证了一组配置。该规划时间的规划时间与生成的配置数量成比例。节点之间的配置数由比率控制maxconnectiondistance.验证数据特性。为了提高规划时间,考虑增加验证距离或降低最大连接距离。

  • 验证每个配置的复杂性O(Mn + M.2), 在哪里m是碰撞机构的数量刚性小组细胞对象和N是碰撞对象的数量WorldObjects.。使用大量网格来表示机器人或环境增加了验证每个配置的时间。

无限的关节限制

  • 如果你的刚性小组细胞机器人模型具有具有无限范围的关节限制(例如,具有限制的旋转关节[-inf inf]), 这Manipulatorrt.对象使用限制[-1E10 1E10]在关节限制中执行均匀的随机抽样。

参考

[1] Kuffner,J.J.和S. Lavalle。“RRT-Connect:单Query路径规划的有效方法。”在诉讼程序2000年ICRA。千年会议。IEEE国际机器人与自动化会议。Symposia诉讼程序(猫。No.00CH37065),2:995-1001。旧金山,加州,美国:IEEE,2000. HTTPS:// DOI:10.1109 / Robot.2000.844730。

扩展能力

C / C ++代码生成
使用MATLAB®Coder™生成C和C ++代码。

在R2020B中介绍