基于视觉定位的七轴机械臂目标抓取研究

2020-07-01 05:35马向华曲佳睿
应用技术学报 2020年2期
关键词:手眼标定摄像头

马向华, 曲佳睿, 赵 阳, 方 爽

(上海应用技术大学 电气与电子工程学院, 上海 201418)

在“工业4.0”和中国制造“2025”的背景下,为了适应现代社会快速多变的特点以及满足日益增长的复杂性要求,机器人不仅要能长期稳定的完成重复性工作,还应具备智能化、网络化、开放性、人机友好性等特点。而机械臂是机器人领域中最广泛实际应用的自动化装置,被广泛应用在工业、医疗、军事及空间探索等领域[1-3]。它是集机械工程、电气工程、仿生学、计算机工程、智能控制等多个学科最新成果为一体的综合领域[4-5],是衡量一个国家制造水平和科技水平的重要标志[1,6]。同时随着工业4.0时代的到来,机械臂在工业生产中的使用率将会越来越大,所以相应的机械臂智能控制技术急需不断发展。智能技术领域,对机械臂的功能作用提升最大的便是机器视觉技术,机器视觉技术简单概括就是用机器代替人眼来做测量与判断的技术,通过获取目标的图像,利用计算机模拟人的识别标准去分析理解图像[7]。传统的工业生产中,依据固定的工作流程,控制器指挥机械臂去完成生产任务,机械臂的每一次动作都是规划好的,所以对于分拣货物、采摘果蔬等需要判别或一定自主性的工作任务便显得捉襟见肘,而将机器视觉技术与机械臂的控制相结合,就等于赋予机械臂一双“眼睛”,让它能够像人类一样自主识别需要抓取或分拣的目标物体[8]。

自1959年世界第一台机器人诞生以来,机器人技术取得了长足的发展,大量的机器人被转换成了生产力,被应用于工业、农业、服务业等行业当中[9]。机器人的发展使得工业制造领域发生了翻天覆地的改变,因此机器人引起了众多科研人员的研究兴趣。

机器人在彻底改变技术的同时也改变着生活方式。从帮助残疾人在家中执行各种任务到在人类无法访问的环境中自主收集数据,机器人正在应用于一系列激动人心且有影响力的领域[10]。这些应用中的许多应用要求机器人以某种方式抓握和操纵物体(例如,通过把手打开门,或从海底拾取物体),但这提出了具有挑战性的问题。具体地,机器人必须解释场景的感官信息以定位对象并计划抓握方法。解决此类问题的一种方法是识别物体并确定其相对于机器人的姿势[11]。作为制造业大国,越来越多的机械臂被广泛应用于我国工业生产中,但是现阶段采用的机械臂大多是示教型,需要在生产前进行操作示范,记录工作参数[12],其运动方式简单,并且只能抓取单一规格型号的零件,无法智能的获取零件的三维尺寸并据此来实现机械臂自适应抓取和分类,所以这种方式无法满足未来工业生产的需求,更无法适应未来工业生产的复杂性和其所要求的灵活性[13]。为此,本文提出了一种基于机器人操作系统(robot operating system,ROS)的七自由度机械臂手眼结合抓取方法,同时可有效解决机器人结合机器视觉在面对特定物体进行抓取任务时,系统设计工作量大,可移植性差的问题。

1 ROS仿真平台简介

ROS是一个专门用于机器人软件开发的灵活框架,是由斯坦福大学人工智能实验室和 Willow Garage 合作共同研发并于2007年公开发布的次级操作系统,是针对机器人研究与开发所设计出来的一套系统结构[14]。ROS框架集成了大量的工具、库、协议,提供了类似操作系统所提供的功能,包括硬件抽象描述、底层驱动程序管理、公用功能的执行、程序间的消息传递、程序发行包管理,极大程度简化了复杂多样的机器人平台下的复杂任务创建与稳定行为控制[15]。

1.1 三维可视化平台—RViz

机器人综合开发环境(robotic integrated development environment,RViz)是ROS针对机器人系统可视化需求,为用户提供的一款三维可视化仿真工具。RViz可以通过图形化方式,将机械臂的各种位姿状态参数以3D可视化状态显示出来[16]。包括显示RGBD摄像头、激光雷达等机器人传感器的信息、运动的状态以及机器人周围环境的变化等。开发者也可在RViz中,通过按键、滑动条、数值输入等方式控制机器人的运动。

1.2 机械臂控制—MoveIt!

MoveIt!为开发者提供了一个易于使用的集成化开发平台,由一系列移动操作的功能包组成,包含运动规划、操作控制、3D感知、运动学、控制与导航算法等[17],并提供友好的GUI以便可以实时看到机器人的形态,进而完成基于界面的一系列操作。此外,MoveIt!还可广泛应用于工业、商业、研发和其他领域,是 ROS 社区中使用度排名前三的功能包[18]。

其中,move_group是MoveIt!的核心节点,可以综合其他独立的功能组件为用户提供ROS中的动作指令和服务,其结构如图1所示。用户接口方面,MoveIt!提供3种可供调用的接口:C++(使用move_group_interface包提供的API)、Python(使用moveit_commander包提供的API)和GUI(使用MoveIt!的RViz插件)。

图1 Move_group结构图Fig.1 Move_group structure diagram

1.3 Gazebo仿真环境

Gazebo是一个三维物理仿真平台,使用了分布式架构,拥有独立的库,可用于物理模拟、呈现、用户界面、通信和传感器生成[19],最重要的还有其具备开源免费的特性。同时,Gazebo仿真平台非常适用于交互式的机器人的开发,可以模拟机器人举起、抓取物体等动作或者在空间中进行目标识别、物体定位等活动。Gazebo不仅可以仿真机器人的运动,还可以仿真传感器的数据,得到的数据可直接在RViz三维可视化工具中显示[20]。

2 机械臂仿真模型建立

本文选用Franka Panda七轴机械臂为研究对象,其机器人描述文件(unified robot description format,URDF)可在ROS wiki官网得到。URDF是ROS中机器人模型的描述文件,包含了对机器人刚体外观、物理属性、关节类型等方面的描述。在使用xacro优化模型后,可以为复杂模型添加更多可编程功能。URDF文件主要由Link和Joint 2种标签构成,Link标签用于描述机器人连杆的外观和物理属性,包括尺寸(size)、颜色(color)、形状(shape)、惯性矩阵(inertial matrix)、碰撞参数(collision properties)等,Joint标签用于描述机器人关节的运动学和动力学属性。Link和Joint中均含有用于描述位置、颜色等几何信息的子标签。除此之外,Joint标签中可以定义关节旋转轴线、输出力矩、关节转速限制等信息。在机器人的可视碰撞检测方面,则通过Link和Joint标签中所包含的dae图形文件或者stl图形文件实现。程序如下所示:

〈robot name=“panda” xmlns:xacro=

“http://www.ros.org/wiki/xacro” 〉

〈link name=base_link〉

〈visual〉

〈orgin xyz=“0.017 0 0” rpy=“0 0 0”/〉

〈geometry〉

〈mesh filename=“package://franka_description/meshes/visual/link0.dae”/〉

〈/geometry〉

〈/visual〉

〈collision〉

〈origin xyz=“0.017 0 0” rpy=“0 0 0”/〉

〈geometry〉

〈mesh filename=“package://franka_description/meshes/visual/link0.stl”/〉

〈/geometry〉

〈/collision〉

〈inertial〉

〈orgin xyz=“-0.010934 0.23134 0.0051509” rpy=“0 0 0”/〉

〈mass value=“0.1”/〉

〈inertial ixx=“0.03” iyy=“0.03” izz=“0.03” ixy=“0.0” ixz=“0.0” iyz=“0.0”/〉

〈/inertial〉

Visual标签用于描述机器人Link部分的外观参数,Inertial标签用于描述Link的惯性参数,而Collision标签用于描述Link的碰撞属性。图2为在Gazebo中建立的七自由度机械臂仿真模型。

图2 Gazebo环境下机械臂仿真模型Fig.2 Model of robotic arm in Gazebo environment

3 机器视觉摄像头标定

本文选用单目RGBD摄像头,通常由于摄像头内、外部的一些原因,生成的物体图形可能会发生畸变,为了避免数据源所造成的误差,需要针对摄像头的参数来进行内参与外参的标定。在ROS中可以使用camera_calibration功能包来对双目和单目摄像头进行标定。

机器人与摄像头的手眼标定。在机器人视觉应用中,通过手眼标定来获取机器人坐标系和相机坐标系的关系,最后将视觉识别的结果转移到机器人坐标系下。根据相机位置的不同,若相机和机器人末端执行器固定在一起,成之为“眼在手”(eye-in-hand),若相机固定在机器人外部的底座上,则称之为“眼在外”(eye-to-hand)。本文采用eye-to-hand手眼标定方法,如图3所示,将摄像头固定在机械臂上方的合理位置。机械臂在运动过程中,末端执行器和标定板的位姿关系始终不变,在eye-to-hand配置方式中对于机器人夹着标定板移动任意2个位姿,有以下公式成立:

经过转换后,可得下式:

图3 眼在外构型Fig.3 Eye to hand

该问题可转换为齐次方程AX=XB的求解:在图3所示的变换中,T(base to end)表示的是机械臂基座标与末端执行器的变换关系,可以通过机械臂运动学正解求得;T(object to end)表示相机识别物体位置与末端执行器之间的变换关系;T(object to camera)表示相机识别物体与相机的变换关系。而未知的部分为机械臂末端执行器与相机位置的关系,该关系是需要求解的位置变换。

真实机械臂与摄像头进行手眼标定时,可以使用ROS环境下的开源软件easy_handeye,通过ROS环境下MoveIt!程序自动调整手眼标定过程中的机械臂位姿,以此提高手眼标定的自动化程度。在实验的仿真环境中,base_link与camera_link位置是已知的,通过程序:Obj_robot_frame = camera_to_robot_×obj_camera_frame;来计算物体在机器人坐标系下位置。

4 OpenCV物体识别

OpenCV库(open source computer vision library)是一个基于BSD许可发现的跨平台开源计算机视觉库,而ROS提供了与OpenCV的接口功能包—cv_bridge。其功能如图4所示,实验中使用cv_bridge功能包将ROS中的图像信息转换成OpenCV格式图像,并且调用OpenCV库来进行图像处理,OpenCV将处理后的图像数据转换成ROS图像信息,通过话题来进行发布,最终实现各节点之间的图像传输。

图4 Cv_bridge功能包的作用图Fig.4 Function diagram of cv_bridge

5 实验结果与分析

在机械臂工作空间内,机械臂的前方放置1个黑色的长方体,将目标物“绿色易拉罐”放在长方体上,图5为gazebo环境下使用rqt_image_view命令查看的相机视角图像。机械臂运动规划算法采用快速扩展随机树法(rapidly-exploring random tree,RRT)。机械臂开始运动到预设的准备姿态,防止机械臂遮挡物体导致相机无法捕捉到目标物体图像,之后程序中main函数中while循环不断查看图像队列,当有图像出现时,通过对图像的分析来获得目标物体的位置信息,之后完成目标的定位和抓取,如图6所示。

图5 摄像机视角物体图Fig.5 Corner object view from camera

图6 目标定位及抓取Fig.6 Targeting and grabbing

6 结 语

本文针对机器人结合机器视觉在面对特定物体进行抓取任务时,系统设计工作量大,可移植性差的问题,提出一种基于开源机器人操作系统ROS的七轴机械臂手眼结合抓取方法,在ROS框架下利用协作机器人FRANKA PANDA结合RGBD摄像头进行目标抓取研究。结果表明,该方法简单有效,以ROS为基础设计的抓取方法可移植性强,解决了面对复杂多样的物体,机器人系统需进行大规模控制改动的问题。

猜你喜欢
手眼标定摄像头
浙江首试公路非现场执法新型摄像头
摄像头连接器可提供360°视角图像
观察力、手眼协调能力
培养手眼协调能力,创意思维能力
使用朗仁H6 Pro标定北汽绅宝转向角传感器
观察力、手眼协调能力
培养手眼协调能力,创意思维能力
CT系统参数标定及成像—2
CT系统参数标定及成像—2
基于匀速率26位置法的iIMU-FSAS光纤陀螺仪标定