主要内容

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

此示例显示如何为KINOVA®Gen3等机械手设置端到端拾取和放置工作流,并在Gazebo物理模拟器中模拟机器人。

概述

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

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

  • Stateflow®用于安排示例中的高级任务,并从一个任务到另一个任务逐步执行。

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

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

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

露台机器人的仿真与控制

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

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

  • 启动Ubuntu®虚拟机桌面。

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

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

  • 使用以下命令启动ROS 1网络:松香

罗西普='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

单击图标初始化Gazebo世界后,虚拟机将KINOVA Gen3机器人手臂加载到桌子上,每侧各有一个回收箱。要模拟和控制Gazebo中的机器人手臂,虚拟机包含罗斯库特克斯酒店ROS包,由KINOVA提供。

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

状态流程图

此示例使用状态流程图来安排示例中的任务。打开图表以检查内容,并在图表执行期间跟踪状态转换。

编辑示例HelperFlowChart PickPlaceRosGazebo.sfx

图表说明操纵器如何与对象或零件交互。它包括基本初始化步骤,然后是两个主要部分:

  • 识别零件并确定放置位置

  • 执行拾取和放置工作流

有关拾取和放置步骤的详细说明,请参见使用Stateflow for MATLAB的拾取和放置工作流

打开和关闭夹持器

启动夹持器的命令,示例CommandActivateGripperrorsgazebo,发送一个动作请求来打开和关闭在Gazebo中实现的抓取器。要发送打开夹持器的请求,请使用以下代码。注:所示的示例代码仅说明了该命令的作用。不要跑。

[gripAct,gripGoal]=rosactionclient(“/my_gen3/custom_gripper_controller/gripper_cmd”);gripperCommand=rosmessage(“控制系统/夹持器命令”); 夹持器命令位置=0.0;gripGoal.Command=gripperCommand;sendGoal(gripAct、gripGoal);

将操纵器移动到指定姿势

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

计划

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

ROS中的联合轨迹控制器

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

场景中目标的检测与分类

功能commandDetectParts命令分类部件使用来自机器人的模拟末端执行器摄像头进给,并应用预训练的深度学习模型检测可回收零件。该模型将相机帧作为输入,并输出对象的二维位置(像素位置)及其所需的回收类型(蓝色或绿色垃圾箱)。图像帧上的二维位置映射到机器人基础帧。

深度学习模型培训:获取和标记Gazebo图像

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

然后使用图片标识(计算机视觉工具箱)应用程序,为YOLO v2检测模型创建训练数据集。Trainyolov2oObject检测器(计算机视觉工具箱)训练模型。要了解如何在MATLAB中训练YOLO v2网络,请参阅列车YLO v2车辆检测网络(计算机视觉工具箱)

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

启动pickand - place任务

此模拟使用了一个KINOVA Gen3操纵器和一个机器人夹持器已连接。从中加载机器人模型小地毯归档为rigidBodyTree对象。

装载('exampleHelperKINOVAGen3GripperROSGazebo.mat');

初始化拾取和放置协调器

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

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

通过提供机器人模型、初始配置和末端效应器名称初始化协调器。

协调器=示例HelperCoordinatorPickPlaceRosGazebo(机器人,初始机器人配置,endEffectorFrame);

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

coordinator.HomeRobotTaskConfig=getTransform(robot,initialRobotJConfig,endEffectorFrame);coordinator.PlacingPose{1}=trvec2tform([[0.20.55 0.26]])*axang2tform([0.01 pi/2])*axang2tform([0.10 pi]);coordinator.PlacingPose{2}=trvec2tform([[0.2-0.55 0.26]])*axang2tform([0.01 pi/2])*axang2tform([0.10];

运行并可视化模拟

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

coordinator.Flow=ExampleHelperFlowChart PickPlaceRosGazebo(“协调员”(协调员);

使用对话框开始拾取和放置任务的执行。单击在对话框中开始模拟。

回答= questdlg (“您想现在开始挑选和放置工作吗?”,...“开始工作”,“是的”,“不”,“不”);开关答复案例“是的”%触发事件以开始在状态流程图中拾取和放置coordinator.FlowChart.startPickPlace;案例“不”coordinator.Flowth.endPickPlace;删除(coordinator.Flowth)删除(coordinator);终止

结束“拾取和放置”任务

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

%coordinator.Flow.endPickPlace;%删除(协调员流程图);%删除(协调员);

观察模拟状态

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

在露台中想象拾取和放置动作

Gazebo world显示机器人在工作区域移动零件到回收箱。机器人继续工作,直到所有零件都放置好。当检测步骤四次没有找到任何零件时,状态流程图退出。

如果strcmp(答复,“是的”)虽然coordinator.NumDetectionRuns<4%等待未检测到任何零件。终止终止

完成示例后关闭ROS网络。

罗斯赫顿
使用NodeURI关闭全局节点/matlab\u全局节点\u 36570http://192.168.31.1:51073/

MathWorks,Inc.版权所有。