主要内容

拾起并定位工作流在露台使用点云处理和RRT路径规划

设置一个端到端的选择和地点工作流等机器人机械手KINOVA®Gen3。

拾起并定位工作流实现在这个例子可以适应不同的场景中,规划者,仿真平台和对象检测选项。示例所示使用RRT露台使用计划和模拟机器人的机器人操作系统(ROS)。对于其他拾起并定位工作流,见:

概述

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

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

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

  • 图像处理工具箱™计算机视觉工具箱™用于目标检测使用点云处理和模拟深度相机在露台。

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

机器人仿真和控制在露台

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

这个例子使用一个虚拟机(VM)包含ROS旋律可供下载在这里

  • 虚拟机启动Ubuntu®桌面。

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

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

  • 启动ROS 1网络使用rosinit

rosIP =“172.16.34.129”;% ROS-enabled机器的IP地址rosshutdown;rosinit (rosIP, 11311);%初始化ROS连接
初始化全局节点/ matlab_global_node_63627 NodeURI http://172.16.34.1:35153和http://172.16.34.129:11311 MasterURI。

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

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

拾起并定位任务

拾起并定位工作流在MATLAB中实现,由基本的初始化步骤,其次是两个主要部分:

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

  • 拾起并定位执行工作流

的一个实现使用Stateflow安排任务,明白了拾起并定位工作流使用Stateflow MATLAB

扫描环境建设规划场景RRT路径规划

在开始拾起并定位工作之前,机器人通过一组任务的确定规划的场景exampleCommandBuildWorld功能和检测对象来选择使用exampleCommandDetectParts函数。

首先,机器人移动到预定义扫描构成一个接一个地和捕获的一组点云场景使用机载深度传感器。在每个扫描的姿势,当前摄像机构成检索通过阅读相应的ROS转换使用rostf(ROS工具箱)getTransform(ROS工具箱)。扫描提出了可视化如下:

一旦机器人访问所有的扫描动作,捕获的点云从世界坐标系使用相机pctransform(计算机视觉工具箱)和单点云合并使用pcmerge(计算机视觉工具箱)。最后的点云分割是基于欧氏距离pcsegdist(计算机视觉工具箱)。生成的点云段然后编码为碰撞网格(见collisionMesh)很容易识别障碍在RRT路径规划。这个过程从点云网格碰撞一次一个网格所示。

爪的开启和关闭

的命令激活钳子,exampleCommandActivateGripper打开和关闭发送一个动作请求,夹在凉亭中实现。例如,发送一个请求打开夹具,使用以下代码。

[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函数定义了一个RRT计划使用manipulatorRRT对象,它计划路径从最初指定所需的联合配置通过避免碰撞碰撞场景中的对象。生成的路径是先缩短距离然后插入所需的验证。生成一个轨迹,trapveltraj函数是用来分配时间步骤每个插值路径点梯形剖面。最后,与它们相关的次插值路径点所需的采样率(每0.1秒)。生成的轨迹确保机器人移动缓慢的开始和结束时运动接近或放置一个对象。

计划路径在MATLAB可视化以及规划场景。

这个工作流详细检查拾起并定位工作流使用RRT规划师和Stateflow MATLAB的例子。关于RRT规划师的更多信息,请参阅选择和地点使用RRT操纵者。简单的轨迹的路径在哪里知道无障碍,轨迹可以使用执行轨迹生成工具使用机械手运动模型和模拟。看到计划和执行任务——和关节空间轨迹使用KINOVA Gen3操纵者

ROS的关节轨迹控制器

后生成机器人的关节轨迹,例子CommandMoveToTaskConfig函数样本轨迹所需的采样率,包成joint-trajectory ROS消息并发送一个动作请求joint-trajectory控制器中实现KINOVA ROS包。

在现场检测和分类对象

的函数exampleCommandDetectPartsexampleCommandClassifyParts使用机器人的末端执行器模拟深度相机饲料检测可回收部分。因为一个完整的点云的场景是可用的构建环境一步,迭代最近点(ICP)注册算法实现pcregistericp(计算机视觉工具箱)标识的分段点云匹配对象的几何图形,应该选择。

开始拾起并定位的工作流程

这个模拟使用KINOVA Gen3机械手夹连接。

负载(“exampleHelperKINOVAGen3GripperGazeboRRTScene.mat”);rng (0)

初始化应用程序的拾起并定位

设置初始机器人末端执行器的配置和名称的身体。

initialRobotJConfig = (3.5797 -0.6562 -1.2507 -0.7008 - 0.7303 -2.0500 - -1.9053);endEffectorFrame =“爪”;

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

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

运行应用程序一步一步拾起并定位

%任务1:构建世界exampleCommandBuildWorldROSGazeboScene(协调);
搬到扫描姿势1寻找其他配置…现在计划…等到机器人达到所需的配置获取点云1得到相机体式1移动扫描2现在计划…等到机器人达到所需的配置获取点云2得到相机体式2移动扫描3寻找其他配置…现在计划…等到机器人达到所需的配置获取点云3得到相机体式3移动扫描4现在计划…等到机器人达到所需的配置获取点云4得到相机体式4移动扫描5现在计划…等到机器人达到所需的配置获取点云5得到相机的姿势5
%任务2:搬到中心位置exampleCommandMoveToTaskConfigROSGazeboScene(协调员,coordinator.HomeRobotTaskConfig);
现在计划…等到机器人达到所需的配置
%的任务3:检测场景中的对象选择exampleCommandDetectPartsROSGazeboScene(协调);
瓶检测到……能检测到……
%的任务4:选择选择下一个部分remainingParts = exampleCommandPickingLogicROSGazeboScene(协调);
1
remainingParts = = true(挑选)%任务5:计算掌握姿势exampleCommandComputeGraspPoseROSGazeboScene(协调);%任务6:【选择】选择姿势exampleCommandMoveToTaskConfigROSGazeboScene(协调员,coordinator.GraspPose);% 7任务(选择):激活爪exampleCommandActivateGripperROSGazeboScene(协调员,“上”);%的部分已被选择%任务8:[将]将构成exampleCommandMoveToTaskConfigROSGazeboScene(协调员,coordinator.PlacingPose {coordinator.DetectedParts {coordinator.NextPart} .placingBelt});%任务9:[将]禁用爪exampleCommandActivateGripperROSGazeboScene(协调员,“关闭”);%的一部分被放置%选择选择下一个部分remainingParts = exampleCommandPickingLogicROSGazeboScene(协调);%原位置exampleCommandMoveToTaskConfigROSGazeboScene(协调员,coordinator.HomeRobotTaskConfig);结束
现在计划…等到机器人达到所需的配置
爪封闭……
现在计划…等到机器人达到所需的配置
钳子打开……
2
现在计划…等到机器人达到所需的配置
现在计划…等到机器人达到所需的配置
爪封闭……
现在计划…等到机器人达到所需的配置
钳子打开……
现在计划…等到机器人达到所需的配置

% ros拾起并定位应用程序完成后关闭rosshutdown;
关闭全局节点/ matlab_global_node_63627 NodeURI http://172.16.34.1:35153和http://172.16.34.129:11311 MasterURI。

可视化拾起并定位在露台

露台世界显示了机器人在工作区域部分移动到垃圾箱。机器人还在继续工作,直到所有部分被放置。

版权2021年MathWorks公司。