在使用ROS的凉亭中选择和放置工作流
这个例子展示了如何为KINOVA®Gen3这样的机器人机械手设置端到端拾取和放置工作流,并在Gazebo物理模拟器中模拟机器人。
概述
本示例使用KINOVA Gen3操作符将对象标识并回收到两个容器中。该示例使用了五个工具箱中的工具:
机器人系统工具箱™用于对机械手进行建模和仿真。
Stateflow®用于调度示例中的高级任务并从一个任务到另一个任务。
ROS工具箱™使用用于连接MATLAB到Gazebo。
计算机视觉工具箱™而且深度学习工具箱™用于在Gazebo中使用模拟摄像机进行目标检测。
本示例基于以下相关示例中的关键概念:
利用KINOVA Gen3机械手规划和执行任务和关节空间轨迹演示如何生成和模拟插值关节轨迹从初始移动到所需的末端执行器姿态。
计算机视觉工具箱示例:训练YOLO v2网络进行车辆检测(计算机视觉工具箱)
ROS工具箱的例子:开始与露台和模拟乌龟机器人(ROS工具箱)
凉亭机器人仿真与控制
为KINOVA Gen3机器人启动基于ros的模拟器,并配置与机器人模拟器的MATLAB®连接。
本示例使用一个虚拟机(VM),其中包含可下载的ROS Melodic在这里.如果您以前从未使用过它,请参见开始与露台和模拟乌龟机器人(ROS工具箱).
在虚拟机环境中,虚拟机>设置>硬件>显示,禁用加速3 d图形.
启动Ubuntu®虚拟机桌面。
在Ubuntu桌面,单击露台回收世界图标,开始为这个例子构建的Gazebo世界。
在Gazebo中指定ROS主机的IP地址和端口号,使MATLAB®能够与机器人模拟器通信。对于本例,Gazebo中的ROS主服务器使用的IP地址
192.168.203.131
显示在桌面。调整rosIP
变量。启动ROS 1网络
rosinit
.
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
通过单击图标初始化Gazebo世界后,VM将KINOVA Gen3机械臂加载到一个桌子上,每边都有一个回收箱。为了模拟和控制Gazebo中的机械臂,虚拟机中包含ros_kortexROS软件包,由KINOVA提供。
包使用ros_control控制关节到所需的关节位置。有关使用虚拟机的更多详细信息,请参见开始与露台和模拟乌龟机器人(ROS工具箱)
Stateflow图表
本示例使用状态流图来调度示例中的任务。打开图表以检查内容并跟踪图表执行期间的状态转换。
编辑exampleHelperFlowChartPickPlaceROSGazebo.sfx
图表说明了机械手如何与物体或部件相互作用。它包括基本的初始化步骤,然后是两个主要部分:
确定零件并确定放置位置
拾起并定位执行工作流
有关取放步骤的高级描述,请参见使用状态流的MATLAB取放工作流.
打开和关闭拉手
激活夹持器的命令,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);
移动机械手到指定的姿势
的exampleCommandMoveToTaskConfigROSGazebo
命令功能用于将机械手移动到指定的姿态。
规划
路径规划生成从初始任务到所需任务配置的简单任务空间轨迹trapveltraj
而且transformtraj
.有关规划和执行轨迹的详细信息,请参见利用KINOVA Gen3机械手规划和执行任务和关节空间轨迹.
ROS中的关节轨迹控制器
在生成机器人要跟随的关节轨迹后,exampleCommandMoveToTaskConfigROSGazebo
以所需的采样率对轨迹进行采样,将其打包到联合轨迹ROS消息中,并向KINOVA ROS包中实现的联合轨迹控制器发送动作请求。
检测和分类场景中的对象
的函数exampleCommandDetectPartsROSGazebo
而且exampleCommandClassifyPartsROSGazebo
利用来自机器人的模拟末端执行器摄像机feed,并应用预训练的深度学习模型来检测可回收部件。该模型以一个相机帧作为输入,并输出对象的2D位置(像素位置)和它所需的回收类型(蓝色或绿色垃圾桶)。图像帧上的2D位置被映射到机器人基本帧。
深度学习模型训练:凉亭图像的获取与标注
检测模型使用在Gazebo世界的模拟环境中获得的一组图像进行训练,将两类对象(瓶子和罐子)放置在桌子的不同位置。这些图像是由机器人上的模拟相机获得的,它沿着水平和垂直平面移动,从许多不同的相机视角获得物体的图像。
然后对图像进行标记图片标志(计算机视觉工具箱)app,为YOLO v2检测模型创建训练数据集。trainYOLOv2ObjectDetector
(计算机视觉工具箱)火车模型。要了解如何在MATLAB中训练YOLO v2网络,请参见训练YOLO v2网络进行车辆检测(计算机视觉工具箱).
训练后的模型在机器人处于主位置时,用于对机载摄像机获取的单幅图像进行在线推理。的检测
(计算机视觉工具箱)函数返回检测到的对象及其类的边界框的图像位置,然后用它来查找对象顶部的中心位置。使用一种简单的相机投影方法,假设物体的高度是已知的,将物体的位置投影到世界中,最后作为选择物体的参考位置。与边界框相关联的类决定将对象放置在哪个容器中。
开始选择和放置任务
该仿真使用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(robot,initialRobotJConfig, endEffectorFrame);
指定放置对象的主配置和两个姿势。
协调员。HomeRobotTaskConfig = getTransform(robot, 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);%删除(协调);
观察模拟状态
在执行期间,每个时间点的活动状态在状态流图中以蓝色突出显示。这有助于跟踪机器人在什么时候做什么。您可以单击子系统以查看运行状态的详细信息。
想象《凉亭》中的拾取和放置动作
Gazebo的世界展示了机器人在工作区域移动零件到回收箱。机器人继续工作,直到所有的部件都被安置好。当检测步骤四次没有找到更多的部分时,状态流图退出。
如果比较字符串(答案,“是的”)而协调员。NumDetectionRuns < 4等待没有部件被检测到。。结束结束
完成示例后关闭ROS网络。
rosshutdown
使用NodeURI http://192.168.31.1:51073/关闭全局节点/matlab_global_node_36570
The MathWorks, Inc.版权所有2020