~欢迎关注~
微信公众号:古月居
新浪微博:古月春旭
知乎专栏:古月居
古月居联合深蓝学院推出的“古月私房课”第一弹——《ROS机械臂开发:从入门到实战》已经上线啦,欢迎各位小伙伴前来围观,以下是第九讲《“手眼”结合完成物体抓取应用》的内容精要。
大家好,这里是《ROS机械臂开发:从入门到实战》的第九讲——“手眼”结合完成物体抓取应用,我是主讲人胡春旭。
视觉是机械臂应用中的关键传感器,上讲我们在仿真环境中实现了物体在图像坐标系下的识别,本讲我们继续结合机械臂实现视觉抓取。
在正式开始前,我们先来了解下视觉抓取中的关键技术。
以下几个视频展示了一些典型视觉抓取的案例,无论摄像头安装在机械臂上,还是固定在周围环境中,都需要确定相机和机械臂本身的位置关系,视觉识别方面不仅要完成物体位置的识别,还需要分析抓取姿态。
我们来整理下其中涉及的关键技术,主要是以下四个方面,接下来我们看看在这四个部分中,ROS分别有哪些包可以为我们提供支持。
首先是手眼标定,也就是相机内参和外参的标定,上讲我们已经详细介绍了camera_calibration功能包实现相机内参标定的过程。
在外参标定方面,ROS也提供了不少好用的功能包,本讲第二节会详细介绍外参的标定原理和easy_handeye功能包的使用方法。
视觉抓取中非常重要的一个部分就是对抓取物体的识别,无论是二维图像还是三维点云,在ROS中都可以找到对应的功能包,如果需要机器学习的话,也可以集成Tensorflow轻松实现。
抓取姿态分析是视觉抓取中的一个难点,因为生活中物体种类和摆放场景的复杂度太高,谷歌曾尝试用几十台机械臂进行抓取训练,最终还是由于无法大规模推广而放弃,有兴趣的小伙伴可以试下ROS中这些姿态分析的功能包。
除了以上技术外,机械臂的运动规划当然也是重头,这也是ROS MoveIt!最擅长的部分。
手眼标定是机械臂中非常重要的一项功能,第二个部分我们就一起来学习下手眼标定的原理和应用。
手眼标定的场景主要有以下两种,一种是眼在手外,这种场景下我们已知机械臂终端tip_link与base_link、相机camera_link与识别物体object_link之间的关系,需要求解camera_link与base_link之间的变换;两外一种是眼在手上,这种场景是求解camera_link与tip_link之间的变换。
分别来看两种场景的标定原理,通过采样多个标定位姿下的图像数据,我们可以得到以下公式,最终无论哪种场景,都可以简化为AX=XB的求解问题。
在ROS中,有一个开源的手眼标定功能包——easy_handeye,它为我们提供了一套可视化工具,可以完成眼在手上与眼在手外两种场景的外参标定。
我们也在PROBOT Anno机器人上做了测试,通过以下两个可视化工具,完成17个点的运动采样后,即可自动完成参数的计算。
手眼标定最终得到了camera_link和base_link之间的坐标变换,那这个数据我们该如何使用呢?且看接下来的分解。
在上讲中,我们已经完成了绿色物体在图像坐标系下的识别,大家运行本讲例程,将会看到进一步的视觉抓取例程效果。在该例程中,我们将物体在图像坐标系下的位置,变换到机器人base_link下的位姿,并且控制机器人完成抓取动作。
代码中的关键部分如下,调用上讲的visionManager完成物体识别,然后将图像坐标系变换到相机坐标系,接着再左乘相机与机器人坐标系的变换矩阵,即可得到物体在机器人坐标系下的位姿,这里的camera_to_link_其实就是手眼标定的求解目标。
在例程仿真中,相机的位置是在URDF中已知的,此处就省略了标定过程,直接通过tf获取。
使用同样的流程和第二节标定得到的结果,我们在PROBOT Anno机器人上实现了视觉分拣应用,视频中大家可以看到easy_handeye标定的精度完全可以满足应用的需要。
以上就是本讲的内容精要,详细讲解和仿真/真机演示过程请见具体课程。
更多精彩,欢迎大家关注“古月居”。
更多内容欢迎关注:
微信公众号:古月居 (guyue_home)
新浪微博:古月春旭
知乎专栏:古月居