钢筋打标

本节提供钢筋打标方案的使用指导,该方案概览如下。

工件

有序紧致的单捆钢筋,无明显反光,且点云质量较好

载具

传送装置

工作距离

1200~1500 mm

技术指标

识别定位精度:±3 mm

识别成功率:大于 99%

视觉系统耗时:4s 以内

方案介绍

在企业交付钢筋给客户时,每捆钢筋需要粘打标签以显示钢筋的钢种、规格、长度等信息,此环节称为钢筋打标。根据每捆钢筋端面的标签个数,钢筋打标可分为单标签打标(打一个标签)和双标签打标(打两个标签)。

钢筋打标方案使用深度学习识别单捆来料的钢筋,并从端面中找到适合的打标位姿,引导机器人完成打标,并输出钢筋计数。钢筋打标方案可拆分为以下工程:

工程

说明

Mech-Vision

Vis-单标签-钢筋打标

确定在钢筋端面中心打单个标签的位置

Vis-单标签-脱落判断

打标后检测单标签是否脱落

Vis-双标签-首次打标

确定在钢筋端面中心打双标签(左右各一个)的位置

Vis-双标签-脱落判断

打标后检测双标签是否脱落

Vis-双标签-左侧重新打标

若检测到左侧标签脱落,需要补充左侧标签

Vis-双标签-右侧重新打标

若检测到右侧标签脱落,需要补充右侧标签

Mech-Viz

Viz-钢筋打标

引导机器人(携带打标工具和标签)在钢筋的端面中心打标签(单标签或双标签)

除上述工程外,本方案还提供单独计数界面,用以显示识别钢筋的图片和数量。用户可以确认并修改钢筋数量(修改后的数量暂不可发送)。

下文将从适用场景、技术指标方面介绍该方案。

适用场景

本节将从工件、载具、工作距离三个方面介绍该方案的适用场景。

工件

钢筋打标方案对工件的适用情况如下表所示。

工件特征

适用情况

图示

来料形式

  • 适用于有序的单捆钢筋捆来料

  • 适用于识别钢筋端面

icon_1

  • 不适用于钢筋卷来料

  • 不适用于识别钢筋表面

icon_2

形状尺寸

钢筋直径在 8~40 mm 范围内

反光性/点云质量

以适应轻微反光工件

icon_3

钢筋端面点云不能有明显缺失

icon_4

码放方式

钢筋捆捆扎紧致,端面整齐。且每根钢筋之间间距在 10 mm 以内为宜

载具

载具特征

适用情况

载具类别

传送装置

光照条件

光照特征

适用情况

环境光

钢筋端面无阳光直射

投光

钢筋打标方案需用到深度学习中的目标检测,需保证 2D 图清晰,如果场景太暗则需要投光

技术指标

钢筋打标方案的技术指标如下:

  • 识别定位精度:±3 mm。

  • 识别成功率:大于 99%。

  • 视觉系统耗时:4 s 以内。

注解

视觉系统耗时指从相机采集图像至输出物体位姿所用的时间。

方案规划

项目布局

工作站布局

项目方案的 Mech-Viz 工程中的工作站布局如下图所示。

../../../_images/viz_workstation_layout.png

在上图中,1 表示来料输送线平台,箭头方向为来料方向;2 表示取钉台;3 表示取标台;4 表示相机安装位置。

其工作流程如下:

  1. 钢筋捆经传送带到达拍照位置后,上位系统向机器人传递相关信息;机器人再将打标数量(单标/双标)传递给视觉系统,触发相机拍照。

  2. 视觉识别定位,向机器人传递打标位置和钢筋数量信息。

  3. 机器人携带打标钉和标签至打标位置进行打标作业。

  4. 打标完成后,机器人回到原点,触发相机拍照判断标签是否脱落。

    • 视觉系统返回标签脱落的结果,如果标签未脱落则进行下一个循环。

    • 如果标签脱落则机器人触发相机拍照进行补标。

硬件组成

推荐型号

说明

相机

PRO M

Eye-To-Hand,推荐工作距离为 1200~1500 mm

工控机

标准机型 - 无GPU

(Q6AMV-B-1A1)

处理器:CPU I5-12400

内存:16G DDR4

硬盘:256G SSD

电源:DC24V 7.5A

系统:正版 Windows 10 21H1 版本

WIFI 模块

机器人夹具

常用夹具包括单标签打标夹具和双标签打标夹具。需根据现场方案决定夹具类型,一般推荐使用双标签打标夹具,其适用性更强。

单标签打标夹具

装夹说明: 机器人夹具携带打标钉和标签,利用打标钉将标签焊接在钢筋端面上。

如下图所示,左图为夹具左视图;右图为夹具仰视图。

右图中 1 为吸盘,吸取携带标签;2 为打标头,携带打标钉;3 为相机;夹具 TCP 为打标钉。

../../../_images/rebar_marking_clamps_1.png

双标签打标夹具

装夹说明: 机器人夹具携带打标钉和标签,利用打标钉将标签焊接在钢筋端面上。

如下图所示,左图为夹具正视图;右图为夹具仰视图。

夹具 TCP 为左打标头和右打标头。右图中 1 为打标头,携带打标钉;2 为吸盘,吸取携带标签。左右打标头和吸盘对称。

../../../_images/rebar_marking_clamps_2.png

夹具模型注意事项

  • 需将夹具模型转换为 OBJ 格式进行碰撞检测,如下图所示。

  • 为了防止打标时标签和打标点周围的钢筋发生碰撞,需在实际夹具模型上增加一个长方体模型,用于检测标签和周围钢筋的碰撞。右图标注框内为增加的长方体。模型编辑器使用方法可参考 模型编辑器

  • 当前工程的长方体模型尺寸为最大钢筋尺寸 40*40 mm,工程内已保存模型简化过程 m3d 文件。如现场夹具与此一致,可在此夹具基础上进行修改。

../../../_images/rebar_marking_clamp_attention.png

视觉相关

通信方式

推荐使用标准接口通信方式。

一、切换 Mech-Vision 配方

机器人 -> 工控机

请求指令

Mech-Vision 工程编号

配方编号

103

Mech-Vision 工程列表中工程名左侧的数字

1~99

示例

103, 1, 2

工控机 -> 机器人

返回指令

状态码

103

1107:配方切换成功 1012:Mech-Vision 配方编号不存在

示例

103, 1107

二、启动 Mech-Viz 工程

机器人 -> 工控机

请求指令

位姿类型

机器人位姿

201

0:不发送位姿 1:传入 Mech-Viz 的位姿为关节角及法兰位姿形式 2:机器人端自定义的关节角

机器人当前关节角及法兰位姿(若“位姿类型”为 1)

示例

201, 1, 0, -20.632, -107.812, 0, -92.818, 0.003

工控机 -> 机器人

返回指令

状态码

201

2103:执行正常 2008:工程运行错误 ……

示例

201, 2103

三、选择 Mech-Viz 分支

机器人 -> 工控机

请求指令

分支步骤编号

出口号

203

该参数应为正整数,用于指定分支选择将在哪个步骤上进行

该参数为正整数,该参数用于指定工程将沿消息分支步骤的哪个出口运行。

示例

203, 1, 1

工控机 -> 机器人

返回指令

状态码

203

2105:执行正常 2018:无效的分支出口号 ……

示例

203, 2105

四、获取规划路径(推荐)

机器人 -> 工控机

请求指令

路径点类型

205

1:路径点将以机器人关节角形式返回 2:路径点将以机器人工具位姿形式返回

示例

205, 1

工控机 -> 机器人

返回指令

状态码

是否发送完成

路径点数量

“视觉移动”位置

路径点

205

2100:执行正常 2007:路径规划失败 ……

0:未发送完路径中的全部路径点 1:已发送完路径中的全部路径点

默认范围:0~20 若路径中含有 20 个以上个路径点,请多次执行该指令。

“视觉移动”步骤路径点在整个路径中的位置

物体位姿 标签 速度

示例

205, 2100, 1, 2, 2, 8.307, 15.163, -142.177, -2.775, -31.440, -96.949, 0, 64

五、获取视觉目标点(无 Mech-Viz 时使用,不推荐)

机器人 -> 工控机

请求指令

Mech-Vision 工程编号

102

Mech-Vision 工程列表中工程名左侧的数字

示例

102, 1

工控机 -> 机器人

返回指令

状态码

是否发送完成

TCP 数量

保留字段

视觉目标点

102

1100:执行正常 1102:无视觉结果 ……

0:未完全发送 1:已完全发送

默认范围:0~20

该字段未使用,默认值为 0

物体位姿 标签 速度

示例

102, 1100, 1, 1, 0, 95.780, 644.567, 401.101, 91.120, -171.130, 180.0, 0, 0

关于标准接口通信的详细内容,可参考 标准接口通信

如果采用 Adapter 通信方式,需另外开发。

机器人 -> 工控机

请求指令

Mech-Vision 工程编号

工件型号

“P”:拍照请求

1~9

1~99

示例

P, 1, 2

说明

拍照命令,工程编号1,工件型号2

工控机 -> 机器人

状态码

工件型号

工件正反

抓取点

0:识别成功 1:空料 2:识别失败

1~99

1:正面 2:反面

X,Y,Z,A,B,C

示例

102, 1100, 1, 1, 0, 95.780, 644.567, 401.101, 91.120, -171.130, 180.0, 0, 0

说明

拍照成功, 工件型号1,反面,抓取点 1.574 , -0.443 , -1.122 , 43.12 , -24.25 ,179.66

方案详解

相机

  • 视野覆盖范围:拍照高度一般为 1 m 左右;视野范围为 800 * 450 mm 左右。

  • 相机安装方式:一般为 Eye-To-Hand 安装方式。

点云模板与抓取点设置方式

钢筋打标方案采用“深度学习 + 计算平面点云位姿”方法,位姿输出前统一朝向并排序,因此无需制作点云模板及抓取点。

方案优点

  • 该方案包含单标签和双标签打标方案,用户可随时切换。

  • 该方案解决了如下问题:打标靠近钢筋捆下方、打标靠近钢筋捆边缘、标签打在凹陷钢筋上、打双标时两个标签重叠等。

  • 该方案具有单独计数界面,可显示视觉识别的图片并显示识别数量,并且可通过按钮来人工修改识别数量。

  • 该方案具有完善的防错步骤,提高了工程稳定性。

方案难点

  • 打标时,标签不能太靠下,不能靠近钢筋捆边缘,也不能将标签打在凹陷钢筋上,应打在钢筋捆中心附近。

  • 打双标签时,两个标签不能重叠,应左右各一个标签。

工程说明

钢筋打标工程

以下四个工程搭建思路一致:Vis-单标签-钢筋打标、Vis-双标签-首次打标、Vis-双标签-左侧重新打标、Vis-双标签-右侧重新打标,具体思路如下图所示。

../../../_images/rebar_marking_5.png

判断标签脱落工程

左图为判断单标签脱落的思路,右图为判断双标签脱落的思路。

../../../_images/rebar_marking_6.png

与判断标签脱落相关的工程,输出结果中的位姿均为机器人原点,机器人不会获取该位姿;输出结果中的标签值用于判断标签是否脱离,机器人只获取该标签值用于程序判断(比如标签异常则需要重新打标,标签正常则开始下一次循环)。

工程

工程输出视觉结果中的标签值

说明

Vis-单标签-脱落判断

0

未识别到标签

1

识别到一个标签

大于 1

识别到多个标签

Vis-双标签-脱落判断

0

未识别到标签

1 或 2

1 表示左侧有标签,右侧无标签 2 表示右侧有标签,左侧无标签

3

左右侧均有标签

各工程间逻辑关系

  1. 若项目需求为打单标签,则先调用“Vis-单标签-钢筋打标”,打标完成后,再调用“Vis-单标签-脱落判断”。

    1. 若“Vis-单标签-脱落判断”输出的标签值为 1 或 大于 1,则正常进行下一个打标流程。

    2. 若“Vis-单标签-脱落判断”输出的标签值为 0,表示标签脱落,需重新调用“打单标签工程”进行补标。

  2. 若项目需求为打双标签,则先调用“Vis-双标签-首次打标”,打标完成后,再调用“Vis-双标签-脱落判断”。

    1. 若“Vis-双标签-脱落判断”输出的标签值为 3,则正常进行下一个打标流程。

    2. 若“Vis-双标签-脱落判断”输出的标签值为 0,表示左右标签均脱落,需重新调用“Vis-双标签-首次打标”进行补标。

    3. 若“Vis-双标签-脱落判断”输出的标签值为 1,表示右侧标签脱落,需重新调用“Vis-双标签-右侧重新打标”进行补标。

    4. 若“Vis-双标签-脱落判断”输出的标签值为 2,表示左侧标签脱落,需重新调用“Vis-双标签-左侧重新打标”进行补标。

单独计数界面

单独计数界面如下图所示。

../../../_images/rebar_marking_7.png
  • 视觉图片显示区域: 每次识别完成后将指定文件夹下的最新日期图片文件显示在界面左侧区域。

  • 视觉识别数量: 显示视觉识别出的钢筋数量,即左侧图中绿色点个数。

  • 核验数量: 输入视觉未识别出的钢筋数量,即左侧图中红色点个数。用户可直接输入数值,也可根据步长调节(步长为 1,范围为 -999 至 999)。

  • 人工核验数量: 当用户单击 核验确认 ,将 核验数量视觉识别数量 相加得到的值显示在人工核验数量框中。人工核验数量框默认值为 0。

方案部署

注意事项

  1. 本方案使用的夹具如下图所示,左边的大圆为吸盘,用于吸取固定标签;右边的小圆为打标头,即 TCP。另外,为防止打标时标签和周围的钢筋干涉,在已有的夹具模型上需要增加一个长方体模型以检测标签和周围钢筋的碰撞。

    ../../../_images/rebar_marking_8.png

    注意

    • 夹具模型的格式需为 OBJ。

    • 当前方案增加的长方体模型尺寸为 40 * 40 mm,工程内已保存模型简化过程 m3d 文件。若夹具一致,现场应用可在此基础上修改。

  2. 在部署“单标签-钢筋打标”或“双标签-首次打标”工程时,确认 Mech-Vision 工程内保存文件的路径。

    1. 保存数量标签至指定文件夹下的 json 文件。

      ../../../_images/rebar_marking_9.png
    2. 保存深度学习推理后的可视化视觉图片至指定文件夹下的 jpg 文件。文件路径不允许存在中文字符。

      ../../../_images/rebar_marking_10.png
  3. 将单独计数程序文件夹(位于方案文件下的 tmp_widget 文件夹)复制到梅卡曼德软件系统安装目录下 Mech-Center/src 文件夹下。

  4. 将梅卡曼德软件系统安装目录下 Mech-Center/src/ui 文件夹下的 mainwindow.py 文件替换为方案文件夹下的 mainwindow.py 文件。打开替换后的 mainwindow.py,找到如下行,检查代码中路径是否真实存在。

    mainwindow.py
    1
    2
      def start_widget():
          os.system('python "D:/Mech-Mind/Mech-Mind Software Suite-1.6.1/Mech-Center/src/tmp_widget/P220903017_widget.py"')
    
  5. 检查梅卡曼德软件系统安装目录下 Mech-Center/src/tmp_widget 文件夹下的 config.json 文件中配置的路径与第 2 步设置的路径是否相同。若相同,无需修改;若不同,则修改成一致。

    config.json
    1
    2
    3
    4
      {
        "pic_path": "E:/projects/widget/*.jpg",
        "json_path": "E:/projects/widget/count_00000.json"
      }
    
  6. 检查梅卡曼德软件系统安装目录下 Mech-Center/src/tmp_widget 文件夹下的 P220903017_widget.py 文件中路径(如下第 5 行代码所示的路径)是否正确。

    P220903017_widget.py
    1
    2
    3
    4
    5
    6
      # class P220903017Widget(AdapterWidget):
      class P220903017Widget(QWidget):
          def __init__(self):
              super().__init__()
              config_dict = self.read_json_file("D:/Mech-Mind/Mech-Mind Software Suite-1.6.1/Mech-Center/src/tmp_widget/config.json")
              ...
    
  7. 在 Mech-Viz 工作流程中,连接“通知”与“分支”。

    ../../../_images/rebar_marking_24.png

    注意

    机器人工程师需根据标准接口编写机器人端程序,以根据需求选择不同的分支。

  8. 在 Mech-Center 主界面的部署设置中,按下图所示进行设置。设置完成后,单击主界面的“启动接口服务”,则将出现单独计数界面。

    ../../../_images/rebar_marking_11.png

参数调节建议(以打双标签为例)

点云预处理

  • 点过滤 :设置 参考方向角度差 ,用于过滤杂点。

  • 点云聚类 :设置合适的 输出类中相邻点最大距离类的最小/最大点数 ,保留钢筋端面点云。

../../../_images/point_cloud_clustering.png

计算单根钢筋中心

../../../_images/rotate_axis_to_minimize_included_angle_to_reference_direction.png

获取合适的左右打标位姿

../../../_images/get_left_and_right_mark_pose.png

左右打标位姿调整

左右打标位姿调整相关的参数调节可以参考下图。

../../../_images/left_and_right_mark_pose_adjust.png

常见问题及解决方法

问题一

  • 问题描述:深度学习未识别或误识别目标。

  • 解决方法:适当降低 置信度阈值 ,然后采集数据迭代优化目标检测模型。下图中置信度阈值为 0.7000,则左侧标签会被标记为识别失败。若将置信度阈值设置为 0.6000,则左右侧标签都会被标记为识别成功。

../../../_images/rebar_marking_16.png

问题二

  • 问题描述:钢筋打标位姿不准确,例如打标位姿偏下方,导致标签放容易脱落。

  • 解决方法:位姿偏下可能是理论打标中心位姿的方向和距离设置有误。可根据实际情况调节如下图中的两个步骤参数。

../../../_images/rebar_marking_17.png

问题三

  • 问题描述:当打标位姿位于凹陷的钢筋上时,Mech-Viz 检测到碰撞,从而导致打标失败。

  • 解决方法:打标位姿在凹陷钢筋上可能是设置的候选区域过小,或者 3D 位姿排序有问题。可根据实际情况调节如下图中的四个步骤参数。

../../../_images/rebar_marking_18.png

特别说明

Viz-钢筋打标(“双标签首次打标”分支)

无论 Mech-Vision 工程输出多少个打标位姿至 Mech-Viz,Mech-Viz 都只输出两个打标位姿(左右侧各一个标签)至机器人。

  1. “左侧打标”规划

    1. 左侧打标的参数设置如下图所示。工具选择 TCP1,视觉移动勾选“共享视觉结果”和“规划成功时保留共享的视觉结果”,仅使用标签为“左侧钢筋”的位姿。

    2. 若有一次规划成功,则继续下面的规划;若全部规划均失败,则报警。

    ../../../_images/rebar_marking_19.png
  2. “右侧打标”规划

    1. 右侧打标的参数设置如下图所示。工具选择 TCP2,视觉移动勾选“共享视觉结果”和“规划成功时保留共享的视觉结果”,仅使用标签为“右侧钢筋”的位姿。

    2. 若两个视觉移动均有一次规划成功,则规划成功,否则规划识别。

    3. 规划成功后,左右侧各输出一个位姿至机器人;此时标签默认为 0,不是钢筋数量标签。

    ../../../_images/rebar_marking_20.png

获取钢筋数量

“Vis-双标签-首次打标”工程输出的标签是用于区分左右侧位姿以方便 Mech-Viz 规划路径,而不是钢筋数量标签,切勿混淆。若机器人需要钢筋数量标签,请确认完成以下设置。

  1. 修改“Vis-双标签-首次打标”工程,如下图所示。

    1. 新增一个“从文件中读取位姿”步骤,设置读取机器人安全点位姿。

    2. 将合并数据(1)、合并数据(3)的端口个数改为 3。

    3. 将机器人安全点和钢筋数量标签分别连接至合并数据新增的端口。

    ../../../_images/rebar_marking_21.png
  2. 修改“Viz-钢筋打标”工程,如下图所示。

    1. 在“相对移动_34_internal”和“移动_3_internal”之间新增一个“设置工具_33”和“视觉移动_33”。

    2. “设置工具_33”的末端执行器设置为“2.tcp”(表示法兰),这样前面两个视觉移动规划成功后剩下的左右侧打标位姿在后续的视觉移动都会规划失败。

    3. “视觉移动_33”只会规划带有钢筋数量标签的机器人安全点位姿,从而实现输出钢筋数量标签至机器人。

    ../../../_images/rebar_marking_22.png
  3. Mech-Viz 输出左右侧打标点及机器人安全点(共三个点)的位姿、标签及速度(图中橙色框表示左侧打标点数据,前 6 个数字表示位姿,第 7 个数字表示标签,第 8 个数字表示速度)。机器人可以只获取前两个点(分别为左侧打标点和右侧打标点),其中左侧打标点的标签即为钢筋数量标签,如下图中 156 表示总钢筋数量。

    ../../../_images/rebar_marking_23.png