主要内容

使用点云处理和RRT路径规划的露台取放工作流程

为KINOVA®Gen3这样的机器人机械手设置端到端取放工作流程。

在本例中实现的拾取和放置工作流可以适用于不同的场景、规划者、模拟平台和对象检测选项。这里显示的示例使用RRT规划并使用机器人操作系统(ROS)在Gazebo中模拟机器人。有关其他取放工作流程,请参见:

概述

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

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

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

  • 图像处理工具箱™计算机视觉工具箱™利用点云处理和模拟景深相机进行目标检测。

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

凉亭机器人仿真与控制

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

本示例使用可下载的虚拟机(VM)。看到开始使用露台和模拟的高跷机器人(ROS工具箱)工具箱(ROS)的例子。

  • 启动Ubuntu®虚拟机桌面。

  • 在Ubuntu桌面上,单击露台回收世界-深度传感图标启动为本例构建的露台世界。

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

  • 启动ROS 1网络松香

rosIP =“172.21.72.160”%启用ros的机器的IP地址rosshutdown;rosinit(rosIP,11311);初始化ROS连接
使用NodeURI http://172.21.72.67:58523/初始化全局节点/matlab_global_node_23379

通过点击图标初始化露台世界后,VM将KINOVA Gen3机器人手臂加载到一张桌子上,桌子两边各有一个回收箱。为了在凉亭中模拟和控制机器人手臂,虚拟机包含ros_kortexKINOVA提供的ROS包。

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

拾起并定位任务

Pick-and-Place工作流是在MATLAB中实现的,由基本的初始化步骤组成,接下来是两个主要部分:

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

  • 拾起并定位执行工作流

有关使用Stateflow计划任务的实现,请参见MATLAB中使用Stateflow的拾取和放置工作流

扫描环境,为RRT路径规划器建立规划场景

在开始拾取和放置工作之前,机器人要通过一系列任务来识别规划场景exampleCommandBuildWorld函数并使用示例CommandDetectParts函数。

首先,机器人一个接一个地移动到预定义的扫描姿势,并使用车载深度传感器捕获场景的一组点云。在每个扫描姿势下,通过使用ROS读取相应的ROS变换来检索当前相机姿势rostf(ROS工具箱)getTransform(ROS工具箱).扫描姿势如下图所示:

一旦机器人访问了所有的扫描姿势,捕获的点云将从相机转换到世界框架使用pctransform(计算机视觉工具箱)并合并成单点云使用pcmerge(计算机视觉工具箱).最后利用欧几里得距离对点云进行分割pcsegdist(计算机视觉工具箱). 然后将生成的点云段编码为碰撞网格(请参见collisionMesh),以便在RRT路径规划时容易识别为障碍。从点云到碰撞网格的过程如下图所示。

打开和关闭夹具

激活夹持器的指令,exampleCommandActivateGripper,发送打开和关闭Gazebo中实现的夹持器的动作请求。例如,要发送打开夹持器的请求,使用以下代码。

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

将操纵器移动到指定姿势

大部分的任务执行包括指令机器人在不同的指定姿态之间移动。的exampleHelperMoveToTaskConfig函数使用manipulatorRRT对象,它通过避免与场景中指定的碰撞对象发生碰撞来规划从初始到期望的关节配置的路径。结果路径首先被缩短,然后在期望的验证距离内插。为了生成轨迹trapveltraj函数用于为遵循梯形轮廓的每个内插路径点分配时间步长。最后,路点及其相关时间被插值到所需的采样率(每0.1秒)。所生成的轨迹确保机器人在接近或放置物体时,在运动的开始和结束时移动缓慢。

在MATLAB中对规划的路径和规划场景进行可视化。

该工作流将在基于MATLAB的RRT Planner和Stateflow的拣选和放置工作流的例子。有关RRT规划器的更多信息,请参见使用操作器的RRT进行拾取和放置.对于已知无障碍物的更简单的轨迹,可以使用轨迹生成工具执行轨迹,并使用机械手运动模型进行仿真。看到使用KINOVA Gen3操纵器规划和执行任务和关节空间轨迹

ROS中的关节轨迹控制器

生成机器人要跟随的关节轨迹后例子CommandMoveToTaskConfig函数以期望的采样率对轨迹进行采样,将其封装到关节轨迹ROS消息中,并向KINOVA ROS包中实现的关节轨迹控制器发送动作请求。

检测和分类场景中的物体

的函数示例CommandDetectPartsexampleCommandClassifyParts使用来自机器人的模拟末端效应器深度摄影机馈送来检测可回收零件。因为可以从构建环境步骤中实现的迭代最近点(ICP)配准算法pcregistericp(计算机视觉工具箱)确定哪些分段点云与应拾取的对象几何体匹配。

启动取放工作流程

这个模拟使用KINOVA Gen3机械手带有一个夹持器。

负载('ExampleHelperKinovagen3GrippergeZebortScene.mat');rng (0)

初始化取放应用程序

设置初始机器人配置和末端效应器主体的名称。

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

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

coordinator = exampleHelperCoordinatorPickPlaceROSGazeboScene(机器人,initialRobotJConfig, endEffectorFrame);

指定拾取和放置协调器属性。

协调员。HomeRobotTaskConfig = getTransform(机器人,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]);

一步一步地运行取放应用程序

%任务1:构建世界exampleCommandBuildWorldROSGazeboScene(协调);
移动到扫描姿势1现在计划…拍摄点云1拍摄姿态1移动到扫描姿态2现在规划…等待机器人达到期望的配置捕获点云2获取相机姿态2移动到扫描姿态3现在规划…等待机器人达到期望的配置捕获点云3拍摄相机姿态3移动到扫描姿态4现在规划…等待机器人达到期望的配置捕捉点云4获取相机姿态4移动到扫描姿态5现在规划…等待机器人达到期望的配置。捕获点云5
任务2:移动到主位置示例CommandMoveToTaskConfigOverGazeBoscene(协调器,协调器.HomeRobotTaskConfig);
现在正在计划…等待机器人达到所需配置
任务3:在场景中检测要挑选的对象exampleCommandDetectPartsROSGazeboScene(协调);
瓶检测到……能检测到……
任务4:选择要选择的下一部分remainingParts = exampleCommandPickingLogicROSGazeboScene(协调);
1
剩余部分==真任务5:[拣选]计算抓握姿势exampleCommandComputeGraspPoseROSGazeboScene(协调);任务6:[捡球]移动到捡球姿势exampleCommandMoveToTaskConfigROSGazeboScene(协调员,coordinator.GraspPose);任务7:[拣选]激活夹持器exampleCommandActivateGripperROSGazeboScene(协调员,“上”);%部分已选定任务8:[放置]移动到放置姿势示例CommandMoveToTaskConfigOverGazeBoscene(协调人,...coordinator.PlacingPose{coordinator.DetectedParts{coordinator.NextPart}.placingBelt});任务9:[放置]关闭夹持器exampleCommandActivateGripperROSGazeboScene(协调员,“关闭”);%部分已放置选择要选择的下一部分remainingParts = exampleCommandPickingLogicROSGazeboScene(协调);结束
现在正在计划…等待机器人达到所需配置
爪封闭……
现在正在计划…等待机器人达到所需配置
钳子打开……
2
现在正在计划…等待机器人达到所需配置
爪封闭……
现在正在计划…等待机器人达到所需配置

钳子打开……
%当取放应用程序完成时关闭ros罗斯赫顿;
使用NodeURI关闭全局节点/matlab\u全局节点\u 23379http://172.21.72.67:58523/

设想在凉亭的拾取和放置行动

露台世界展示了机器人在工作区域移动零件到回收箱的过程。机器人继续工作,直到所有零件都放置好。

版权所有2021年MathWorks公司。