主要内容

使用ROS挑选凉亭的工作流程

此示例显示了如何设置端到端的选择和将工作流程为机器人机器人的工作流程,如Kinova®Gen3,并在凉亭物理模拟器中模拟机器人。

概述

本例使用KINOVA Gen3操作器将对象标识并回收到两个容器中。这个例子使用了五个工具箱中的工具:

  • 机器人系统工具箱™用于模拟并模拟操纵器。

  • StateFlow®.用于将示例中的高级任务安排到任务到任务的emplation。

  • ROS工具箱™使用用于将MATLAB连接到Gazebo。

  • 计算机Vision Toolbox™深度学习工具箱™用于在凉亭中使用模拟摄像机进行目标检测。

此示例在以下相关示例中构建关键概念:

凉亭机器人仿真与控制

启动KINOVA Gen3机器人的基于ros的模拟器,并配置MATLAB®与机器人模拟器的连接。

本示例使用可下载的虚拟机(VM)。如果你以前从未使用过它,请看开始使用凉亭和模拟乌龟机器人(ROS工具箱)

  • 启动Ubuntu®虚拟机桌面。

  • 在Ubuntu桌面中,单击凉亭回收世界图标来启动为本例构建的露台世界。

  • 在Gazebo中指定ROS主机的IP地址和端口号,以便MATLAB®与机器人模拟器进行通信。本例中,Gazebo中的ROS主机使用的IP地址为192.168.203.131显示在桌面上。调整玫瑰花基于VM的变量。

  • 启动ROS 1网络罗斯尼特

rosIP =“192.168.203.131”启用ROS的机器%IP地址rosinit (rosIP, 11311);%初始化ROS连接
环境变量ROS_IP的值为192.168.31.1,用于设置ROS节点的发布地址。使用NodeURI http://192.168.31.1:51073/初始化全局节点/matlab_global_node_36570

通过点击图标初始化露台世界后,VM将KINOVA Gen3机器人手臂加载到一张桌子上,桌子两边各有一个回收箱。为了在凉亭中模拟和控制机器人手臂,虚拟机包含ros_kortex.KINOVA提供的ROS包。

包使用ros_control控制关节到所需的关节位置。有关使用VM的其他详细信息,请参阅开始使用凉亭和模拟乌龟机器人(ROS工具箱)

Stateflow图表

此示例使用StateFlow图表在示例中计划任务。打开图表以检查内容并在图表执行期间遵循状态转换。

编辑exampleHelperFlowChartPickPlaceROSGazebo.sfx

该图表说明了机械手如何与物体或部件相互作用。它由基本的初始化步骤组成,接下来是两个主要部分:

  • 识别零件并确定放置它们的位置

  • 执行挑选工作流程

对于拾取和放置步骤的高级描述,请参阅MATLAB中使用Stateflow的拾取和放置工作流

打开和关闭夹具

激活夹具的命令,examplecommandactivategripperrosgazebo.,发送一个动作请求来打开和关闭在Gazebo中实现的抓取器。要发送打开夹持器的请求,请使用以下代码。注意:显示的示例代码只是说明了命令所做的。别跑。

[gripAct, gripGoal] = rosactionclient (' / my_gen3 / custom_gripper_controller / gripper_cmd ');gripperCommand = rosmessage (“control_msgs / GripperCommand”);gripperCommand。位置= 0.0;gripGoal。命令= gripperCommand;sendGoal (gripAct gripGoal);

将机械手移动到指定的姿势

commandMoveToTaskConfig命令功能用于将机械手移动到指定的位姿。

规划

路径规划从初始到所需的任务配置生成简单的任务空间轨迹trapveltraj.TransformTraj..有关规划和执行轨迹的更多细节,请参见使用KINOVA Gen3机械手规划和执行任务和关节空间轨迹

ROS中的联合轨迹控制器

在为机器人产生关节轨迹之后,commandMoveToTaskConfig以所需的采样速率对轨迹进行采样,将其包装成关节轨迹ROS消息,并将动作请求发送到在Kinova ROS包中实现的联合轨迹控制器。

检测和分类场景中的对象

功能commandDetectPartscommandclassifyparts.使用来自机器人的模拟终端效应器相机源,并应用预磨削的深学习模型以检测可回收零件。该模型采用相机帧作为输入,并输出对象的2D位置(像素位置),并将其所需的回收类型(蓝色或绿色垃圾箱)。图像帧上的2D位置映射到机器人基帧。

深度学习模型训练:获取和标记凉亭图像

检测模型是使用在凉亭世界的模拟环境中获取的一组图像进行训练的,这些图像将两类物体(瓶子、罐子)放置在桌子的不同位置。图像由机器人上的模拟摄像机获取,该摄像机沿水平和垂直平面移动,从多个不同的摄像机角度获取目标的图像。

然后使用图片标志(计算机视觉工具箱)应用程序,为yolo v2检测模型创建培训数据集。trainyolov2objectdetector(计算机视觉工具箱)火车模型。要了解如何在MATLAB中训练YOLO v2网络,请参见火车yolo v2网络用于车辆检测(计算机视觉工具箱)

将训练后的模型应用于机器人在原位置时机载摄像机获取的单幅图像的在线推理。的探测(计算机视觉工具箱)函数返回检测到的对象的边界框的图像位置,以及它们的类,然后用于找到对象顶部的中心的位置。使用简单的摄像机投影方法,假设已知对象的高度,将对象位置投影到世界中,最后用作挑选对象的参考位置。与边界盒子相关联的类决定放置对象的垃圾箱。

启动pickand - place任务

此模拟使用Kinova Gen3机械手Robotiq夹附呈。加载机器人模型从.mat文件作为rigidBodyTree对象。

负载('examplehelperkinovagen3gripperrosgazebo.mat');

初始化选择和放置协调员

设置初始机器人配置。通过提供机器人模型,初始配置和结束效应名称,创建处理机器人控制的协调器。

initialRobotJConfig = [3.5797 -0.6562 -1.2507 -0.7008 0.7303 -2.0500 -1.9053];endEffectorFrame =“爪”

通过给出机器人模型、初始配置和末端执行器名称来初始化协调器。

coordinator = exampleHelperCoordinatorPickPlaceROSGazebo(机器人,initialRobotJConfig, endEffectorFrame);

指定放置对象的主配置和两个姿势。

协调员。HomeRobotTaskConfig = getTransform(机器人,initialRobotJConfig, endEffectorFrame);协调员。PlacingPose{1} = trvec2tform([[0.2 0.55 0.26]])*axang2tform([0 0 1 pi/2])*axang2tform([0 1 0 pi]);协调员。PlacingPose{2} = trvec2tform([[0.2 -0.55 0.26]])*axang2tform([0 0 1 pi/2])*axang2tform([0 1 0 pi]);

运行并可视化模拟

将协调器连接到状态流图。一旦启动,状态流程图负责连续检查检测对象的状态,将它们提取出来并将它们放置在正确的暂存区域。

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

使用对话框来启动取放任务执行。点击是的在对话框中开始模拟。

回答= questdlg (“你想现在开始挑选挑选工作吗?”...'开始工作'“是的”'不''不');开关回答案件“是的”%触发事件开始选择和放置状态流图表coordinator.FlowChart.startPickPlace;案件'不'coordinator.flowchart.endpickplace;删除(coordinator.flowchart)删除(协调器);结尾

结束挑点任务

在尝试检测新对象3次失败后,状态流程图将自动完成执行。要提前结束拾取和放置任务,取消注释并执行以下代码行,或者在命令窗口中按Ctrl+C。

%coordinator.flowchart.endpickplace;%删除(coordinator.FlowChart);%删除(协调员);

观察模拟状态

在执行期间,状态流图中每个时间点的活动状态以蓝色突出显示。这有助于跟踪机器人的动作和时间。您可以单击子系统来查看运行状态的详细信息。

设想在凉亭的拾取和放置行动

露台世界展示了机器人在工作区域移动部件到回收箱。机器人继续工作,直到所有的部件都被放置好。当检测步骤四次都没有找到更多的部件时,状态流程图就会退出。

如果比较字符串(答案,“是的”尽管coordinator.numdetectionRuns <4%等待未检测到的部分。结尾结尾

完成示例后关闭ROS网络。

rosshutdown
使用NodeURI http://192.168.31.1:51073/关闭全局节点/matlab_global_node_36570

版权所有2020 MathWorks,Inc。