当您获得本文档时,可至 RVS 开发者社区下载 binpick_runtime.zip 深框抓取教程配套数据。解压后其内容应包括:
-
box 包含了本案例中演示所用的料框点云。
-
data 包含了本案例中所使用的机器人模型以及工具模型,如果您需要其他模型请前往 RVS 软件发布模型网站下载。
说明:若无机器人模型,请联系图漾RVS开发人员进行添加。
-
models 包含了本案中所使用的障碍物的模型以及目标物体的模型相应的抓取策略。
-
pipe_binpick 包含了本案例所使用的离线数据以及 AI 训练的权重及配置文件。
-
collision_binpick_demo.xml 用于深框抓取演示,内部包含 AI 识别、模板匹配、机器人避撞等功能模块。
说明:collision_binpick_demo.dashboard.xml 为相应的 dashboard。
-
generate_binbox.xml 用于生成标准料框模型,适用于常规立方体形状的料框的创建。
说明:generate_binbox.dashboard.xml 为相应的 dashboard 。
-
GenerateGrasp_cloud.xml 用于将目标物体上表面点云生成抓取策略。此时的 tcp 要采用机器人工具末端点。
说明:GenerateGrasp_cloud.dashboard.xml为相应的dashboard。
-
GenerateGrasp_Polydata.xml 用于将目标物体的 polydata 模型与工具模型生成抓取策略。此时的 tcp 要采用机器人法兰盘中心点。
说明:GenerateGrasp_Polydata.dashboard.xml为相应的dashboard。
-
eyetohand_handeye_calib.txt 为本案例的手眼标定结果。
-
ty_color_calib_ps801_207000129939.txt 为本案例相机的参数文件。
-
案例所有使用到的文件均保存在binpick_runtime
说明:如不想调整 XML 中的文件路径。可以将 binpick_runtime 重命名为 runtime 。
注意:本文档所使用 RVS 软件版本为 1.5.559 ,若在使用中出现问题或版本不兼容问题,请及时与我们反馈,发送邮件 rvs-support@percipio.xyz !
运动规划功能介绍
RVS 为深框抓取等应用场景增设了运动规划功能模块,并在该模块中内嵌了避撞(可选)功能,以此保证在机器人不碰撞的情况下完成对目标物的提取。整个模块包含了 6 个专用算子,分别是 MotionplanningResource(运动规划资源管理)算子、ObjectSceneOperator(物品场景操作)算子、CreateBinBox(生成料框)算子、PlanGrasp(规划抓取策略)算子、GenerateGrasp(生成抓取策略)算子、GraspDebug(抓取策略调试)算子。
基础定义介绍
抓取
机器人对检测目标进行抓取或者吸取(或其他方式),这里统一用抓取表示。
说明:下述运动规划功能模块的有关说明均以深框抓取应用场景为例,并且默认使用避撞功能。
料框和标准料框
料框即为盛放检测目标的容器。对于简单的凹槽形式的料框,外形是立方体形状,内凹进去的部分也是立方体形状,RVS 将其定义为标准料框,并为其提供了标准的模型创建方法和定位方法。
创建料框过程详见创建料框模型章节。
抓取目标
被机器人末端工具抓取的对象。每一个抓取目标都有自己的物理模型和体坐标系,在RVS的深框抓取应用中,默认目标在料框中的放置面是其体坐标系的Oxy平面,下述提到的目标长度、宽度、厚度,也默认是目标体坐标系下的x轴、y轴、z轴长度。
抓取目标模型文件
即抓取目标物理模型的 3D 文件,需要转换为 polydata 数据格式提供给 RVS 使用。RVS 使用的抓取目标模型文件,既可以是目标的完整模型文件,也可以是目标的上表面模型文件。当目标厚度较厚时,如果只用目标上表面模型参与避撞运算,可能导致实际抓取时机器人撞到了目标的侧面或者从模型内部穿进去,此时客户必须提供目标的完整数模文件给RVS进行避撞运算;当目标厚度较薄时,RVS 只需要将目标的上表面模型参与避撞运算即可,此时客户无需提供完整模型文件,RVS 可以直接基于目标实物拍摄上表面点云,进行点云处理后即可作为目标的上表面模型。
说明:在仅需要使用目标上表面模型的情况下,客户也可以提供原始数模,原始 3D 模型相比于由点云创建的模型精度更高。
RVS 也可以通过拍摄点云的方式生成完整数模文件,但是精度较低并且步骤繁琐,如有需要可以联系图漾 RVS 开发人员。
坐标系
RVS 运动规划应用中涉及到的坐标系,包含机器人坐标系、相机坐标系、抓取目标的体坐标系、料框的体坐标系、其余障碍物的体坐标系等等。我们在运动规划运算时,需要统一转换成机器人坐标系,所以我们在下文的操作流程中会提到手眼标定、料框定位等操作,目的就是坐标系转换。
注意:机器人坐标系下,机器人自身的姿态表示方法又包含法兰盘坐标表示法、末端工具坐标系等。
另外,上述抓取目标的体坐标系,在使用上表面点云模型或完整点云模型时,模型在 z 轴方向上的中心存在偏移。
抓取位姿态
基于抓取目标的体坐标系,可以定义多组抓取点位,每个抓取点位又可以定义多组抓取角度。一个抓取点位以及一个的抓取角度,即为一个抓取位姿态,在 RVS 中用一个 Pose 表示。RVS 提供了基于目标模型的可视化创建抓取位姿态的方法。
抓取策略
一个抓取策略对应了一组基于该目标模型坐标下的抓取姿态模式,包含预抓位姿态、抓取位姿态、抬升位姿态。如下图所示。
创建抓取策略过程详见生成抓取策略章节。
当使用 RVS 确定了一个抓取位姿态时,通过输入预抓位偏移参数、抬升位偏移参数即可分别获得预抓位姿态、抬升位姿态。其中,预抓位姿态沿着实际检测目标的 z 轴向上偏移。抬升位姿态沿着机器人坐标系的 z 轴向上偏移。实际操作中,机器人法兰盘(或工具末端)先移动到预抓位姿态,然后顺着目标的 z 轴方向移动到抓取位,然后进行吸气或者夹爪等操作,之后带着抓取物竖直向上移动到抬升位,继而进行后续的自定义操作。如下图所示。
检测目标列表
对料框中的实际点云进行坐标转换处理,从深度相机坐标系转到机器人坐标系,然后进行点云处理,最终被检测到的所有目标的姿态列表(PoseList)即为检测目标列表。在 RVS 的检测运算中首先获得的是目标上表面点云的中心位姿,如果需要转换成完整模型的中心位姿,则需要沿着其 Z 轴偏移适当的长度。RVS 检测运算获得的上表面中心位姿的x/y轴的方向定义是随机的,并且当上表面点云被部分遮挡时,该位姿的中心点定位也会不准,为了获得更高的定位精度,建议对上述中心位姿进行模板匹配处理。
更具体的关于是否使用模板匹配的说明,请看如下流程图。
运动规划场景
所指 RVS 进行运动规划运算的虚拟空间,其内部的运动规划运算(包含避撞运算)使用的是机器人坐标系。在 RVS 中,一个运动规划场景对应一个 MotionPlanningResource(运动规划资源)算子,在创建一个运动规划资源时,需要绑定一种抓取目标,并提供该抓取目标的模型文件以及抓取策略文件。
深框抓取流程
机器人建模
当 RVS 机器人数模库中没有所需机器人时,请提供机器人数模文件,并联系图漾开发人员对机器人进行建模。对于负载工具,如吸嘴、吸盘、夹爪等,需要客户自行提供相应的 3D 模型。如果相机需要安装在机器人末端,客户需要自行设计相机支架并提供支架的模型。我们将为您提供图漾相机的数模文件,并提供技术支持和解决方案。
手眼标定
依据相机的安装方式进行手眼标定,详情请见自动拆垛的手眼标定介绍文档。
本案例采用眼在手外(eyetohand)模式,标定结果已保存至 eyetohand_handeye_calib.txt 。
深框抓取主流程
本章节将详细介绍深框抓取的操作流程和搭建XML过程的主要模块。
操作流程
-
加载 collision_binpick_demo.xml 。
-
交互面板如下图所示:
-
启动
:点击后,开始遍历 pipe_binpick/data 文件夹中的离线数据。 -
重置
:重新进行案例演示。点击重置
后,再点击启动
,则从第一张图片重新进行演示。 -
切换图像
:点击后,遍历下一张图片。 -
自动抓取
:勾选后,在单张图片中自动抓取所有可抓取物体。 -
手动抓取
:如没有勾选自动抓取
,则手动点击此按钮时,可在单张图片中按顺序逐个抓取物品。默认:手动抓取。 -
抓取面板
:抓取面板中显示可抓取物品位姿。 -
障碍物
:勾选后在 3D 视图中显示所有障碍物。 -
可抓取物品
:勾选后在 3D 视图中显示所有可抓取物点云。 -
除物品外剩余点云
:勾选后在 3D 视图中显示除物品外剩余点云。 -
模式选择
:抓取策略计算模式。在交互面板中选相应的抓取策略计算模式。-
0:执行(release)模式。
-
1:调试(debug)模式。
-
-
执行演示
:勾选后在 3D 视图中显示执行模式下机器人运动至抓取物品的预抓位、抓取位、抬升位。 -
调试演示
:勾选后,当机器人发生碰撞时,在 3D 视图中显示各策略下机器人模型的碰撞细节。 -
调试
:当模式选择 1(debug)后,点击此按钮开始进入调试模式。 -
调试遍历
:遍历 PlanGrasp 算子生成的所有策略。
-
-
将交互面板上的设置分别为:0:执行(release)模式。勾选
执行演示
复选框,交互面板如下图所示。 -
点击 RVS 运行按钮,此时资源算子和部分算子会进行初始化。如下图所示:
-
点击交互面板中
启动
按钮。触发后,在抓取面板中显示第一张图片中可抓取的物品姿态,此时抓取状态为“X”。 -
默认手动抓取模式。此时点击
手动抓取
,以最优抓取策略抓取第一个目标物体,RVS自动引导机器人执行抓取动作并在 3D 视图中显示。同时,抓取面板
实时显示抓取状态。抓取完成后,状态显示为“O”。 -
若勾选
自动抓取
,则自动抓取所有可抓取物品。 -
当日志中提示“此张图片已无抓取目标,请切换至下一张”,则点击交互面板中的
切换图像
按钮。将切换下一组离线数据进行抓取,循环此操作。 -
若在执行过程中想要重新开始点击
重置
按钮,再次点击启动
,即从 pipe_binpick/data 文件夹中第一张图片重新开始。 -
当日志中出现警告信息(下图红色矩形框),同时机器人停止抓取,说明机器人无可抓策略。
-
此时在交互面板中将计算策略模式设置为1,即调试(debug)模式下,关闭
执行演示
复选框,勾选调试演示
复选框,点击调试
按钮,再多次点击调试遍历
按钮,将依次遍历机器人碰撞细节并在 3D 视图中显示,同时会在日志中显示当前抓取策略碰撞细节的具体信息。 -
上述即为本案例的操作流程。当离线数据文件遍历完成后,可点击交互面板中的
启动
按钮,即可重新进行案例演示。
流程介绍
-
collision_binpick_demo.xml ,即主流程工程文件,如下图所示。
-
资源类算子管理
-
MotionPlanningResource 运动规划资源管理。物体类型文件加载目录,文件夹内需要包含目标模型文件,以及目标物体的抓取策略。
-
SimulatedRobotResource 机器人仿真控制资源。选择相应的机器人模型与工具模型,勾选启用避撞。
说明:若需要 RVS 主动控制该机器人,可替换为相应的机器人控制资源。
-
-
添加避撞物
-
在添加避撞物 Group 中,可加载和创建相应的场景和障碍物。本案例创建了一个 cube 代表桌面模型并作为障碍物添加至场景中,同时加载了料框模型文件作为障碍物添加至场景中。实际项目中根据需要可以自行添加所需障碍物模型。
-
-
设置手眼标定转换参数
-
在
手眼标定结果
算子中粘贴手眼标定结果。 -
在
加载彩色相机标定文件
算子中加载图漾相机的rgb镜头参数文件。
-
-
数据采集与转换
-
数据采集与转换
Group 可直接在算子列表的模板群组(Group XML)
算子库中添加。 -
该 Group 支持不同的模式下的数据获取,同时把获取的数据利用手眼标定结果直接转换至机器人坐标系下。
-
本案例使用眼在手外模式进行转换,离线数据文件夹在数据采集与转换 Group → offline or online Group → offline Group → ReadDirectoryNames 算子中设置。
-
-
避障初始化
-
用于清除上一次的参与避障点云(障碍物)与目标物体。本案例清除了上一次避障点云(障碍物)与目标物体 pipe 。如下图所示。
说明:在第一次运行时因暂无上一次的障碍物,RemoveObstacleFromScene 算子出现警告属于正常。
-
-
AI 识别
说明:根据目标是否堆叠和粘连,判断是否需要AI识别,如需要则还需进行数据采集、标注、训练。请参考自动拆垛案例。
-
AI识别 Group
可直接在算子列表的模板群组(Group XML)
算子库中添加。该 Group 用于进行 AI 推理后将点云进行排序并截取点云列表输出。
-
该 Group 中放置点云切割、 AI 推理、映射图像Mask、点云排序等算子,可根据实际项目进行设置,可参考自动拆垛案例中 AI 推理 部分。本案例在该 XML 已设置完成。
-
-
目标模板匹配
-
目标模板匹配 Group
可直接在算子列表的模板群组(Group XML)
算子库中添加。该 Group 用于将 AI 识别得到的点云列表依次遍历处理并进行模板匹配。-
该 Group 将点云列表依次遍历处理,然后进行模板匹配并将其结果收集起来生成检测目标位姿列表。Group如下图所示。
-
上述 ICP 算子的三个输入端口分别是模板点云、真实上表面点云、真实位姿的推测值。如下图红色矩形框中所示。模板点云可以使用多边形渲染点云算子对目标模型上半部分映射生成。为了提高 ICP 算子的运行效率,真实上表面点云使用的是降采样后的原始点云,降采样后的点云数量要同模板点云的数量保持均衡。真实位姿推测值的生成过程详见点云处理(按需调整)Group。
-
在
点云处理(按需调整)Group
中,首先对目标原始点云做了平面分割预处理,因为本案例中的目标原始点云带有大量侧面和底面信息,而模板点云只有上表面信息,通过平面分割提取上表面信息可以提高 ICP 模板匹配精准度。之后使用最小包围立方体算子处理目标上表面点云获得其中心推测位姿,然后沿着 Z 轴偏移获得模型中心的推测位姿,最后生成推测位姿列表。
-
-
-
-
添加物品
-
该算子将模板匹配获得的检测目标位姿列表添加到运动规划资源中。如下图所示。
-
-
添加避撞点云
-
添加
避撞点云 Group
可直接在算子列表的模板群组(Group XML)
算子库中添加。该 Group 用于从原始点云中去除所有的检测目标点云,然后将所得到的剩余点云作为避撞物添加到运动规划场景中。 -
在
添加避撞点云 Group
中,首先从场景中获取检测目标的模型,然后根据机器人坐标系下的图漾相机安装位姿,使用虚拟相机在相同位姿处对所有目标模型进行点云渲染,获得的渲染点云即可作为检测目标点云。最后将真实点云同这些渲染点云做减法运算,真实点云剩余的部分我们定义为“剩余点云”,最后将这些“剩余点云”转换数据格式后作为避撞物添加到场景中。
-
-
机器人设定位置
-
该算子用于设置每次抓取前机器人在等待位置处的关节值。
-
本案例中该位置如下图所示。
-
-
抓取策略
-
抓取策略 Group
可直接在算子列表的模板群组(Group XML)
算子库中添加。该 Group 用于计算抓取策略,在执行(release)模式下会直接给出避撞后的最佳抓取策略,若切换至调试(debug)模式可查看机器人的碰撞细节。 -
抓取策略 Group 中分为执行(release)模式和调试(debug)模式。
-
交互面板中选择模式为
0 :执行(release)
时,当机器人未发生碰撞时,抓取策略会输出一组预抓位、抓取位、抬升位的关节值,引导机器人运动抓取;当机器人发生碰撞时,规划抓取策略将发生警告提示,PlanGrasp 算子执行失败,触发 failed 端口,如下图所示。实际项目中,该 failed 端口可以触发料框震动等操作。 -
交互面板中选择模式为
1 :调试(debug)
时,当机器人发生碰撞时,勾选调试演示
可视化属性,点击调试
按钮开始调试,点击调试遍历
按钮遍历 PlanGrasp 算子生成的所有策略,同时显示各策略下机器人模型的碰撞细节。
-
-
机器人抓取运动
-
该 Group 将根据上述策略输出的预抓位、抓取位、抬升位关节值,通过 RobotMovement 算子中的 MoveJonit 方式引导机器人运动。如下图所示。
说明:案例中为了体现抓取位置,未连接抬升位关节值,如有需要连接即可。
-
创建料框模型
标准料框模型的创建
操作流程:
-
加载 generate_binbox.xml ,如下图所示。
-
参数设置。本案例采用眼在手外(eyetohand)模式。
-
在
手眼标定结果
算子中粘贴手眼标定结果。 -
在
图漾彩色相机标定文件
算子中加载图漾相机 rgb 镜头参数文件。
-
-
点击 RVS 运行按钮。
-
获取深框底部点云。
-
点击交互面板中
拍照
按钮,3D 视图中将显示深框点云。 -
点击交互面板中
切割深框底部
按钮-
调节所需切割深框底部的cube的大小与位姿。
切割深框底部的立方体
复选框可以设置 cube 的可视化。双击3D 视图中的 cube ,在弹出的 cube 面板中勾选移动坐标,可以设置 cube 的大小与位姿。将深框底部的点云完全包围后,再次点击切割深框底部
按钮,即可获取深框底部点云。
-
-
-
创建深框。
-
在交互面板中设置深框的参数(下图红色矩形框),请参照 CreateBinBox 算子说明文档进行设置。
-
点击交互面板中
创建料框
按钮。勾选料框
,料框坐标
复选框,3D 视图中将显示深框与深框位姿。
-
调节深框模型位姿。观察深框与点云的重合度,通过交互面板中的
调节深框模型位姿
控件调节位置,参数设置完成后,再次点击交互面板中创建料框
按钮,直至深框位置与点云重合度高为准。
-
-
保存深框。
-
在
调节与生成料框
中的生成料框
算子中可以设置创建深框所保存位置与名称。点击交互面板中创建料框
按钮即为保存深框文件。
-
说明:本案例所保存深框的名称为 testbinbox.obj,而后期案例工程中使用的深框名称为 binbox .obj。因为本案例供教学使用,避免学习者在使用过程中因操作不当而导致后续工程出现问题。
非标准料框模型的创建
对于非标准料框,客户需要提供料框模型文件。将料框在工作场景中摆放固定以后,根据其实际位置操控机器人面板使得机器人分别移动到料框的几个角点,直接估算出料框在机器人坐标系下的位姿,然后在RVS中将模型的位姿移至该位置,后续也可以拍摄点云进行比对微调。另外,对于非标准料框,当料框结构相对简单时,也可以通过创建多个 cube 的形式进行建模。
生成抓取策略
创建抓取策略分为两类:
-
第一类是客户的机器人使用法兰盘坐标系,则生成策略时需要导入末端工具数模来辅助操作。
-
第二类是机器人使用末端工具坐标系,则生成策略的时候无需导入末端工具数模文件。
两类均需导入目标的模型文件进行可视化辅助,若无模型文件则需导入目标的上表面点云。
法兰盘坐标系与工具模型生成抓取策略
操作流程:
-
加载 GenerateGrasp_Polydata.xml ,如下图所示。
-
添加工具模型与目标模型。
-
双击打开
初始化工具 Group
,其中生成原点坐标
算子 创建坐标系原点位姿并显示,加载模板点云
加载目标物体的上表面点云。加载物体模型
加载目标模型,加载工具模型
加载工具模型。如下图所示。
-
-
点击 RVS 运行按钮。
-
初始化目标模型与工具模型。
-
点击交互面板中
初始化
按钮,3D 视图中显示坐标系原点与模型。勾选末端工具
复选框在 3D 视图中显示初始工具模型。 -
初始化后,3D 视图显示如下:
-
-
移动工具模型至相应的抓取点。
-
点击交互面板中
调整工具坐标
按钮。-
在交互面板上设置
设置工具模型坐标
控件参数。设置参数完成后。再次点击调整工具坐标
按钮,勾选抓取点工具
复选框打开抓取工具模型可视化,观察工具模型是否移动至相应的抓取位置。重复此操作,直至工具模型移动至抓取点。 -
工具模型移动至抓取点如下图所示:
-
-
-
设置预抓取位置和抓取抬高位置。可查看1.1.7章节中该定义。
-
预抓取位置
:此处参数是相对于目标物体的体坐标系。 -
抓取抬高位置
:此处参数是相对于机器人的基础坐标系。
-
-
设置抓取策略的样本生成方式。
-
在
收集抓取位列表
Group中的 GenerateSamplePose 算子中进行设置。本案例为在原处绕 z 轴旋转12次以生成抓取策略。
-
-
生成抓取策略并移动展示抓取策略。
-
点击交互面板中
生成抓取策略
按钮生成抓取策略。勾选抓取策略
在 3D 视图中显示生成的抓取策略。 -
3D 视图中显示如下:
-
若生成抓取策略不正确,可点击交互面板中
清除抓取策略
按钮清除。 -
点击交互面板中
移动演示抓取策略
按钮可移动展示抓取策略。勾选抓取策略演示
在 3D 视图中的进行抓取策略演示。
-
-
保存抓取策略。
-
在
导出抓取策略
算子中可以设置抓取所保存位置与名称。点击交互面板中保存抓取策略
按钮保存抓取策略。注意:抓取策略的名称只能命名为grasp.json才能被场景资源识别使用。
说明:本案例所保存深框的名称为 test1grasp.json,而后期案例工程中使用的抓取策略名称为 grasp.json。因为本案例供教学使用,避免学习者在使用过程中因操作不当而导致后续工程出现问题。
-
工具末端坐标系与目标上表面点云生成抓取策略
操作流程:
-
加载GenerateGrasp_cloud.xml ,如下图所示。
-
添加目标物体上表面点云
-
双击打开
物体点云初始化
Group,其中生成原点坐标
创建坐标系原点便于查看,加载物体点云
加载目标物体的上表面点云。如下图所示。
-
-
点击 RVS 运行按钮。
-
初始化目标上表面点云。
-
点击交互面板中
初始化
按钮,3D 视图中显示坐标系原点与点云。
-
-
移动末端点 pose 至抓取点。
-
点击交互面板中
调整末端至抓取点
按钮。-
在交互面板上
抓取偏移量设置
控件中设置参数。设置参数完成后。再次点击调整末端至抓取点
按钮,勾选末端抓取点
可观察末端点 pose 是否移动至相应的抓取位置。重复此操作,直至末端点 pose 移动至抓取点。 -
末端点 pose 移动至抓取点如下图所示:
-
-
-
设置预抓取位置和抓取抬高位置。可查看1.1.7章节中该定义。
-
预抓取位
:此处参数是相对于目标物体的体坐标系。 -
抓取抬高位
:此处参数是相对于机器人的基础坐标系。
-
-
设置抓取策略的样本生成方式。
-
在
收集抓取位列表
Group中的 GenerateSamplePose 算子中进行设置。本案例为在原处绕 z 轴旋转12次以生成抓取策略。
-
-
生成抓取策略并移动展示抓取策略。
-
点击交互面板中
生成抓取策略
按钮生成抓取策略,勾选抓取策略
复选框可在 3D 视图中显示生成的抓取策略。如下图所示。
-
若生成抓取策略不正确,可点击交互面板中
清除抓取策略
按钮清除抓取策略。 -
点击交互面板中
移动演示抓取策略
按钮可移动展示抓取策略。 勾选抓取策略演示
复选框可打开展示抓取策略的可视化。
-
-
保存抓取策略。
-
在
导出抓取策略
算子中可以设置抓取所保存位置与名称。点击交互面板中保存抓取策略
按钮保存抓取策略。说明:本案例所保存深框的名称为 test2grasp.json,而后期案例工程中使用的抓取策略名称为 grasp.json。因为本案例供教学使用,避免学习者在使用过程中因操作不当而导致后续工程出现问题。
-