主要内容

机器人运动规划与RRT操纵者

计划的抓取动作Kinova错话辅助机器人手臂使用快速扩展随机树算法(RRT)。这个示例使用plannerRRTStar机器人运动对象样本状态和计划。提供例子帮助说明如何定义自定义状态空间和运动规划应用程序的验证。

从机器人加载Kinova错话模型库。这个模型包括三指爪。

亲属= loadrobot (“kinovaJacoJ2S7S300”);

创建环境

使用碰撞对象基元,添加一个地板,两个桌面,一个圆柱体。这些对象指定的大小和构成。所提供的图像显示环境的创建。

0.01地板= collisionBox (1, 1);tabletop1 = collisionBox (0.4、1、0.02);tabletop1。构成= trvec2tform ([0.3, 0, 0.6]);tabletop2 = collisionBox (0.6, 0.2, 0.02);tabletop2。构成= trvec2tform ((-0.2, 0.4, 0.5));可以= collisionCylinder (0.03, 0.16);可以。构成= trvec2tform ((0.3, 0.0, 0.7));

自定义状态空间机械手

Kinova臂有十个自由度(自由度),与过去的三自由度对应的手指。只使用前七自由度的规划和手指保持在零配置(打开宽)。一个ExampleHelperRigidBodyTreeStateSpace状态空间创建代表构型空间(关节空间)。ExampleHelperRigidBodyTreeStateSpace样品可行状态的机器人手臂。的sampleUniform状态空间的函数之间的交替以下两个等概率抽样策略:

  • 均匀随机样本的终端执行器构成工作空间的目标区域在参考目标构成,然后将其映射到关节空间通过逆运动学。联合限制是尊重。

  • 在关节空间均匀随机样本。联合限制是尊重。

第一个抽样策略有助于指导RRT规划师向目标区域在任务空间所以RRT能够更快地收敛到一个解决方案,而不是迷失在七自由度关节空间。

使用工作空间的目标区域(水气比)而不是单个目标造成增加的机会找到一个解决方案通过偏压样本的目标地区。水气比定义了一个连续的可接受的末端执行器构成对某些任务。例如,机器人可以从多个方向的方法掌握一杯水从侧面,只要它与环境不发生碰撞。水气比的概念被首次提出2009年德米特里•贝伦森等[1]。该算法后来演变成任务空间区域[2]。水气比由三部分组成:

  • Twgr_0——参考变换水气比的世界({0})坐标

  • Te_w——末端执行器抵消{w}坐标变换,{w}从水气比采样

  • 界限——6-by-2矩阵边界的水气比参考坐标。的前三行界限设置允许翻译沿着x, y,和z轴(单位:米)分别和最后三组允许允许旋转旋转x, y, z轴(弧度)。注意,Roll-Pitch-Yaw (RPY)欧拉角作为他们可以直观地指定。

您可以定义和连接多个水气比在一个规划问题。在这个例子中,只有一个水气比是被允许的。

%建立状态空间和设定工作目标区域(水气比)党卫军= ExampleHelperRigidBodyTreeStateSpace(亲属);ss.EndEffector =“j2s7s300_end_effector”;%定义工作空间目标区域(水气比)%这水气比告诉规划师应当可以抓住%,实际掌握高度可能摆动最多1厘米。%这是取向抵消在贪婪的姿势和末端执行器之间的帧R = [0 0 1;1 0 0;0 1 0];Tw_0 = can.Pose;Te_w = rotm2tform (R);边界= [0 0;% x0 0;y %0 0.01;% z0 0;R %0 0;% Pπ-π);Y %setWorkspaceGoalRegion(党卫军,Tw_0 Te_w,范围);

定制验证器状态

自定义验证器,ExampleHelperValidatorRigidBodyTree提供了刚体碰撞检查机器人和环境之间。这个验证器检查取样配置和规划师应该丢弃无效状态。

sv = ExampleHelperValidatorRigidBodyTree (ss);%增加环境中的障碍tabletop1 addFixedObstacle (sv,“tabletop1”,(71 161 214)/ 256);tabletop2 addFixedObstacle (sv,“tabletop2”,(71 161 214)/ 256);addFixedObstacle (sv,可以,“可以”,“r”);addFixedObstacle (sv、地板、“地板”,1,0.5,0);%跳过碰撞检查某些机构的性能skipCollisionCheck (sv),“根”);%根永远不会碰任何障碍skipCollisionCheck (sv),“j2s7s300_link_base”);%基地永远不会碰任何障碍skipCollisionCheck (sv),“j2s7s300_end_effector”);%这是一个虚拟的框架%设置验证距离sv。ValidationDistance = 0.01;

掌握运动计划

使用plannerRRT对象与定制的状态空间和状态验证器对象。通过使用指定开始和目标配置inverseKinematics要求配置基于末端执行器构成。指定GoalReachedFcn使用exampleHelperIsStateInWorkspaceGoalRegion检查如果路径到达目标区域。

%设置随机种子可重复的结果rng (0,“旋风”)% 0%计算参考目标配置。注意这是只适用于目标偏差大于0。Te_0ref = Tw_0 * Te_w;%参考末端执行器构成世界坐标,来自水气比本土知识= inverseKinematics (“RigidBodyTree”、亲属);refGoalConfig =本土知识(ss.EndEffector、Te_0ref (1,6), homeConfiguration (ss.RigidBodyTree));%计算初始配置(最初在桌子底下末端执行器)T = Te_0ref;T (1、4) = 0.3;T (2、4) = 0.0;T (3、4) = 0.4;initConfig =本土知识(ss.EndEffector T (1,6), homeConfiguration (ss.RigidBodyTree));%创建计划从以前创建的状态空间和状态验证器规划师= plannerRRT (ss、sv);%如果一个节点树中的水气比下降,被认为是发现的道路。计划。GoalReachedFcn = @exampleHelperIsStateInWorkspaceGoalRegion;%设置最大连接距离。计划。MaxConnectionDistance = 0.5;%与水气比,不需要指定一个特定目标配置(使用% initConfig举行的地方)。%结果,可以设置一个GoalBias为零。计划。GoalBias = 0;[pthObj, solnInfo] =计划(规划师、initConfig initConfig);

可视化把握运动

第一发现路径平滑通过递归投机取巧策略[3],动画运动之前。

%铺平道路。插入(pthObj, 100);newPathObj = exampleHelperPathSmoothing (pthObj, sv);插入(newPathObj, 200);图状态= newPathObj.States;%画出机器人。ax =显示(亲属、州(1:));zlim (ax, [-0.03, 1.4]) xlim (ax, [1]) ylim (ax, [1])%渲染环境。持有showObstacles (sv, ax);视图(146年,33)camzoom (1.5)%显示运动。我= 2:长度(州)显示(亲戚,(我,:)“PreservePlot”假的,“帧”,“关闭”,“父”、ax);drawnow结束q =州(我:);%抓住。q = exampleHelperEndEffectorGrab (sv,“可以”q ax);

设定一个目标psotion可以在其他桌面。

targetPos = (-0.15, 0.35, 0.51);exampleHelperDrawHorizontalCircle (targetPos, 0.02,“y”、ax);

图包含一个坐标轴对象。坐标轴对象包含X, Y ylabel包含28个对象类型的补丁,线。这些对象代表世界,根、j2s7s300_link_base j2s7s300_link_1, j2s7s300_link_2, j2s7s300_link_3, j2s7s300_link_4, j2s7s300_link_5, j2s7s300_link_6, j2s7s300_link_7, j2s7s300_end_effector, j2s7s300_link_finger_1, j2s7s300_link_finger_tip_1, j2s7s300_link_finger_2, j2s7s300_link_finger_tip_2, j2s7s300_link_finger_3, j2s7s300_link_finger_tip_3,工件,root_mesh, j2s7s300_link_base_mesh, j2s7s300_link_1_mesh, j2s7s300_link_2_mesh, j2s7s300_link_3_mesh, j2s7s300_link_4_mesh, j2s7s300_link_5_mesh, j2s7s300_link_6_mesh, j2s7s300_link_7_mesh, j2s7s300_end_effector_mesh, j2s7s300_link_finger_1_mesh, j2s7s300_link_finger_tip_1_mesh, j2s7s300_link_finger_2_mesh, j2s7s300_link_finger_tip_2_mesh, j2s7s300_link_finger_3_mesh, j2s7s300_link_finger_tip_3_mesh workpiece_mesh。

计划的运动

在运动,保持缸可以水平,避免泄漏。指定一个额外的约束RRT的临时机械手配置计划。开启通过设置约束UseConstrainedSampling属性为true。

Tw_0 = trvec2tform (targetPos + [0, 0, 0.08]);Te_w = rotm2tform (R);边界= [0 0;% x0 0;y %0 0;% z0 0;R %0 0;% Pπ-π);Y %setWorkspaceGoalRegion(党卫军,Tw_0 Te_w,范围);ss.UseConstrainedSampling = true;计划。MaxConnectionDistance = 0.05;[pthObj2 ~] =计划(规划师q q);

可视化运动。

州= pthObj2.States;视图(ax, 152年,45)我= 2:长度(州)显示(亲戚,(我,:)“PreservePlot”假的,“帧”,“关闭”,“父”、ax);drawnow结束q =州(我:);%的放手q = exampleHelperEndEffectorRelease (sv, q, ax);

图包含一个坐标轴对象。坐标轴对象包含X, Y ylabel包含28个对象类型的补丁,线。这些对象代表世界,根、j2s7s300_link_base j2s7s300_link_1, j2s7s300_link_2, j2s7s300_link_3, j2s7s300_link_4, j2s7s300_link_5, j2s7s300_link_6, j2s7s300_link_7, j2s7s300_end_effector, j2s7s300_link_finger_1, j2s7s300_link_finger_tip_1, j2s7s300_link_finger_2, j2s7s300_link_finger_tip_2, j2s7s300_link_finger_3, j2s7s300_link_finger_tip_3, root_mesh, j2s7s300_link_base_mesh, j2s7s300_link_1_mesh, j2s7s300_link_2_mesh, j2s7s300_link_3_mesh, j2s7s300_link_4_mesh, j2s7s300_link_5_mesh, j2s7s300_link_6_mesh, j2s7s300_link_7_mesh, j2s7s300_end_effector_mesh, j2s7s300_link_finger_1_mesh, j2s7s300_link_finger_tip_1_mesh, j2s7s300_link_finger_2_mesh, j2s7s300_link_finger_tip_2_mesh, j2s7s300_link_finger_3_mesh j2s7s300_link_finger_tip_3_mesh。

引用

[1]d•贝伦森s Srinivasa d·弗格森a .夹头和j . Kuffner“操纵与空间目标地区规划”,诉讼的IEEE机器人与自动化国际会议上,2009年,pp.1397 - 1403

[2]d贝伦森,s . Srinivasa和j . Kuffner“Pose-Constrained操纵任务空间区域:一个框架计划”,国际机器人研究杂志》上,30卷,12号(2011):1435 - 1460

[3]陈平,y .黄”桑德罗:一个动态图搜索算法对运动计划”,IEEE机器人与自动化交易,14卷3号(1998):390 - 403