主要内容

拾起并定位工作流在露台使用ROS

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

概述

这个例子中识别和回收对象分成两箱使用KINOVA Gen3操纵者。从五个工具箱的例子使用的工具:

  • 机器人系统工具箱™用于模型和模拟机械手。

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

  • ROS工具箱™使用连接MATLAB露台。

  • 计算机视觉工具箱™深度学习工具箱™用于目标检测在露台使用模拟摄像机。

这个例子是建立在相关关键概念从以下例子:

机器人仿真和控制在露台

开始一个ROS-based模拟器KINOVA Gen3机器人和配置的MATLAB®连接机器人模拟器。

这个例子使用一个虚拟机(VM)包含ROS旋律可供下载在这里。如果你从未使用过它,明白了从露台和模拟TurtleBot开始(ROS工具箱)

  • 在虚拟机环境中,虚拟机>设置>硬件>显示,禁用加速3 d图形

  • 虚拟机启动Ubuntu®桌面。

  • 在Ubuntu桌面,点击露台回收世界图标启动露台世界建造这个例子。

  • 指定的IP地址和端口号ROS大师在露台MATLAB®可以与机器人通信模拟器。对于这个示例,ROS主在露台使用的IP地址192.168.203.131显示在桌面。调整rosIP基于VM的变量。

  • 启动ROS 1网络使用rosinit

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

初始化露台世界通过单击图标后,VM加载KINOVA Gen3机器人手臂放在桌子两边各有一个垃圾桶。模拟和控制机器人手臂在露台,VM包含ros_kortexROS包,它由KINOVA提供。

包使用ros_control控制关节的关节位置。使用VM额外的细节,请参考从露台和模拟TurtleBot开始(ROS工具箱)

Stateflow图表

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

编辑exampleHelperFlowChartPickPlaceROSGazebo.sfx

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

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

  • 拾起并定位执行工作流

的高级描述拾起并定位步骤,明白了拾起并定位工作流使用Stateflow MATLAB

爪的开启和关闭

的命令激活钳子,exampleCommandActivateGripperROSGazebo打开和关闭发送一个动作请求,夹在凉亭中实现。发送一个请求打开夹具,使用以下代码。注意:只是显示的示例代码演示了什么命令。不运行。

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

移动机械手到指定的姿势

exampleCommandMoveToTaskConfigROSGazebo命令函数是用来操纵器移动到指定的姿势。

规划

路径规划生成简单的任务空间轨迹从最初所需的任务配置使用trapveltrajtransformtraj。计划和执行轨迹的更多细节,请参阅计划和执行任务——和关节空间轨迹使用KINOVA Gen3操纵者

ROS的关节轨迹控制器

后生成机器人的关节轨迹,exampleCommandMoveToTaskConfigROSGazebo样品所需的采样率的轨迹,包成joint-trajectory ROS消息和发送一个动作请求joint-trajectory控制器KINOVA ROS包中实现。

在现场检测和分类对象

的函数exampleCommandDetectPartsROSGazeboexampleCommandClassifyPartsROSGazebo使用机器人的末端执行器模拟相机饲料和应用pretrained深度学习模型来检测可回收部分。模型以相机坐标系作为输入和输出的二维位置对象的类型(像素位置)和回收它需要(蓝色或绿色本)。二维位置图像帧映射到机器人基础坐标系。

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

检测模型训练模拟环境中使用一组图像获得在露台世界两个类的对象(瓶,可以)放在表的不同位置。从模拟摄像机获得的图像是车载机器人,它是沿着水平和垂直平面图像从许多不同的相机角度的对象。

然后图像标签使用图片标志(计算机视觉工具箱)应用程序,创建YOLO v2意思检测模型的训练数据集。trainYOLOv2ObjectDetector(计算机视觉工具箱)火车模型。看到火车YOLO v2网络MATLAB意思,明白了火车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 =“爪”;

初始化协调员通过给机器人模型,初始配置,末端执行器的名字。

协调员= exampleHelperCoordinatorPickPlaceROSGazebo(机器人,initialRobotJConfig, endEffectorFrame);

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

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

和可视化仿真运行

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

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

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

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

拾起并定位任务结束

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

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

观察仿真状态

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

可视化拾起并定位在露台

露台世界显示了机器人在工作区域部分移动到垃圾箱。机器人还在继续工作,直到所有部分被放置。当检测步骤四次,没有找到任何部分Stateflow图退出。

如果比较字符串(答案,“是的”)协调员。NumDetectionRuns < 4%等任何部分被检测出来。结束结束

完成后关闭ROS网络的例子。

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

版权2020年MathWorks公司。