ROS机械臂视觉抓取

一、总述

视觉抓取主要是通过改变机器人的tool坐标系或base坐标系来实现的。物体位置的变化主要是它位置的X,Y,Z 方向的变化。而base坐标系可根据需要定义用户坐标系。当机器人配备多个工作台时,选择用户坐标系可使操作更为简单 。
在实际应用中,我们通常需要将相机观察到的外界环境中物体的姿态从相机坐标系转换到机械臂的坐标系中,辅助机械臂规划一些后续动作(如抓取)。为了得到机器人坐标系和相机坐标系的转换矩阵,我们还需要对机器人进行手眼标定。

二、视觉抓取中的关键技术

众所周知,无论将摄像头安装在机械臂上,还是固定在周围环境中,都需要确定相机和机械臂本身的位置关系,视觉识别方面不仅要完成物体位置的识别,还需要分析抓取姿态。
而其中涉及的关键技术,主要是以下四个方面,与此同时ROS针对这些关键技术提供相应的功能包支持。
参考网址:https://zhuanlan.zhihu.com/p/63757762

1、手眼标定

手眼标定即相机内参和外参的标定,其中内参标定使用camera_calibration功能包实现相机内参标定的过程。可参考博客:https://blog.csdn.net/weixin_45661757/article/details/113256274
手眼标定外参标定分为两种方式:眼在手上(eye in hand)、眼在手外(eye to hand)。

  • eye-in-hand 眼在手上:相机固定在机器人末端。这种情况下,需要将标定板固定在地面上,机器人坐标系和标定板坐标系的转换关系始终不变。求解的量为相机坐标和机器人末端坐标系的位姿关系。
    在这里插入图片描述
  • eye-to-hand 眼在手外:相机固定在机器人外的固定底座上。这种情况下,需要将标定板固定在机器人末端,求解的量为相机坐标系和机器人坐标系之间的位姿关系。
    在这里插入图片描述注:推导过程参考网址:
    https://zhuanlan.zhihu.com/p/78855930
    https://zhuanlan.zhihu.com/p/93183788
    https://yongqi.blog.csdn.net/article/details/107421641
    https://blog.csdn.net/zxxxiazai/article/details/107979149
    https://blog.csdn.net/qq_34935373/article/details/103727968?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-12.control&dist_request_id=&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-12.control

2、物体识别与定位

视觉抓取中非常重要的一个部分就是对抓取物体的识别,无论是二维图像还是三维点云,在ROS中都可以找到对应的功能包,如果需要机器学习的话,也可以集成Tensorflow轻松实现。
ROS功能包

  • find_object_2d:http://wiki.ros.org/object_recognition
  • Tensorflow Object Detection API:https://github.com/tensorflow/models/tree/master/research/object_detection
  • object_recognition:http://wiki.ros.org/object_recognition

3、抓取姿态分析

抓取姿态分析是视觉抓取中的一个难点,众所周知生活中物体种类和摆放场景的复杂度太高,谷歌曾尝试用几十台机械臂进行抓取训练,最终还是由于无法大规模推广而放弃,可以尝试ROS中这些姿态分析的功能包。
ROS功能包

  • agile_grasp:http://wiki.ros.org/agile_grasp
  • graspit:http://wiki.ros.org/graspit
  • moveit_simple_grasps:http://wiki.ros.org/moveit_simple_grasps

4、运动规划

Moveit!为开发者提供了一个易于使用的集成化开发平台。由一系列移动操作的功能包组成,包括运动规划、操作控制、3D感知、运动学、控制与导航算法等。这些功能算法的实现都是通过插件的方式在Moveit!中集成,并提供友好的GUI,,可广泛应用于工业、商业、研发和其他领域。
参考博客
https://blog.csdn.net/weixin_45661757/article/details/109991238
https://blog.csdn.net/weixin_45661757/article/details/110005283