【睿尔曼-RealMan】RM机械臂YOLOV8-ROS视觉抓取

Lamont 2024-05-09

1.概述

YOLOv8 是一个 SOTA 模型,它建立在以前 YOLO 版本的成功基础上,并引入了新的功能和改进,以进一步提升性能和灵活性。具体创新包括一个新的骨干网络、一个新的 Ancher-Free 检测头和一个新的损失函数,可以在从 CPU 到 GPU 的各种硬件平台上运行。

ultralytics没有直接将开源库命名为 YOLOv8,而是直接使用 ultralytics 这个词,原因是ultralytics将这个库定位为算法框架,而非某一个特定算法,一个主要特点是可扩展性。其希望这个库不仅仅能够用于 YOLO 系列模型,而是能够支持非 YOLO 模型以及分类分割姿态估计等各类任务,便于扩展开发应用。

Yolov8的安装十分方便,安装依赖库就可以直接调用,以Ubuntu20.04系统为例,直接使用

# 使用清华大学的镜像源安装

pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple/

后续直接调用ultralytics 库就可以使用yolov8。(注意yolov8只支持python3.8及以上版本,更多依赖请参照官网requirements.txt)

相关安装与使用案例可以参考

https://blog.csdn.net/zardforever123/article/details/134338193

此博客只讨论如何使用D435相机结合RM机械臂使用YOLOV8检测物体并完成视觉抓取,更多功能应用欢迎大家学习交流。

2.实现

由于前面已经安装好yolov8,因此我们只需要将D435的图像数据流给到yolov8,让其对每一帧图像进行检测,返回检测结果,最后利用深度图像和标定结果得到物体坐标,最后就可以完成抓取实现。

第一步就是建立图像数据流并进行YOLOV8检测,代码如下

首先加载三方库

 

注意vi_grab.msg中的ObjectInfo消息类型需要提前定义并编译好,示例中的消息格式为

然后初始化D435相机

然后获取图像数据,这里获取像素点对应深度是通过D435的点云模式获得的,是属于realsense2的内部集成算法,用户可以根据自己的使用情况制定更加精确的算法,以保证测量的准确性。

 

最后就是主函数调用逻辑

至此,我们在开启ROS Master时,通过运行此文件,就可以实时检测并显示D435的图像,并且将物体的坐标发送到object_pose话题中,后续就可以从话题中拿数据进行更多操作。

上述我们获得了物体在相机坐标系下的坐标,接下来进行视觉抓取,我们还需要得到相机到机械臂基坐标系的标定矩阵,通过手眼标定得到转换矩阵,将物体坐标传入得到物体在机械臂基坐标系下的坐标,最后发送坐标给机械臂,机械臂执行抓取,完成视觉抓取一整套流程。

相机坐标系到机械臂基坐标系转换函数如下,仅供参考

得到标定矩阵后,替换上述代码中的矩阵数据,然后将物体的三维坐标传入,得到最终抓取点结果

result = convert(data.x,data.y,data.z,arm_pose_msg.Pose[0],arm_pose_msg.Pose[1],arm_pose_msg.Pose[2],arm_pose_msg.Pose[3],arm_pose_msg.Pose[4],arm_pose_msg.Pose[5])

再调用RM机械臂的ROS控制机械臂到达物体点

至此,RM机械臂通过YOLOV8与D435进行视觉抓取流程完毕,以上仅供学习交流,有什么不足之处欢迎讨论交流,最后附上D435使用yolov8检测并发布ROS消息的源文件

 

 

0 条评论

关于作者

Lamont

这家伙很懒,什么也没写!

选择发帖板块
选择发帖板块