主要内容

使用操作器的RRT进行拾取和放置

使用机械手来接,并在环境中进行对象可能需要路径规划算法,如快速,随机树策划者。规划器探讨在关节配置空间,并搜索不同机器人配置之间的无碰撞路径。这个例子说明了如何使用manipulatorRRT对象来优化规划器参数,并基于rigidBodyTree在弗兰卡埃米卡™熊猫机器人的机器人模型。调整规划师参数后,机器人操作计划的路径从一个地方移动可以到另一个。

装载机器人模型和环境

加载机器人,并使用其环境exampleHelperLoadPickAndPlaceRRT功能。功能输出三个变量:

  • 弗兰卡- - - - - -甲弗兰卡埃米卡熊猫机器人模型作为rigidBodyTree目的。该模型已被修改以除去一些相邻碰撞网眼,它们总是在碰撞和调整基于可行性位置限制。

  • 配置- - - - - -机器人关节位置的初始配置。

  • env- - - - - -集合碰撞对象作为单元数组,表示机器人的环境。路径规划器检查这个环境中的自冲突和冲突。

[franka,配置,env] = exampleHelperLoadPickAndPlaceRRT;

可视化的机器人模型的碰撞网格和环境中的物体。

数字(“姓名”“使用RRT进行挑选和放置”...“单位”“归一化”...“OuterPosition”,[0,0,1,1],...“可见的”“上”);显示(franka配置,“视觉效果”“离开”“碰撞”“上”);持有I = 1:长度(ENV)显示(ENV {I});结束

规划师

创建RRT路径规划器并指定机器人模型和环境。定义一些参数(稍后进行调优),并指定机器人的开始和目标配置。

规划人员= manipulatorRRT(弗兰卡,ENV);planner.MaxConnectionDistance = 0.3;planner.ValidationDistance = 0.1;startConfig =配置;goalConfig = [0.2371 -0.0200 0.0542 -2.2272 0.0013 2.2072 -0.9670 0.0400 0.0400];

规划配置之间的路径。该RRT规划人员应生成随机配置的快速,探索树探索的空间,并最终通过环境返回一个无碰撞路径。规划之前重置MATLAB的随机数发生器,用于repeatabile结果。

RNG('默认');路径计划=(规划师,startConfig,goalConfig);

要看到整个路径,内插路径成小步骤。默认情况下,函数生成所有的配置,这些配置是基于ValidationDistance财产。

interpStates =插补(计划者,路径);I = 1:2:尺寸(interpStates,1)显示(弗兰卡,interpStates(I,:),...“PreservePlot”假的,...“视觉效果”“离开”...“碰撞”“上”);标题(“计划1:MaxConnectionDistance = 0.3”) drawnow;结束

调整计划

修改路径规划器MaxConnectionDistanceValidationDistanceEnableConnectHeuristic属性策划者目的。

设置MaxConnectionDistance属性值越大,在规划路径上的运动就越长,但也使规划师能够贪婪地探索空间。使用抽搐toc函数来计时计划函数,以了解这些参数如何影响执行时间。

计划。MaxConnectionDistance = 5;tic path = plan(planner,startConfig,goalConfig);toc
运行时间为11.217983秒。

注意路径的变化。由于连接距离更大,机器人手臂摆动得更高。

interpStates =插补(计划者,路径);i = 1:2:size(interpStates, 1) show(franka,interpStates(i,:)),...“PreservePlot”,错误的,...“视觉效果”“离开”...“碰撞”“上”);标题("方案2:MaxConnectionDistance = 5") drawnow;结束

设置ValidationDistance为较小的值使得能够在沿着规划路径的边缘的运动的精细验证。增加配置的数量沿着小路通向长期规划的时间来验证。较小的值与很多碰撞物体的杂乱环境的情况下非常有用。由于小有效距离的,interpStates有元件的更大的数字。为了更快的可视化,在循环在这个步骤中更快的可视化跳过多个状态。

planner.MaxConnectionDistance = 0.3;planner.ValidationDistance = 0.01;tic path = plan(planner,startConfig,goalConfig);toc
运行时间为11.115833秒。
interpStates =插补(计划者,路径);i = 1:10:size(interpStates,1) show(franka, interpStates(i,:)),...“PreservePlot”,错误的,...“视觉效果”“离开”...“碰撞”“上”);标题(方案3:ValidationDistance = 0.01) drawnow;结束

连接启发式允许计划者贪婪地连接开始树和目标树。在环境不那么混乱的地方,这种启发式方法有助于缩短规划时间。然而,在混乱的环境中,贪婪的行为会导致浪费连接尝试。设置EnableConnectHeuristic可能会给出较长的规划时间和较长的路径,但在给定迭代次数的情况下,会产生较高的找到路径的成功率。

planner.ValidationDistance = 0.1;planner.EnableConnectHeuristic = FALSE;tic path = plan(planner,startConfig,goalConfig);toc
运行时间为7.556635秒。
interpStates =插补(计划者,路径);I = 1:2:尺寸(interpStates,1)显示(弗兰卡,interpStates(I,:),...“PreservePlot”,错误的,...“视觉效果”“离开”...“碰撞”“上”);标题(“方案4:EnableConnectHeuristic = FALSE”) drawnow;结束

装上可向末端效应

在调整了规划器的预期行为后,遵循拾取和放置工作流,机器人在环境中移动对象。这个例子在机器人的末端执行器上安装了一个圆柱体,并将其移动到一个新的位置。对于每个配置,规划人员检查碰撞与缸网以及。

%创建罐作为刚体cylinder1 = ENV {3};canBody =刚体(“myCan”);canJoint = rigidBodyJoint(“canJoint”);获得机器手当前的姿势。startConfig =路径(端,:);endEffectorPose = getTransform(弗兰卡,startConfig,“panda_hand”);%地方都能到端部执行夹持器。setFixedTransform(canJoint,endEffectorPose \ cylinder1.Pose);添加碰撞几何到刚体。addCollision(canBody,cylinder1,INV(cylinder1.Pose));canBody.Joint = canJoint;在机器人模型中添加刚体。addBody (franka canBody,“panda_hand”);从环境中删除对象。env (3) = [];

将罐子连接到机器人手臂后,指定放置物体的目标配置。修改规划器参数。计划一条从开始到目标的路径。可视化的路径。注意到罐头清理墙壁。

goalConfig = [-0.6564 0.2885 -0.3187 -1.5941 0.1103 1.8678 -0.2344 0.04 0.04];计划。MaxConnectionDistance = 1;计划。ValidationDistance = 0.2;planner.EnableConnectHeuristic = FALSE;路径=计划(计划、startConfig goalConfig);interpStates =插入(规划、路径);持有离开

显示(franka配置,“视觉效果”“离开”“碰撞”“上”);持有I = 1:长度(ENV)显示(ENV {I});结束i = 1:size(interpStates,1) show(franka,interpStates(i,:))...“PreservePlot”假的,...“视觉效果”“离开”...“碰撞”“上”);标题(“方案五:放置罐头”) drawnow;如果i == (size(interpStates,1)) view([80,7])结束结束


              

缩短规划路径

要缩短你的路径,使用缩短功能,并指定迭代次数。对于一个小的值ValidationDistance财产有大量重复的合并可能会导致大量的计算时间。

shortenedPath =缩短(计划者,路径,20);interpStates =插补(规划师,shortenedPath);I = 1:尺寸(interpStates,1)显示(弗兰卡,...: interpStates(我),...“PreservePlot”假的,...“视觉效果”“离开”...“碰撞”“上”);粗暴;标题(“飞机6:缩短路径”如果i > (size(interpStates,1)-2)视图([80,7])结束结束持有离开