主要内容

拾起并定位工作流使用RRT规划师和Stateflow MATLAB

这个例子展示了如何设置一个端到端的拾起并定位工作流等机器人机械手KINOVA®Gen3。

拾起并定位工作流实现在这个例子可以适应不同的场景中,规划者,仿真平台和对象检测选项。这里显示的示例使用了快速扩展随机树(RRT)规划的算法,并在MATLAB模拟机器人。用于其它用途,看到:

概述

这个例子中各种检测对象到货架使用KINOVA Gen3操纵者。从两个工具箱的例子使用的工具:

  • 机器人系统工具箱™用于模型、模拟和可视化操纵者,计划使用RRT机械手的无碰撞路径跟随。

  • Stateflow®示例中用于调度高级任务从任务和步骤。

下面的例子使用了RRT路径规划算法。另一个例子,进入更详细的RRT规划师,明白了选择和地点使用RRT操纵者

Stateflow图表

这个示例使用Stateflow图安排任务的例子。打开图检查内容和遵循状态转换图执行期间。

编辑exampleHelperFlowChartPickPlaceRRT.sfx

图表规定如何操纵国与对象交互,或者部分。它包括基本的初始化步骤,其次是两个主要部分:

  • 识别部分和确定在何处放置它们

  • 拾起并定位执行工作流

初始化机器人和环境

首先,图表创建一个环境组成的Kinova Gen3操纵者,三个部分进行排序,排序,使用的货架上和一个蓝色的障碍。接下来,机器人移动到中心位置。

识别并确定在何处放置他们的部分

在识别阶段的第一步,必须检测部分。的exampleCommandDetectParts函数直接给出了对象。这个类替换为您自己的基于传感器或对象的目标检测算法。

接下来,必须分类部分。的exampleCommandClassifyParts函数将部分分为两个类型来确定在何处放置它们(架子顶部或底部)。再次,你可以用任何方法来代替这个函数分类部分。

拾起并定位执行工作流

一旦确认了部分和目的地已经被分配,操纵者必须遍历部分并将它们移到相应的表中。

拿起对象

选择阶段移动机器人对象,选择它,并移动到一个安全的位置,如下图所示:

的exampleCommandComputeGraspPose函数计算掌握姿势。类计算每个部分的工作空间把握的位置。中间步骤接近和达到的也相对于对象定义的一部分。

这个机器人拿起对象使用一个模拟气动夹具。爪被激活时,exampleCommandActivateGripper增加了部分的碰撞网格上rigidBodyTree表示的机器人,通过使用addCollision对象的功能。碰撞检测包括这个对象时。然后,机器人移动到一个内缩位置远离其他部分。

将对象

机器人然后把对象相应的架子上。

与选择工作流、放置方法和收回位置相对于已知的计算所需的放置位置。使用exampleCommand爪是无效的ActivateGripper从机器人中删除部分,使用clearCollision。每次一个特定类型的一部分,这个对象类型的将构成相同类型被更新,以便下一个部分中放置旁边放置的部分。

移动机械手到指定的姿势

大部分的任务执行由指示机器人不同移动指定的姿势。的exampleHelperMoveToTaskConfig函数定义了一个RRT计划使用manipulatorRRT对象,它计划路径从最初指定所需的联合配置通过避免碰撞碰撞场景中的对象。生成的路径是先缩短距离然后插入所需的验证。生成一个轨迹,trapveltraj函数是用来分配时间步骤每个插值路径点梯形剖面。最后,与它们相关的次插值路径点所需的采样率(每0.1秒)。生成的轨迹确保机器人移动缓慢的开始和结束时运动接近或放置一个对象。

另一个例子,进入更详细的RRT规划师,明白了选择和地点使用RRT操纵者

简单的轨迹的路径在哪里知道无障碍,轨迹可以使用执行轨迹生成工具使用机械手运动模型和模拟。看到计划和执行任务——和关节空间轨迹使用KINOVA Gen3操纵者的例子。

任务调度Stateflow图表

下面的例子使用Stateflow图直接工作流MATLAB®。更多信息关于创建国家流开始,明白了为执行为MATLAB对象创建Stateflow图表(Stateflow)

Stateflow图指导任务执行在MATLAB使用命令的功能。当命令执行完毕,它发送一个输入事件醒来的图表和继续下一步的任务执行,明白了执行一个单独的表(Stateflow)

和可视化仿真运行

这个模拟使用KINOVA Gen3 Robotiq爪机械手。负载从一个机器人模型.mat文件作为rigidBodyTree对象。

负载(“exampleHelperKINOVAGen3GripperCollRRT.mat”);

初始化选择和地点协调员

设置初始的机器人配置。创建协调员,负责机器人控制,通过给机器人模型,初始配置,末端执行器的名字。

currentRobotJConfig = homeConfiguration(机器人);协调员= exampleHelperCoordinatorPickPlaceRRT (currentRobotJConfig的机器人“爪”);

指定主配置和两个姿势放置两种不同类型的对象。第一个姿势对应于1型的中间部位,所有部分被放置第二个姿势对应于货架顶部部分2型被放置的地方。Stateflow图的更新将构成每次成功放置一个新的部分。地区不同类型vizualization由不同颜色标识。

协调员。HomeRobotTaskConfig = trvec2tform ([0.4, 0, 0.5]) * axang2tform([0 1 0π]);协调员。PlacingPose {1} = trvec2tform ([[-0.15 0.52 0.46]]) * axang2tform([1 0 0 -π/ 2]);协调员。PlacingPose {2} = trvec2tform ([[-0.15 0.52 0.63]]) * axang2tform([1 0 0 -π/ 2]);

和可视化仿真运行

协调器连接到Stateflow图表。一旦开始,Stateflow图表负责不断经历的检测对象,他们捡起来放到正确的暂存区域。

协调员。流程图= exampleHelperFlowChartPickPlaceRRT (“协调员”协调员);

使用对话框开始拾起并定位任务执行。点击是的在对话框中开始仿真。

回答= questdlg (“你现在想开始拾起并定位工作吗?”,“开始工作”,“是的”,“不”,“不”);开关回答情况下“是的”%触发事件开始挑选和地方Stateflow图表coordinator.FlowChart.startPickPlace;情况下“不”%最终选择和地点coordinator.FlowChart.endPickPlace;删除(coordinator.FlowChart);删除(协调);结束

拾起并定位任务结束

Stateflow图完成后自动执行3失败检测新对象。过早地结束拾起并定位任务,取消注释,执行以下代码行或按Ctrl + C命令窗口。

% coordinator.FlowChart.endPickPlace;%删除(coordinator.FlowChart);%删除(协调);

观察仿真状态

在执行期间,活跃在每一个时间点Stateflow用蓝色突出显示的图表。这有助于跟踪什么机器人当。你可以点击子系统状态的细节。

可视化拾起并定位行动

这个例子使用了interactiveRigidBodyTree为机器人可视化对象。可视化显示了机器人在工作区域移动部分。机器人避开障碍物环境中(蓝色缸)和地方对象顶部或底部架子上基于他们的分类。机器人还在继续工作,直到所有部分被放置。