0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

3D深度机器视觉和机器臂的无序抓取

大象机器人科技 来源:大象机器人科技 作者:大象机器人科技 2023-05-04 11:25 次阅读

pYYBAGRTHZuABFRNAJCGQgMx-24402.png

今天我记录使用myCobot320 M5跟FS820-E1深度相机进行一个无序抓取物体的分享。

为什么会选择深度相机和机械臂做一个案例呢?

2D相机(最常见使用的相机)可以捕捉二维图像,也就是在水平和垂直方向上的像素值。它们通常用于拍摄静态场景或移动的物体,并且无法提供深度信息。在机器视觉应用中,2D相机可以用于图像分类、目标检测和识别等任务。

相比之下,深度相机可以捕捉深度信息,因此可以获得物体的三维信息。这些相机使用各种技术来测量物体的深度,如结构光、时间飞行和立体视觉等。在机器视觉应用中,3D相机可以用于点云分割、物体识别和3D重建等任务。

2D相机捕获到的信息已经满足不了一些特殊的情况,所以换上深度相机获得的更多的信息,比如说物体的长宽高。

让我们开始今天的主题。

FS820-E1

相机的环境搭建

首先我要搭建FS820-E1的开发环境,使用的是相机提供的RVS进行开发。可以利用RVS中的视觉算子写成节点(Node)快速搭建抓取功能。

pYYBAGRTIt6AQZncAAFNjnwVD-o667.png

RVS工作界面

实时采集数据

在左上角窗口资源中,找到TyCameraResource 算子添加到算子图中的 ResourceGroup 中,在算子列表搜索TyCameraAccess,trigger算子分别添加到算子图中,并根据需要调整算子参数。然后点击运行和属性面板Trigger->ture即可查看可视化数据。没有报错能正常显示即可进行下一步。

TyCameraResource 算子

●start 以及 stop 分别用于开启、关闭资源算子的线程。auto_start 也是用于开启资源算子,如果勾选,则仅在打开 RVS 软件后第一次进入运行状态时自动开启资源线程。

●reset:在打开资源线程后如果需要更改属性参数,需要选中该选项进行重置。

TyCameraAccess 算子

●打开cloud、rgb、depth可视化属性,将 cloud_color设置为-2,代表真实颜色

poYBAGRTIu2AYg0VAAEFCcv9r70402.png

myCobot 320-M5Stack

myCobot 320 是面向用户自主编程开发的实践型机器人产品最大有效臂展 350mm,最大负载 1KG,重复定位精度 ±0.5mm。

pYYBAGRTIvaANaAwAAC-3LaY3P0114.png

环境搭建

需要python 编译环境以及控制机器人的库pymycobot

pip install pymycobot --upgrade

poYBAGRTIv2AO6LMAACs1uwyjVc298.png

ps:使用的PC的显卡最好是1060 2G独显以上,因为需要锻炼图片识别等操作,显卡的性能越好运行得越快

无序抓取

接下来是实现机械臂的无序抓取,无论物体处于何种姿态都能过精准的抓到。下图是整体的算子图,也就是unstacking.xml工程文件

poYBAGRTIwyARiOqAAOl4OfWQ6g876.png

手眼标定

用棋盘格来进行手眼标定

准备:

●准备棋盘格,算好棋盘格行列数,以及棋盘格边长(mm)

●手眼标定分为眼在手上(eye in hand)、眼在手外(eye to hand)。根据不同情况将标定板和相机固定好。这里选择eye to hand

pYYBAGRTIxqATaYoAALjYF002zY611.png

数据录制

点击左上角加载,打开unstacking_runtime/HandEyeCalibration/HandEyeCalibration.xml

poYBAGRTIyaAPrMEAAJWSvB9djA569.png

在属性面板正确填写标定板的行列数,和标定板格子的单位长度,和数据保存的文件路径

poYBAGRTIy2AKX7SAACaAK2JiEU516.png

启动相机工程和机械臂开始进行标定.

标定前确保相机能完整识别完整的棋盘格,以及标定过程中,棋盘格是固定的,不能发生移动。运行完成会得到18组数据。

pYYBAGRTIzeAF9yIAAWUbP4rBG8325.png

计算标定结果

positional error 在 0.005(5 毫米)以内,则比较理想

poYBAGRTI0uAb6mGAAK-pjOwDYw833.png

poYBAGRTI22APX6KAAB9yfYRxdY517.png

坐标系转换

此操作旨在将点云所处的坐标系——相机 rgb 镜头坐标系转换至机器人坐标系,这一转换涉及相机外参及手眼标定结果。

步骤:

●1)在算子图中右键选择在此处导入Group XML,导入RVSCommonGroup 中的HandToEye_Depth2Robot.group.xml。需要注意的是,除了该文件之外 ,还有HandInEye_Depth2Robot.group.xml。

●2)加载手眼标定数据组的pose端口与HandToEye_Depth2Robot组的rgb2robot 端口连接。

●3)拖入 LoadCalibFile 算子,用于加载标定文件,finshed 端口连接至HandToEye_Depth2Robot组的start端口;extrinsic_pose端口与rgb2depth 端口连接;start端口与InitTrigger端口finished端口连接。具体连接如下:

poYBAGRTI36Ab1IYAAIjbafw12g514.png

点击 Group,找到 rgb2tcp 算子,在属性面板的 pose 属性处,粘贴手眼标定的结果。

pYYBAGRTI4iALgB6AAJUez-6YYU585.png

●5)通过前述步骤,我们已经获取了相机 rgb 镜头转机器人坐标系的矩阵 rgb2robot 和相机深度镜头转机器人坐标系的矩阵 depth2robot,此处我们将相机深度镜头坐标系下点云转换至机器人坐标系下。

●6)首先拖入 Transform 算子,type 属性选择“PointCloud”,将 depth2robot 端口连接至该算子的pose 输入端口,将 LoadLocalData 算子组的 pointcloud 端口连接到本算子的同名输入端口。

poYBAGRTI-WAIQGHAAIHlY7T9JU660.png

AI训练

采集训练图像

打开 unstacking_runtime/MaskRCNN/ty_ai_savedata.xml,内容基本与录制 RGB 图像一致,在这里我们只需要调整 EmitSring 中的 string 参数,设置为我们想要的路径即可。点击 Capture 录制图像。当然数据越多那是越好,越稳定。

pYYBAGRTI_eAJBRfAAIJ1KqPwFc614.png

标注训练模型

目前为已录制好的 RGB 标注,我们推荐使用 labelme 这款软件,本文档提供一种 labelme 的安装方法。

●1.按照官网安装pip

https://pip.pypa.io/en/stable/installation/

●2.安装PyQt5

pip install PyQt5

●3.安装labelme

pip install labelme

标注前准备

首先确定任务目标,明确在检测过程中什么物体需要被检测,什么物体不需要被检测,从而有针对性的进行标注。

给定的标注条件无需过分苛刻,不要按照人的思维去考虑,而是按照自己主观设定的标注思路是否便于落实代码。

标注过程

●终端输出labelme,打开软件点击OpenDir,选择我们标注的路径(在3.2.1采集训图像Emit算子string路径)

●点击Create Polygons,为木块绘制红色的边框

●完成后会弹出命名框,第一次请命名 wooden block,后续同类直接选择

●当图像内所有箱子标注完成后,点击 Save 进行保存,默认当前文件夹,默认名称,随后选择 Next Image 切换到下一个图像

训练AI模型

开unstacking_runtime/MaskRCNN/ty_ai_train.xml,这里只需要调整 data_directory 和classnames _filepath 路径。点击 start_train按钮即开始训练。

最终会生成一个 train output 文件夹在这个文件夹中有命名为 model fial,pth是所需要的权重文件。

AI推理

1)拖入一个 Emit 算子,type 属性选择“pose”,重命名为“抓取参考Pose”,将 pose_roll 输入入“3.141592654”。这个算子在后续的算子中使用。将该算子中 pose 端口与计算抓取点组down_pose 端口连接

2)双击展开计算抓取点组,需要预先使用 MaskRCNN 网络对数据进行训练,将其中的AIDetectGPU 算子的 type 更改为MaskRCNN 并对应修改其余配置文件参数。由于 AI 推理算子在正式运行前需要初始化运行一次,所以需要在算子前额外添加一个 Trigger(type 为 InitTrigger)。

3)AI 推理算子会获得目标在 2D 图像中的位置区域(即掩码图,对应的是 obj_list 端口),之后我们需要将这些位置区域转换到 3D 点云中,这一环节对应的是 计算抓取点 组中的 ProjectMask 算子。对于 ProjectMask 算子,不仅需要给入 AI 推理算子获得的 obj_list,还需要给入 2D 图对应的点云、2D图采图时所用的 rgb 镜头坐标系同点云坐标系的转换矩阵、相机 rgb 镜头的内参。这里已经将点云转换到了机器人坐标系,所以需要输入 rgb 镜头到机器人坐标系的转换矩阵。相机的 rgb 镜头内参可以直接从相机参数文件中读取。算子运行完成后,会获得所有检测目标的点云列表。

poYBAGRTJCWAKll-AAEwQY5UNvY471.png

机械臂定位抓取

定位识别

根据 AI 推理后的流程,已经获得了在机器人坐标系下所有检测目标的点云列表。接下来要获得它的点云中心坐标。

1)双击展开 计算抓取点 组中 寻找目标 组。需要先筛选木块,并按照木块列表的 Z 轴坐标值进行筛选,筛选出最上层的木块,并对上层木块进行排序。因此这里使用 FilterBoxList 算子,重命名为“点云高度排序”,该算子的属性值调整如下:

2)获取平面,使用 FindElement,type 选择“Plane”,获得点云中适合抓取的平面。调整算子属性distance_threshold 来调整所选取的平面。打开 cloud 可视化属性来查看选取的平面。

3)获取平面中心点,使用 MInimumBoundingBox 算子,重命名为“获得外包框”,type 属性选择“ApproxMVBB”获得一个方便机器人抓取的坐标中心点。这里需要给该算子一个 ref_pose,这里连接在3.3.4进行AI推理中提到的“TowardsDownPose”,表示绕着 X 轴旋转 180°,使 Z 轴朝下,便于机器人抓取。打开“GetBoxCube”属性面板 box 和 box_pose 可视化属性即可显示计算出的平面中心点。

4)调整木块方向,使用AdjustBoxNode算子,该算子的作用是,选择长度大于宽度的物体,将物体位姿进行改变,这里选择yaw选择90°

poYBAGRTJEyAHLyOAAKcVVNTMCM043.png

这样就能够获取到坐标了

机械臂的抓取

在完成上述操作后,已经获得了目标点坐标,需要通过机器人和RVS软件建立连接并进行 tcp通讯。进行实际抓取。

1)编写TCP通讯代码(RobotControl_Elephant.py),以下部分为截取,该代码实现RVS软件和机械臂的TCP通讯

#CAPTURE print("***get pose***%s"%time.asctime()) capture_cmd = "GET_POSES n" capture_bytes=bytes(capture_cmd,encoding="utf-8") sock_rvs.send(capture_bytes) #recv CAPTURE data = sock_rvs.recv(socket_buf_len) print("---------------------------接收的数据----------------------------") print(data) print("***data end***%s"%data[-1:]) print("***capture_receive***%s"%time.asctime()) if int(data[-1:]) == 1: print("***received CAPTURE result***n") if int(data[-1:]) == 2: print("***All finished!***" #P_FLAG = bool(1-P_FLAG) #print("切换拍照位") continue #break

2)将目标点进行调整坐标⽐例,将 ScalePose 算⼦的 type 设置为 Normal ,分别调整 pose 的( X 、Y 、Z )和( Roll 、Pitch 、Yaw)⽐例。scale_rpy:修改 pose 中 r p y 的单位。设:57.2957795 。即从将弧度切换为⻆度。

3)最后,将ScalePose的 finished 和pose_list端口连接到最外层算子组的 MirrorOutput 端口, 并连接回 HandEyeTCPServer算子。至此,项目文件的编辑已经完成。

poYBAGRTJKGAeIEhAAPrpAfKfYc391.png

效果展示

完成以上步骤,在unstacking.xml工程下,点击运行,同时运行RobotControl_Elephant.py文件,识别到多个木块选取其中一个木块位姿就会发送给机械臂进行夹取。

poYBAGRTJLSAUSlcAID0gkdKWNA057.png

总结

总的来说这只是深度相机的一小点功能,后续甚至考虑将这几个物体叠在一起又或者其他的不规则形状来体现出它性能的强大。提前训练好模型,就能实现想要的效果。你期待我用它来做些什么呢?欢迎在地下留言,你们的点赞和关注将是我更新的动力!

审核编辑黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 3D
    3D
    +关注

    关注

    9

    文章

    2848

    浏览量

    107251
  • 机器视觉
    +关注

    关注

    161

    文章

    4317

    浏览量

    119960
  • 机械臂
    +关注

    关注

    12

    文章

    506

    浏览量

    24448
收藏 人收藏

    评论

    相关推荐

    探索3D视觉技术在活塞杆自动化抓取中的应用

    随着工业4.0时代的到来,智能制造成为工业发展的重要趋势。作为智能制造的关键技术之一,3D视觉技术在活塞杆抓取领域的应用前景十分广阔。
    的头像 发表于 09-07 15:38 221次阅读

    适用于3D机器视觉的高度可扩展的TI DLP技术

    电子发烧友网站提供《适用于3D机器视觉的高度可扩展的TI DLP技术.pdf》资料免费下载
    发表于 08-23 09:57 0次下载
    适用于<b class='flag-5'>3D</b><b class='flag-5'>机器</b><b class='flag-5'>视觉</b>的高度可扩展的TI DLP技术

    微视传感高性能3D视觉产品亮相2024上海机器视觉

    近日,2024上海机器视觉展在上海新国际博览中心隆重举行,微视传感携最新的高性能3D视觉产品亮相E2馆2121展位,得到广泛关注,这次展会不仅是微视传感展示创新技术的舞台,更是与行业同
    的头像 发表于 08-06 15:15 573次阅读
    微视传感高性能<b class='flag-5'>3D</b><b class='flag-5'>视觉</b>产品亮相2024上海<b class='flag-5'>机器</b><b class='flag-5'>视觉</b>展

    纸箱的拆码垛,3D视觉引导机器无序抓取

    在繁忙的物流仓库中,纸箱的拆码垛工作常常让人头疼不已。但是,现在有了富唯智能的3D视觉引导纸箱拆码垛解决方案,这一切都变得轻松简单!
    的头像 发表于 06-17 16:59 249次阅读
    纸箱的拆码垛,<b class='flag-5'>3D</b><b class='flag-5'>视觉</b>引导<b class='flag-5'>机器</b>人<b class='flag-5'>无序</b><b class='flag-5'>抓取</b>

    3D视觉技术无序抓取引导活塞杆

    随着工业4.0时代的到来,智能制造成为工业发展的重要趋势。作为智能制造的关键技术之一,3D视觉技术在活塞杆抓取领域的应用前景十分广阔。
    的头像 发表于 05-13 13:40 216次阅读
    <b class='flag-5'>3D</b><b class='flag-5'>视觉</b>技术<b class='flag-5'>无序</b><b class='flag-5'>抓取</b>引导活塞杆

    重磅| 奥比中光全新双目系列3D相机,搭载自研芯片,为智能机器人而生

    设计的新一代深度引擎芯片MX6800,配备高性能主被动融合双目成像系统,能够在户外、室内、夜晚、白昼等不同光照条件以及复杂多变的动态环境中稳定输出高质量深度数据,精准还原场景和物体的3D信息,广泛适用于AMR、巡检
    发表于 04-30 18:00 403次阅读
    重磅| 奥比中光全新双目系列<b class='flag-5'>3D</b>相机,搭载自研芯片,为智能<b class='flag-5'>机器</b>人而生

    富唯智能案例|3D视觉引导机器抓取鞋垫上下料

    随着制造业对自动化、智能化需求的不断提升,如何实现鞋垫上下料的精准、高效操作成为了企业亟待解决的问题。传统的上下料方式往往依赖人工,存在效率低下、精度不足等问题。而富唯智能的3D视觉引导机器
    的头像 发表于 04-08 16:57 350次阅读
    富唯智能案例|<b class='flag-5'>3D</b><b class='flag-5'>视觉</b>引导<b class='flag-5'>机器</b>人<b class='flag-5'>抓取</b>鞋垫上下料

    一文了解3D视觉和2D视觉的区别

    一文了解3D视觉和2D视觉的区别 3D视觉和2D
    的头像 发表于 12-25 11:15 2765次阅读

    2D3D视觉技术的比较

    作为一个多年经验的机器视觉工程师,我将详细介绍2D3D视觉技术的不同特点、应用场景以及它们能够解决的问题。在这个领域内,2
    的头像 发表于 12-21 09:19 1037次阅读

    蓝芯科技正式发布全球首款「纯」3D视觉移动机器人VMR产品

    基于领先的核心技术LX-MRDVS®(蓝芯-移动机器深度视觉系统),围绕SMT贴片自动化生产,蓝芯科技正式发布全球首款「纯」3D视觉移动
    的头像 发表于 12-18 11:29 764次阅读

    aikit 2023 3D与机械结合!

    引言 今天我们主要了解3D摄像头是如何跟机械应用相结合的。我们最近准备推出一款新的机械套装AI Kit 2023 3D,熟悉我们的老用户应该知道,我们之前的AI Kit 2023套
    的头像 发表于 11-28 10:38 908次阅读
    aikit 2023 <b class='flag-5'>3D</b>与机械<b class='flag-5'>臂</b>结合!

    基于深度学习的3D点云实例分割方法

    3D实例分割(3DIS)是3D领域深度学习的核心问题。给定由点云表示的 3D 场景,我们寻求为每个点分配语义类和唯一的实例标签。
    发表于 11-13 10:34 2026次阅读
    基于<b class='flag-5'>深度</b>学习的<b class='flag-5'>3D</b>点云实例分割方法