通过ROS2和opencv、机器臂实现物体识别与抓取
OpenCV:
图像的本质是矩阵。红绿蓝三个颜色通道。
通过获取摄像头数据,将数据BGR格式转换为HSV(色相,饱和度,亮度),对HSV进行分离显示。
掩膜算法:1、读取摄像头数据,2、进行mask操作,将原来复杂的颜色变为只有0和1的颜色,目标图像标记为白色,其余为黑。3、用到了开运算(通过腐蚀的方法去掉小的噪点,但会导致目标图像缩小,于是再通过膨胀的方法还原目标图像的体积,4、查看结果
通过指定hsv、腐蚀膨胀的阈值,达到框选物体的效果(获取物体的定位)。
ROS:
1、Ubntu 中安装摄像头的驱动环境。实现ROS摄像头节点的搭建。
2、将ros图像消息通过cvbridge转换为OpenCV的RGB格式

3、创建一个视觉的包,在这个包下面创建一个视觉的节点。将节点订阅摄像头数据,获取摄像头数据后通过OpenCV进行显示。
4、流水线上物体的识别:创建你一个节点,将节点订阅摄像头数据,获取摄像头数据后通过OpenCV进行显示,将hsv和腐蚀膨胀阈值进行固定化(可以先测试出这个阈值)。当获取到图片识别的坐标位置信息后,将这个坐标信息通过广播的方式发布出去。可以通过新创建一个订阅者去查看时是否获取到了发布出来的信息。
5、将摄像头看到的坐标转换为机器臂需要的坐标:需要用到ros中的ROS TF2工具,只需要提供摄像头的相对于机器臂的坐标位置,以及摄像头的旋转弧度。TF会在后台自动构建一颗变换的树,无论摄像头后续如何歪,都能做出对应的调整。还需要提供物体像素和真实物理尺寸间的一个比例。
6、运动学:
关节空间和笛卡尔空间的转换(正解和反解)
正解:这里可以理解为已知机器臂各关节角度,求解目标位置。
反解:已知目标位置,求解机器臂各关节角度。
urdf(描述了机器人的关节,连杆长度),可以用于虚拟仿真,模拟演示机器臂的操作。
多解:一个目标位置可以反推多条路径。
奇异点:机器臂够不着或者手臂伸直锁死的情况。、
7、摄像头节点发布图像数据,识别物体并广播摄像头系坐标,通过TF变换信息将物体坐标转换到机器臂基座坐标系,并通过urdf文件中的描述完成反解计算关节角度,最后将关节信息发布到驱动关节的节点驱动机器臂运动。

更多推荐
所有评论(0)