主要内容

使用点云处理和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主机使用172.21.72.160显示。调整rosIP变量基于您的虚拟机。

  • 使用以下命令启动ROS 1网络:rosinit.

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

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

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

拾起并定位任务

拾取和放置工作流在MATLAB中实现,包括基本初始化步骤,然后是两个主要部分:

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

  • 拾起并定位执行工作流

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

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

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

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

一旦机器人访问了所有的扫描姿势,捕获的点云将从相机转换到世界框架使用pctransform(计算机视觉工具箱)并合并成单点云使用pcmerge(计算机视觉工具箱).最终点云根据欧几里德距离使用pcsegdist(计算机视觉工具箱). 然后将生成的点云段编码为碰撞网格(请参见碰撞网格)在RRT路径规划过程中容易识别为障碍物。从点云到碰撞网格的过程在下面一次显示一个网格。

打开和关闭夹持器

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

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

将操纵器移动到指定姿势

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

规划路径在MATLAB中与规划场景一起可视化。

该工作流将在使用RRT Planner和Stateflow for MATLAB的拾取和放置工作流有关RRT计划器的更多信息,请参阅使用RRT拾取和放置操纵器. 对于已知路径无障碍的简单轨迹,可使用轨迹生成工具执行轨迹,并使用操纵器运动模型进行模拟。看见使用KINOVA Gen3操纵器规划和执行任务和关节空间轨迹.

ROS中的关节轨迹控制器

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

检测和分类场景中的物体

功能示例CommandDetectParts示例CommandClassifyParts使用来自机器人的模拟末端效应器深度摄影机馈送来检测可回收零件。因为可以从建筑环境步骤中实现的迭代最近点(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);

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

coordinator.HomeRobotTaskConfig=getTransform(robot,initialRobotJConfig,endEffectorFrame);协调器.PlacingPose{1}=trvec2tform([[0.20.55 0.26]])*axang2tform([0.01 pi/2])*axang2tform([0.10 pi]);协调器.PlacingPose{2}=trvec2tform([[0.2-0.55 0.26]])*axang2tform([0.01 pi/2])*axang2tform([0.10 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:[拾取]计算抓取姿势例如,CommandComputeGrasposgerosgazeBoscene(协调人);%任务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公司。