当您获得本文档时,可至 RVS 开发者社区下载 binpick_runtime.zip 深框抓取教程配套数据。解压后其内容应包括:

image-20241213161701060

  • box 包含了本案例中演示所用的料框点云。

  • group 包含了常用的Group。

  • pipe_binpick 包含了本案例所使用的离线数据以及 AI 训练的权重及配置文件。

  • robot_data 包含了本案例中所使用的机器人模型以及工具模型,如果您需要其他模型请前往机器人模型库中下载。

    说明:若无机器人模型,请联系图漾RVS开发人员进行添加。

  • scene_files 包含了本案中所使用的障碍物模型以及目标物体的点云及其相应的抓取策略。

  • collision_binpick_demo.rvs 用于深框抓取演示,内部包含 AI 识别、模板匹配、机器人避撞等功能模块。

说明:如不想调整 binPickDemo 中的文件路径。可以将 binpick_runtime 重命名为 runtime 。

注意:本文档所使用 RVS 软件版本为 1.8.268 ,若在使用中出现问题或版本不兼容问题,请及时与我们反馈,发送邮件 rvs-support@percipio.xyz !

运动规划功能介绍

基础定义介绍

抓取

机器人对检测目标进行抓取或者吸取(或其他方式),这里统一用抓取表示。

说明:下述运动规划功能模块的有关说明均以深框抓取应用场景为例,并且默认使用避撞功能。

料框和标准料框

料框即为盛放检测目标的容器。对于简单的凹槽形式的料框,外形是立方体形状,内凹进去的部分也是立方体形状,RVS 将其定义为标准料框,并为其提供了标准的模型创建方法和定位方法。

抓取目标

被机器人末端工具抓取的对象。每一个抓取目标都有自己的物理模型和体坐标系,在RVS的深框抓取应用中,默认目标在料框中的放置面是其体坐标系的 Oxy 平面,下述提到的目标长度、宽度、厚度,也默认是目标体坐标系下的x轴、y轴、z轴长度。

抓取目标模型点云

本案例中提供抓取模板模型点云。RVS 支持 polydata 数据格式进行模型点云制作,详细操作步骤请查阅制作模板点云工具。

RVS 使用的抓取目标模型文件,既可以是目标的完整模型文件,也可以是目标的上表面模型文件。当目标厚度较厚时,如果只用目标上表面模型参与避撞运算,可能导致实际抓取时机器人撞到了目标的侧面或者从模型内部穿进去,此时客户必须提供目标的完整数模文件给RVS进行避撞运算;当目标厚度较薄时,RVS 只需要将目标的上表面模型参与避撞运算即可,此时客户无需提供完整模型文件,RVS 可以直接基于目标实物拍摄上表面点云,进行点云处理后即可作为目标的上表面模型。

RVS 也可以通过拍摄点云的方式生成完整数模文件,但是精度较低并且步骤繁琐,如有需要可以联系图漾 RVS 开发人员。

坐标系

RVS 运动规划应用中涉及到的坐标系,包含机器人坐标系、相机坐标系、抓取目标的体坐标系、料框的体坐标系、其余障碍物的体坐标系等等。我们在运动规划运算时,需要统一转换成机器人坐标系,所以我们在下文的操作流程中会提到手眼标定,目的就是坐标系转换。

注意:机器人坐标系下,机器人自身的姿态表示方法又包含法兰盘坐标表示法、末端工具坐标系等。

另外,上述抓取目标的体坐标系,在使用上表面点云模型或完整点云模型时,模型在 z 轴方向上的中心存在偏移。

抓取策略

一个抓取策略对应了一组基于该目标模型坐标下的抓取姿态模式,包含预抓位姿态、抓取位姿态。

实际操作中,机器人法兰盘(或工具末端)先移动到预抓位姿态,然后顺着目标的 z 轴方向移动到抓取位,然后进行吸气或者夹爪等操作,继而进行后续的自定义操作。如下图所示。

image-20241213173825233

深框抓取流程

机器人建模

当 RVS 机器人模型库中没有所需机器人时,请提供机器人数模文件,并联系图漾开发人员对机器人进行建模。对于负载工具,如吸嘴、吸盘、夹爪等,需要客户自行提供相应的 3D 模型。如果相机需要安装在机器人末端,客户需要自行设计相机支架并提供支架的模型。我们将为您提供图漾相机的数模文件,并提供技术支持和解决方案。

手眼标定

依据相机的安装方式进行手眼标定,详情请见手眼标定工具文档。

本案例采用眼在手外(eyetohand)模式,标定结果已保存至 pipe_binpick/eyetohand_handeye_calib.txt

深框抓取主流程

本章节将详细介绍深框抓取的操作流程和搭建工程过程的主要模块。

操作流程

  1. 加载 collision_binpick_demo.xml 。

    • 交互面板如下图所示:

    image-20241105144128621

    • 自动抓取:勾选后,在单张图片中自动抓取所有可抓取物体。

    • 单次触发:点击后,遍历下一张图片。

    • 手动抓取:如没有勾选自动抓取,则手动点击此按钮时,可在单张图片中按顺序逐个抓取物品。

    • 工具索引:输入 0/1/2 切换不同的工具。

    • 可抓物:勾选后在 3D 视图中显示所有可抓取物点云。

    • 障碍物:勾选后在 3D 视图中显示所有障碍物。

    • 碰撞点位:勾选后在 3D 视图中显示碰撞点位。

    • 抓取面板:显示可抓物类型、名称、坐标与抓取状态。

  2. 点击 RVS 运行按钮,此时资源算子和部分算子会进行初始化。如下图所示:

    image-20241210152333371

  3. 打开 RVS_AI_Center 软件启动 AI 推理服务。

    image-20241210152838449

  4. 点击交互面板中单次触发按钮。触发后,在抓取面板中显示第一张图片中可抓取的物品姿态,此时抓取状态为“-”。

    image-20241210153012973

  5. 默认手动抓取模式。此时点击手动抓取,以最优抓取策略抓取第一个目标物体,RVS自动引导机器人执行抓取动作并在 3D 视图中显示。同时,抓取面板实时显示抓取状态。抓取完成后,状态显示为“√”。

    image-20241210153102706

  6. 若勾选自动抓取,则自动抓取所有可抓取物品。

    image-20241210155448505

  7. 当日志中提示“在场景资源 scene_files/graspObjects 中,没找到任何有效抓取目标。”,则点击交互面板中的单次触发按钮。将切换下一组离线数据进行抓取,循环此操作。

    image-20241210155535400

  8. 当日志中提示“无法为抓取类型 objectA 找到抓取解,碰撞信息请查看场景资源算子面板->运动规划页面。”,同时机器人停止抓取,说明机器人无可抓策略。可右击场景资源算子打开算子面板,查看碰撞信息。

    image-20241210162214624

  9. 打开场景资源面板进入运动规划界面,点击结果说明即可在3D视图中查看碰撞细节。

    image-20241210162821604

  10. 上述即为本案例的操作流程。点击交互面板中的单次触发按钮,可循环遍历pipe_binpick/data文件夹中的数据。

流程介绍

  1. collision_binpick_demo.rvs ,即主流程工程文件,如下图所示。

    image-20241211100011016

  2. 资源类算子管理

    • 场景资源用于管理可抓物、障碍物和运动规划。右键点击算子并选择算子面板即可打开场景资源面板。对应的可抓物、障碍物和运动规划界面将在后续文档中详细介绍。

      image-20241211110302593

    • 机器人仿真控制资源。用于加载机器人和工具模型。在参数面板中,设置机器人模型文件、工具模型文件等参数。

      image-20241211111049308

    • 图漾相机仿真资源。用于加载图漾相机拍摄的离线数据。在参数面板中,设置目录、深度图标定文件、彩色图标定文件等参数。

      image-20241211111533989

  3. 添加避撞物

    • 右键点击场景资源算子并选择算子面板以打开场景资源面板。在障碍物界面中,通过侧边栏选择指定的障碍物按钮,添加所需的场景和障碍物模型。

    • 在本案例中,创建了一个立方体作为桌面模型、一个料框模型,以及一个用于放置机器人的圆柱体。

    • 在实际项目中,可以根据需要自行添加所需的障碍物模型。

      image-20241211134956784

    • 创建完成后,设置障碍物是否启用避障功能,然后点击应用以完成障碍物配置。

      image-20241211135016080

  4. 设置手眼标定转换参数

    • 图漾相机采集器算子输出离线数据的点云、彩色图、彩色图标定参数。

    • 添加Load算子加载手眼标定结果:

      • 算子名称 →加载手眼标定结果

      • 类型 → pipe_binpick/eyetohand_handeye_calib.txt

      image-20241211144914848

    • 创建一个的新的 Group 用于将图漾相机拍摄的点云转换至机器人坐标系下:Group名称 →点云转换至机器人坐标系。

      • TyCameraAccess 点云彩色图标定参数连接至点云转换至机器人坐标系Group。

      • 加载手眼标定结果坐标连接至点云转换至机器人坐标系Group,将端口名修改为rgb2robot

        image-20241211155935433

    • 点云转换至机器人坐标系Group中 导入group/眼在手外坐标转换 Group。

      • 彩色图标定参数rgb2robot连接至眼在手外坐标转换Group 同名端口。

        image-20241211160002536

    • 点云转换至机器人坐标系Group中添加元素空间变化算子,将点云利用手眼标定结果转换至机器人坐标系下。

      • 算子名称→CloudToRobot

      • 类型 → 点云

      • 点云 → 可视

    • 算子连接如下图所示:

      image-20241211155845246

    • 运行 RVS,触发 Trigger 算子查看点云转换结果。

      image-20241211160319983

  5. 添加场景点云

    • 添加立方体切割算子框选出场景点云。

    • 右击算子,打开立方体裁剪面板。点击加载点云,拖动立方体进行裁剪。具体使用方法请参考 CropboxSegment 立方体切割在线文档。 image-20241212141027317

    • 切割完成后,使用障碍物操控算子中添加场景点云类型将切割后点云添加至障碍物中。算子连接如下图所示:

      image-20241212141106467

    • 运行 RVS 后,触发 Trigger 算子。在场景资源面板中查看场景点云是否已添加至障碍物中。如果没有显示,可以点击更新

      image-20241212141307923

  6. AI 识别

    说明:根据目标是否堆叠和粘连,判断是否需要AI识别,如需要则还需进行数据采集、标注、训练。请参考自动拆垛案例。

    • 导入 group 文件夹中AI推理分割点云(GPU版本)Group 。该 Group 用于进行 AI 推理后将点云进行排序并截取点云列表输出。算子连接如下图所示:

    image-20241212144442405

    • 该 Group 中放置 AI 推理映射图像Mask 等算子,可根据实际项目进行设置。

      • 设置 AI 推理分割点云 group 中 AI推理 算子参数:

        • 服务端 IP 地址→127.0.0.1

        • 服务端端口号 → 2024

        • 模型序号→0

        • 识别结果图像→可视

      image-20241212144838854

    • 打开 RVSAI,进入推理服务界面。

      • 添加 MaskRCNN 网络,设置参数:

        • TCP 服务端口 → 2024

        • 模型名 → BinPick

        • 运行设备 → cuda 0 (根据实际配置进行设置)

        • 分数阈值 → 0.8

        • 模型文件 → pipe.mask(将 .mask 压缩文件移动至 /rvs_ai_gpu/AILibrary)

          image-20241212145059829

    • 点击RVS_AI_Center 中开始按钮启动AI推理服务,运行 RVS,触发Trigger算子。

      image-20241212145258140

      • 在 3D 视图中可查看推理所得的 pipe 点云列表。

        image-20241212145450963

  7. 点云预处理

    • 导入 group 文件夹中点云预处理Group,算子连接如下图所示:

      image-20241212151401539

    • 该 Group 中放置 点云过滤列表排序降采样点云切割等算子,用于对抓取目标的点云进行预处理。可以根据实际项目需求进行设置。

      image-20241212151522945

      • 点云去重:去除映射后点云列表中的重复数据。

        image-20241212155154121

      • Z向排序:按 Z 轴方向对点云进行排序。

      • 提取前四个:从排序后的点云中提取前四个点云。

        image-20241212155246152

      • 降采样:减少点云数据量,提高处理效率。

        image-20241212155308569

      • 探查平面:检测并识别点云中的平面中心点坐标。

        image-20241212155328185

      • 平面切割:对排序后的前四个点云进行切割处理,用于后续添加可抓取物。

        image-20241212155344805

      • 初始化参考位姿:设置初始的参考位姿(0.000 0.000 -18.000 0.000 180.000 0.000)。用于后续寻找物品时,将模板物品表面抓取点朝 -Z 轴方向平移 18,使 Z 轴朝下,使得抓取物 Oxy 平面与实际物体 Oxy 平面平行。

  8. 寻找物品并添加

    • 添加可抓物操控算子,用于对抓取物进行模板匹配,找到抓取点。

      • 算子名称 → 可抓物操控 - 类型 → 寻找物品 - 初始位 - 位置距离筛选阈值 → 0.1 - 初始位 - 最大相关点距离 → 15 - 初始位 image-20241212170920488

             运行RVS,触发Trigger算子。点击`场景资源面板`查看可抓物坐标。
        
             ![image-20241212171323308](images/image-20241212171323308.png)
        
  9. 是否自动抓取

    添加、两个触发器算子至算子图。

     - `或`:将两条控制信号连接在一起,以便在满足任一条件时触发后续动作。
     - 第一个`触发器`(是否自动抓取):用于控制自动抓取,当`激活`属性设置为`是`时,触发后续算子,实现自动抓取功能。
     - 第二个`触发器`(手动抓取):用于实现手动抓取,当`是否自动抓取`的`激活`属性设置为`否`时,不触发后续算子,此时通过触发`手动算子`进行单次触发。
    
       ![image-20241213112514274](images/image-20241213112514274.png)
    
  10. 机器人设定位置

    • 机器人运动控制工具算子用于设置每次抓取前机器人在等待位置处的关节值。

      • 类型 → 移动关节

      • 关节 → 89.954 5.730 -89.954 5.730 -89.954 5.730

        image-20231201151216154

    • 运行RVS,查看3D 视图中机器人姿态。

      image-20241213134923885

  11. 规划抓取策略

    • 添加可抓物操控算子,用于规划抓取策略。

      • 算子名称 → 规划抓取策略

      • 品类名 → objectA

      • 类型 → 规划抓取策略

        image-20241213135729280

    • 打开场景资源,进入运动规划界面,设置参数:

      • 末端关节旋转角最小值:-1.57

      • 末端关节旋转角最大值:1.57

      • 其它关节旋转角最小值:-1.57

      • 其它关节旋转角最大值:1.57

      • 碰撞裕度:0.004

      • 抓取点碰撞远离高度:0.012

        image-20241213140643559

    • 运行RVS,在场景资源面板运动规划中查看碰撞细节,显示OK表示没有发生碰撞,可正常抓取。

      image-20241213140758559

      • 规划抓取策略算子变为黄色,且日志中显示“无法为抓取类型 objectA 找到抓取解,碰撞信息请查看场景资源算子面板->运动规划页面。”,可根据结果说明进行抓取策略碰撞细节分析。

      image-20241213140930657

  12. 机器人抓取运动

    • 添加机器人运动控制算子,根据上述输出的抓取策略,通过移动关节列表引导机器人运动。

      • 算子名称 →机器人关节运动、

      • 类型 → 移动关节列表

        image-20241213142044746

    • 运行RVS,在3D 视图中查看效果。

      zqcl

  13. 单次采图抓取所有可抓物

    当前功能是采集一张图像并抓取排序后的第一个可抓取物体。通过连接镜像端口,可以实现单次采集图像并抓取图中所有可抓取的物体。

    • 机器人关节运动结束端口连接至MirrorOutput,将MirrorInput连接至算子。算子连接如下图所示:

      image-20241213145430886

    • 运行 RVS ,在3D 视图中查看机器人抓取运动规划。

      zhuqu

  14. 抓取工具切换

    添加机器人操作工具,使用更换末端工具类型,根据切换索引,可直接切换抓取工具。具体功能实现请参考机器人操作工具在线文档。

    image-20241213150434279

    至此完整的Binpick流程已完成,完整的 RVS 已提供在binpick_runtime/ collision_binpick_demo.rvs 路径下。

    image-20241213150721838

交互面板创建

交互面板中的工具可以与算子图中算子属性的曝光和输出进行绑定,输入工具可以快速修改算子属性参数,输出工具可以快速查看算子的输出结果。

编辑交互面板

  • 右击交互面板,选择解锁,此时交互面板进入编辑状态

添加输入工具的 复选框按钮等至交互面板中

  • 自动抓取→复选框

    • 在算子图中找到是否自动抓取,在属性面板中将激活曝光light打开

    • 右击复选,选择显示控件面板

    • 在曝光参数中选择 MainGroup/深框抓取demo/是否自动抓取参数框,点击绑定icon按钮

    • 点击确定,该算子参数与该控件绑定成功

  • 单次触发→按钮

    • 在算子图中找到Trigger,在属性面板中将触发器曝光light打开

    • 右击按钮,选择显示控件面板

    • 在曝光参数中选择 MainGroup/深框抓取demo/Trigger参数框,点击绑定icon按钮

    • 点击确定,该算子参数与该控件绑定成功。

  • 手动抓取→按钮

    • 在算子图中找到手动抓取,在属性面板中将触发器曝光light打开

    • 右击按钮,选择显示控件面板

    • 在曝光参数中选择 MainGroup/深框抓取demo/手动抓取参数框,点击绑定icon按钮

    • 点击确定,该算子参数与该控件绑定成功。

  • 工具索引 → 标签 + 数码管

    • 双击”label”,修改名称为“工具索引:”

    • 在算子图中找到ChangeRobotTool,在属性面板中将激活曝光light打开

    • 右击数码管,选择显示控件面板

    • 在曝光参数中选择 MainGroup/深框抓取demo/ChangeRobotTool参数框,点击绑定icon按钮

    • 点击确定,该算子参数与该控件绑定成功。

  • 抓取机器人:标签+复选框

    • 双击”label”,修改名称为“抓取机器人”

    • 在算子图中找到 SceneResource 算子,在属性面板中将抓取机器人曝光light打开

    • 右击复选框,选择显示控件面板

    • 在曝光参数中选择 MainGroup/Resource/SceneResource 参数框,点击绑定icon按钮

    • 点击确定,该算子参数与该控件绑定成功

  • 可抓物、障碍物、碰撞点位与抓取机器人配置一致。

  • 抓取面板:直接添加即可。

    交互面板配置如下图所示:

    image-20241213160925207

生成抓取策略

  1. 点击菜单栏中create_cloud_model_resized 打开制作点云模板界面。

    image-20241213165548654

  2. 点击 image-20241018123822680进入点云修改界面。点击 open_file_resized 加载 objectA.pcd。

    image-20241213165807014

  3. 点击 image-20241030134533972进入添加抓取坐标界面。

    image-20241213170054533

  4. 点击 image-20241030134450994 添加一组抓取坐标,调整坐标移动至物体上表面。

    image-20241213172715939

  5. 右击抓取坐标,选择添加变换坐标,弹出添加变换坐标面板。

    • 勾选绕Z轴

    • -RZ → -360°

    • 步长 →90°

    • 预抓取坐标偏移 → Z →-100

    image-20241213172924793

  6. 添加后在视图中查看抓取策略。

    image-20241213173034604

  7. 点击image-20241030134801795可将抓取策略导出。

    image-20241213173137454