主要内容

拾起并定位工作流使用Stateflow MATLAB

这个例子展示了如何设置一个端到端的选择和地点工作流等机器人机械手KINOVA®Gen3。

拾起并定位工作流实现在这个例子可以适应不同的场景中,规划者,仿真平台和对象检测选项。这里显示的例子使用模型预测控制计划和控制,并在MATLAB模拟机器人。用于其它用途,看到:

概述

这个例子中各种检测对象和把他们放在长凳上使用KINOVA Gen3操纵者。本例使用工具从四个工具箱:

  • 机器人系统工具箱™用于模型、模拟和可视化操纵者,collision-checking。

  • 模型预测控制工具箱™优化工具箱™用于生成优化,无碰撞轨迹的操纵者。

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

这个例子从两个相关的例子基于关键概念:

Stateflow图表

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

编辑exampleHelperFlowChartPickPlace.sfx

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

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

  • 拾起并定位执行工作流

初始化机器人和环境

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

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

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

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

拾起并定位执行工作流

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

拿起对象

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

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

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

将对象

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

与选择工作流、放置方法和收回位置相对于已知的计算所需的放置位置。使用exampleCommand爪是无效的ActivateGripper从机器人,从而消除了一部分。

移动机械手到指定的姿势

大部分的任务执行由指示机器人不同移动指定的姿势。的exampleHelperPlanExecuteTrajectoryPickPlace函数定义了一个使用非线性模型预测控制器(见解算器非线性MPC(模型预测控制工具箱)),计算一个可行的,无碰撞轨迹优化参考使用nlmpcmove(模型预测控制工具箱)checkCollision的障碍被表示为球体,以确保准确的近似约束雅可比矩阵的非线性模型预测控制算法的定义(见[1])。然后helper函数模拟computed-torque控制机械手的运动跟踪参考轨迹使用jointSpaceMotionModel对象,并更新可视化。的helper函数叫做Stateflow图通过exampleCommandMoveToTaskConfig,它定义了正确的输入。

这个工作流详细检查计划和执行无碰撞轨迹使用KINOVA Gen3操纵者。控制器是用于确保无碰撞运动。简单的轨迹的路径在哪里知道无障碍,轨迹可以使用执行轨迹生成工具使用机械手运动模型和模拟。看到计划和执行任务——和关节空间轨迹使用KINOVA Gen3操纵者

任务调度Stateflow图表

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

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

和可视化仿真运行

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

负载(“exampleHelperKINOVAGen3GripperColl.mat”);

初始化选择和地点协调员

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

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

指定主配置和两个姿势放置不同类型的对象。

协调员。HomeRobotTaskConfig = trvec2tform ([0.4, 0, 0.6]) * axang2tform([0 1 0π]);协调员。PlacingPose {1} = trvec2tform (0.23 [0.62—0.33]) * axang2tform([0 1 0π]);协调员。PlacingPose {2} = trvec2tform (0.23 [-0.62—0.33]) * axang2tform([0 1 0π]);

和可视化仿真运行

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

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

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

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

拾起并定位任务结束

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

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

观察仿真状态

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

可视化拾起并定位行动

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

引用

舒尔曼[1],J。,等。“运动规划与相邻凸优化和凸碰撞检查。”国际机器人研究杂志》上33.9 (2014):1251 - 1270。