记录一下最近完成的一个小玩意。
一、pipeline:
1.完成手眼标定(外参),获得相机坐标与机器人base坐标的变换矩阵。参考上一篇博文
2.用opencv 对抓取物件图片进行去背景处理、找轮廓和中心点处理,得到抓取点的pixel index。
3.利用realsense SDK获取抓取点到相机坐标系下的z值,以及内参(fx,fy,ppx,ppy)。
4.利用下面的公式计算出相机坐标系下的抓取点xyz,最后利用第一步求出的变化矩阵计算出dobot base坐标系下的抓取点坐标。
代码很乱,没整理,我是用ros做的(只是为后面做的东西打好基本框架,如果单纯是完成整个项目,不用ros):用一个ros节点(c++写)建一个dobot抓取动作的服务;用一个ros节点(python写)专门获取相机图像、深度图流,并利用OpenCV处理得到抓取点位置,并发布service client完成抓取动作。
这里要注意,获取d435i的图像流的时候要把前面20帧去掉,否则可能得到的图像偏暗。
代码三个文件,test.py放了两个图像处理函数(去背景,判断抓取物料的验收)、cv_handle_pub.py 是一个获取图像、计算抓取点,发布service client 节点、pick_object 是c++写的ros service server节点(执行dobot 抓取),在加一个ros srv和cmakelist,只需要这些,文件里面其他的可以删掉,。
代码链接:乱七八糟的代码