主要内容

使用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主机使用192.168.203.131显示在桌面上。调整玫瑰花基于VM的变量。

  • 使用以下命令启动ROS 1网络:罗斯尼特.

罗西普='192.168.203.131';启用ROS的机器%IP地址罗西尼特(罗西普,11311);%初始化ROS连接
ROS_IP环境变量192.168.31.1的值将用于设置ROS节点的播发地址。使用NodeURI初始化全局节点/matlab\u全局节点\u 36570http://192.168.31.1:51073/

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

软件包使用ros_控制控制关节到所需的关节位置。有关使用VM的其他详细信息,请参阅开始使用露台和模拟的高跷机器人(ROS工具箱)

状态流程图

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

编辑示例HelperFlowChart PickPlaceRosGazebo.sfx

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

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

  • 执行挑选工作流程

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

打开和关闭夹持器

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

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

将操纵器移动到指定姿势

这个命令movetotaskconfig命令功能用于将操纵器移动到指定姿势。

计划

路径规划从初始到所需的任务配置生成简单的任务空间轨迹trapveltraj.TransformTraj.。有关规划和执行轨迹的更多详细信息,请参阅使用KINOVA Gen3操纵器规划和执行任务和关节空间轨迹.

ROS中的关节轨迹控制器

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

检测和分类场景中的对象

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

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

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

然后使用图片标识(计算机视觉工具箱)应用程序,为yolo v2检测模型创建培训数据集。trainyolov2objectdetector(计算机视觉工具箱)训练模型。看如何在Matlab中训练Yolo V2网络,见火车yolo v2网络用于车辆检测(计算机视觉工具箱).

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

启动“拾取并放置”任务

此模拟使用Kinova Gen3机械手机器人夹持器已连接。从中加载机器人模型小地毯归档为刚体树对象

装载('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.Flowth.startPickPlace;案件'不'coordinator.Flowth.endPickPlace;删除(coordinator.Flowth)删除(coordinator);结尾

结束挑点任务

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

%coordinator.flowchart.endpickplace;%删除(协调员流程图);%删除(协调员);

观察模拟状态

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

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

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

如果strcmp(答复,“是的”)尽管coordinator.numdetectionRuns <4%等待未检测到的部分。结尾结尾

完成示例后关闭ROS网络。

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

版权所有2020 MathWorks,Inc。