主要内容

使用ROS在Gazebo中的拾取-放置工作流

这个例子展示了如何为像KINOVA®Gen3这样的机器人机械手设置端到端拾取和放置工作流,并在物理模拟器Gazebo中模拟机器人。

概述

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

  • 机器人系统工具箱™对机械手进行了建模和仿真。

  • Stateflow®用于调度示例中的高级任务,并从一个任务步进另一个任务。

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

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

本示例基于以下相关示例中的关键概念:

凉亭机器人仿真与控制

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

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

  • 启动Ubuntu®虚拟机桌面。

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

  • 在Gazebo中指定ROS master的IP地址和端口号,以便MATLAB®可以与机器人模拟器通信。对于本例,Gazebo中的ROS master使用的IP地址为192.168.203.131显示在桌面上。调整rosIP变量基于您的虚拟机。

  • 启动ROS 1网络使用rosinit

rosIP =“192.168.203.131”;启用了操作系统的机器的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_kortexROS包,由KINOVA提供。

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

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命令功能用于将机械手移动到指定的位姿。

规划

路径规划生成简单的任务空间轨迹,从初始任务到期望的任务配置使用trapveltrajtransformtraj。有关规划和执行轨迹的更多细节,请参见利用KINOVA Gen3机械臂计划和执行任务-关节空间轨迹

ROS中的关节轨迹控制器

在生成一个机器人跟随的关节轨迹后,commandMoveToTaskConfig以期望的采样率对轨迹进行采样,将其打包到关节轨迹ROS消息中,并向KINOVA ROS包中实现的关节轨迹控制器发送动作请求。

检测和分类场景中的物体

的函数commandDetectPartscommandClassifyParts使用模拟的机器人末端执行器摄像头馈入,并应用预先训练好的深度学习模型来检测可回收部件。该模型以一个相机帧作为输入,并输出对象的二维位置(像素位置)和它需要的回收类型(蓝色或绿色垃圾箱)。图像帧上的二维位置映射到机器人基帧。

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

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

然后这些图像用图片标志(计算机视觉工具箱)app,为YOLO v2检测模型创建训练数据集。trainYOLOv2ObjectDetector(计算机视觉工具箱)火车模型。要了解如何在MATLAB中训练YOLO v2网络,请参见培训YOLO v2网络的车辆检测(计算机视觉工具箱)

当机器人处于home位置时,使用训练后的模型对车载摄像头获取的单幅图像进行在线推理。的检测(计算机视觉工具箱)函数返回被检测对象及其类的包围框的图像位置,然后用来查找对象顶部中心的位置。使用一种简单的相机投影方法,假设物体的高度已知,将物体的位置投影到世界上,最后作为选择物体的参考位置。与边界框相关联的类决定将对象放置在哪个bin中。

启动Pick-and-Place任务

该仿真使用KINOVA Gen3机械手Robotiq夹附呈。从a加载机器人模型.mat文件作为rigidBodyTree对象。

负载(“exampleHelperKINOVAGen3GripperROSGazebo.mat”);

初始化选择和放置协调器

设置机器人初始配置。通过给出机器人模型、初始配置和末端执行器名称,创建处理机器人控制的协调器。

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

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

协调人= exampleHelperCoordinatorPickPlaceROSGazebo(robot,initialRobotJConfig, endEffectorFrame);

指定home配置和放置对象的两种姿势。

协调员。homerobotaskconfig = getTransform(robot, initialRobotJConfig, endffectorframe); / /初始化机器人协调员。*axang2tform([0 0 1 pi/2])*axang2tform([0 1 0 pi]); / /求圆周率协调员。*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);%删除(协调);

观察模拟状态

在执行期间,状态流图中每个时间点的活动状态都用蓝色高亮显示。这有助于跟踪机器人在什么时候做了什么。您可以通过单击子系统来查看运行状态的详细信息。

在《Gazebo》中呈现挑选和放置动作

在“凉亭世界”中,机器人在工作区域移动部件到回收箱中。机器人继续工作,直到把所有零件都放好。当检测步骤四次都没有找到更多零件时,状态流程图就存在。

如果比较字符串(答案,“是的”)协调员。NumDetectionRuns < 4%等待没有检测到部件。结束结束

完成示例后关闭ROS网络。

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

版权所有2020数学作品公司