![16542b0891bf9366e9806e10e9a6024c.png](https://i-blog.csdnimg.cn/blog_migrate/94a4d6bc622410e5add707c5bcc5eb97.jpeg)
~欢迎关注~
微信公众号:古月居
新浪微博:古月春旭
知乎专栏:古月居
原文链接:古月私房课 | “手眼”结合完成物体抓取应用
古月居联合深蓝学院推出的“古月私房课”第一弹——《ROS机械臂开发:从入门到实战》已经上线啦,欢迎各位小伙伴前来围观,以下是第九讲《“手眼”结合完成物体抓取应用》的内容精要。
大家好,这里是《ROS机械臂开发:从入门到实战》的第九讲——“手眼”结合完成物体抓取应用,我是主讲人胡春旭。
![f67a94f0781302a536cbdf5e50023004.png](https://i-blog.csdnimg.cn/blog_migrate/545645b4bfe09f09e5680362d26ede99.jpeg)
视觉是机械臂应用中的关键传感器,上讲我们在仿真环境中实现了物体在图像坐标系下的识别,本讲我们继续结合机械臂实现视觉抓取。
![14f208073db63ed510e5a5dbada82ccf.png](https://i-blog.csdnimg.cn/blog_migrate/a6e321b375e7dbcbf28b08b9865cc1f0.jpeg)
在正式开始前,我们先来了解下视觉抓取中的关键技术。
![4e05bf7f855b0c47bfd9f99a920201dc.png](https://i-blog.csdnimg.cn/blog_migrate/0b991a4d8bb79e0d0e31dd4441079540.jpeg)
以下几个视频展示了一些典型视觉抓取的案例,无论摄像头安装在机械臂上,还是固定在周围环境中,都需要确定相机和机械臂本身的位置关系,视觉识别方面不仅要完成物体位置的识别,还需要分析抓取姿态。
![451a42280fae0b9656f04310d0bf8467.png](https://i-blog.csdnimg.cn/blog_migrate/5a8824a6e5b335c5cd953052170ac32a.jpeg)
我们来整理下其中涉及的关键技术,主要是以下四个方面,接下来我们看看在这四个部分中,ROS分别有哪些包可以为我们提供支持。
![66b883a35e6ba932bcbc586e1654ad65.png](https://i-blog.csdnimg.cn/blog_migrate/21d78ab696f578ca4ed4ed1cb880651b.jpeg)
首先是手眼标定,也就是相机内参和外参的标定,上讲我们已经详细介绍了camera_calibration功能包实现相机内参标定的过程。
![10a70535cd42e8783903e23ae0f55e6d.png](https://i-blog.csdnimg.cn/blog_migrate/de583004b054f2390cddb09bffb9d08c.jpeg)
在外参标定方面,ROS也提供了不少好用的功能包,本讲第二节会详细介绍外参的标定原理和easy_handeye功能包的使用方法。
![3f5659a211715c56714862b88b81a563.png](https://i-blog.csdnimg.cn/blog_migrate/4ade61bda80eea934a27607742084d91.jpeg)
视觉抓取中非常重要的一个部分就是对抓取物体的识别,无论是二维图像还是三维点云,在ROS中都可以找到对应的功能包,如果需要机器学习的话,也可以集成Tensorflow轻松实现。
![c2dc81716b37dd64e3296cab841e6979.png](https://i-blog.csdnimg.cn/blog_migrate/dbde8e5049c3d894a95f9452f7f5a6c4.jpeg)
抓取姿态分析是视觉抓取中的一个难点,因为生活中物体种类和摆放场景的复杂度太高,谷歌曾尝试用几十台机械臂进行抓取训练,最终还是由于无法大规模推广而放弃,有兴趣的小伙伴可以试下ROS中这些姿态分析的功能包。
![e5de0b3ab885094624b76caceea6cc54.png](https://i-blog.csdnimg.cn/blog_migrate/8901174893fdf6e752fd5abd0397b34d.jpeg)
除了以上技术外,机械臂的运动规划当然也是重头,这也是ROS MoveIt!最擅长的部分。
![3224ace75f1c06393beb960ef125498c.png](https://i-blog.csdnimg.cn/blog_migrate/cb469500a597acea6024cbc4732e8512.jpeg)
手眼标定是机械臂中非常重要的一项功能,第二个部分我们就一起来学习下手眼标定的原理和应用。
![25c6779aba935a9be992810779a727ba.png](https://i-blog.csdnimg.cn/blog_migrate/a2af735b4be2971f90fb5bbfb3ce74d3.jpeg)
手眼标定的场景主要有以下两种,一种是眼在手外,这种场景下我们已知机械臂终端tip_link与base_link、相机camera_link与识别物体object_link之间的关系,需要求解camera_link与base_link之间的变换;两外一种是眼在手上,这种场景是求解camera_link与tip_link之间的变换。
![c738c9e851173e4a157c59945d8e5fb1.png](https://i-blog.csdnimg.cn/blog_migrate/ce5927692fa112cea02d207ec0aedb25.jpeg)
分别来看两种场景的标定原理,通过采样多个标定位姿下的图像数据,我们可以得到以下公式,最终无论哪种场景,都可以简化为AX=XB的求解问题。
![4708bbb6e877304f74ffcc0989e9fe65.png](https://i-blog.csdnimg.cn/blog_migrate/6536508e4f3af8f8ae351aa3cfd2950e.jpeg)
![4526db762ed639d1f2eccf484f64acd1.png](https://i-blog.csdnimg.cn/blog_migrate/3fb6c42975de0aca331fdce6164d5b5f.jpeg)
在ROS中,有一个开源的手眼标定功能包——easy_handeye,它为我们提供了一套可视化工具,可以完成眼在手上与眼在手外两种场景的外参标定。
![886c6beed876210ac0b1e7def21d3b5a.png](https://i-blog.csdnimg.cn/blog_migrate/e5dcde65313f01ac5d4e732bd1794ee4.jpeg)
我们也在PROBOT Anno机器人上做了测试,通过以下两个可视化工具,完成17个点的运动采样后,即可自动完成参数的计算。
![1ac2bcd2b3fdc3923c8840777dcd201a.png](https://i-blog.csdnimg.cn/blog_migrate/cab1aeca8abe8493e53c5b2e7621d35b.jpeg)
手眼标定最终得到了camera_link和base_link之间的坐标变换,那这个数据我们该如何使用呢?且看接下来的分解。
![7e3cfd74cf74dcf1df552acfad9a3f1e.png](https://i-blog.csdnimg.cn/blog_migrate/eb2985afc06504164121ced4f685562f.jpeg)
在上讲中,我们已经完成了绿色物体在图像坐标系下的识别,大家运行本讲例程,将会看到进一步的视觉抓取例程效果。在该例程中,我们将物体在图像坐标系下的位置,变换到机器人base_link下的位姿,并且控制机器人完成抓取动作。
![7d4028d6e751b2f8801bb2d2ab60e018.png](https://i-blog.csdnimg.cn/blog_migrate/2d1c5e56f316615a4204a044f1145a46.jpeg)
代码中的关键部分如下,调用上讲的visionManager完成物体识别,然后将图像坐标系变换到相机坐标系,接着再左乘相机与机器人坐标系的变换矩阵,即可得到物体在机器人坐标系下的位姿,这里的camera_to_link_其实就是手眼标定的求解目标。
![d293b729d978839d6e751f87e78d926d.png](https://i-blog.csdnimg.cn/blog_migrate/f20f37857f275a5073d1e985e6237b63.jpeg)
在例程仿真中,相机的位置是在URDF中已知的,此处就省略了标定过程,直接通过tf获取。
![46bf4dde3a46d33efc1ba9f2569308b2.png](https://i-blog.csdnimg.cn/blog_migrate/bab3dd3943ef26b7afcb17b4736ff105.jpeg)
使用同样的流程和第二节标定得到的结果,我们在PROBOT Anno机器人上实现了视觉分拣应用,视频中大家可以看到easy_handeye标定的精度完全可以满足应用的需要。
![2b5ce3061abb79beff40714b1453f457.png](https://i-blog.csdnimg.cn/blog_migrate/4079404a150e32abc14f4c5c9b4adb92.jpeg)
以上就是本讲的内容精要,详细讲解和仿真/真机演示过程请见具体课程。
![f6f2c4f8ef6e87170e2e4a12f63c50ec.png](https://i-blog.csdnimg.cn/blog_migrate/4ec0e21c0711cf56b6bb4d6515fd3649.jpeg)
更多精彩,欢迎大家关注“古月居”。
![469f5860839c207ee10f6fb3a9f2f5e1.png](https://i-blog.csdnimg.cn/blog_migrate/dd4add9573b74364961670b2e5e8c399.jpeg)
更多内容欢迎关注:
微信公众号:古月居 (guyue_home)
新浪微博:古月春旭
知乎专栏:古月居
或访问古月居网站: