一种人形机器人抓取球体的方法与流程

文档序号:14932570发布日期:2018-07-13 18:34阅读:300来源:国知局

本发明涉及智能机器人技术领域,特别涉及一种人形机器人抓取球体的方法。



背景技术:

自20世纪60年代以来,世界开始了各种类人机器人的研究,投入了大量的成果,开发了一系列类人机器人,现在国内外有很多学者进入这个领域;随着更多的学者和机构在人形机器人技术的研究和投入,利用高科技不断提高机器人的性能,同时成本也成为不容忽视的课题;因此,小型人形机器人已经成为很多研究人员和业务关注点;小型人形机器人,是指大型人形机器在体积,功能等方面缩小了简化的人形机器人;与大型人形机器人相比,小型人形机器人可以更容易地进入人们的日常生活中,他的娱乐,教学,服务等方面应用范围广泛,成本相对较低,机器人系统简单完善,已经成为其独特的优势。

现在在人形机器人领域,aldebaranrobotics公司开发了一种小型人形机器人nao是世界知名的作品;这种机器人的结构设计形状和运动受到广泛的认可,使用知名的低功耗x86平台处理器;主要特点包括语音合成,定位捕捉,目标定位,避障等等,还可以移动nao小型人形机器人联合教学功能,运行python程序,机器人行为进行更深入的编程;他有一个非常成熟和完善的配套编程平台,由于其优秀的二次开发能力成为学术教育领域的领导者。

目前,虽然nao包含了一些用于检测和识别不同物体形状的算法,但在实际应用时,nao自身的算法使用起来不够灵活或不能满足实际需求;此外,对形状识别后,现有算法存在对物体的定位不精确的问题。



技术实现要素:

本发明目的在于克服现有技术的不足,提出一种人形机器人抓取球体的方法,通过将opencv视觉库函数与人形机器人平台相结合,实现nao机器人对目标球体的识别,并采用改进的单目比例缩放算法对球体进行定位,计算出nao机器人距离球体的水平距离,进而根据所述水平距离,计算出nao机器人行走路线,控制所述nao机器人基于所述行走路线抓取球体目标物。

本发明解决其技术问题所采用的技术方案是:

一种人形机器人抓取球体的方法,包括:

安装在nao机器人上的摄像头发送捕获的目标物体图像信息到处理器;

所述处理器通过与所述nao机器人平台相连接的opencv视觉库函数对接收到的目标物体图像信息进行色彩空间转换和外部轮廓特征提取,与已建立的物体特征数据库进行比对识别出目标物体的形状为球体;

所述处理器计算出nao机器人距离球体的水平距离;

所述处理器根据所述水平距离,计算出nao机器人行走路线,控制所述nao机器人基于所述行走路线抓取球体目标物。

优选的,所述计算出nao机器人距离球体的水平距离,包括:

判断球体是否在平面i横向中心线上;所述平面i为过球体中心且与摄像头镜头光轴互成90°的平面;

如果球体在平面i横向中心上时,推导出摄像头距球的距离如下:

其中,r表示球体的半径;ω表示图像的水平宽度;r为图像上球体的半径;β表示nao机器人摄像头水平视角,为固定值47.8°;

如果球体不在平面i横向中心线上时,推导出摄像头距球的距离如下:

其中,x表示球体中心在图像上的水平坐标;

可此计算出nao机器人距离球体的水平距离,如下:

其中,h表示nao机器人处于初始状态时摄像头距地面的高度。

优选的,所述控制所述nao机器人基于所述行走路线抓取球体目标物,包括:

控制所述nao机器人运动至所述球体的位置;

获得所述nao机器人手臂的抓取轨迹;

在所述球体的位置,根据所述抓取轨迹抓取所述球体。

优选的,所述处理器通过与所述nao机器人平台相连接的opencv视觉库函数对接收到的目标物体图像信息进行色彩空间转换,包括:

通过cvloadimage或imread函数将目标物体图像加载至内存并提取图像像素点的rgb值;

通过cvcvtcolor函数对所述目标物体图像进行hsv处理。

优选的,所述处理器通过与所述nao机器人平台相连接的opencv视觉库函数对接收到的目标物体图像信息进行外部轮廓特征提取,包括:

通过cvloadimage或imread函数将目标物体图像加载至内存;

通过cvcvtcolor函数对所述目标物体图像进行灰度化处理;使用bitwise_not进行反色处理;

通过cvthreshold函数对所述目标物体图像进行二值化处理;

通过函数getstructuringelement制作操作内核;然后再通过erode函数与dilate函数进行腐蚀与膨胀处理;

通过canny函数检测图像边缘;

通过findcontours提取目标轮廓,得到一个连通区域的轮廓点的集合;再通过drawcontours函数画出轮廓并将其直观的展现出来。

优选的,与已建立的物体特征数据库进行比对获得目标物体形状,具体为在opencv视觉库中通过libsvm模式的svm算法或轮廓比对算法实现目标物体形状的识别。

优选的,通过libsvm模式的svm算法实现目标物体形状的识别,包括:

设计一个svm训练机并配置训练机参数,训练机参数配置完成时设置svm训练机路径;

定义样本测试与分类方法,分别训练正负样本,用经过处理的一维矩阵图片比对样本矩阵,通过数据比拟相似度,来确定读取图像更接近哪一个样本,进而识别目标物体形状;其中,样本来自物体特征数据库。

优选的,通过轮廓比对算法实现目标物体形状的识别,包括:

通过cvapproxpoly函数对轮廓进行多边形逼近处理;

通过cvfinddominantpoints函数实现轮廓上的关键点的查找提取;

通过cvcontourperimeter或cvarclength函数获取轮廓的周长;通过cvcontourarea函数获取轮廓的面积;

基于轮廓的hu矩匹配法,通过cvmatchshapes函数实现2个轮廓的匹配,进而物体识别形状。

与现有技术相比,本发明具有如下有益效果:

本发明一种人形机器人抓取球体的方法,通过将opencv视觉库函数与人形机器人平台相结合,实现nao机器人对目标球体的识别,并采用改进的单目比例缩放算法对球体进行定位,计算出nao机器人距离球体的水平距离,进而根据所述水平距离,计算出nao机器人行走路线,控制所述nao机器人基于所述行走路线抓取球体目标物。

以下结合附图及实施例对本发明作进一步详细说明,但本发明一种人形机器人抓取球体的方法不局限于实施例。

附图说明

图1是本发明的方法流程图;

图2是本发明的目标物体图像特征提取代码图;

图3是本发明的svm训练机参数配置代码图;

图4是本发明的路径设置代码图;

图5是本发明的nao机器人与球体位置示意图;

图6是本发明的球体在i横向中心线上的示意图;

图7是本发明的球体不在i横向中心线上的示意图。

具体实施方式

参见图1所示,本发明一种人形机器人抓取球体的方法,包括:

步骤101,安装在nao机器人上的摄像头发送捕获的目标物体图像信息到处理器;

步骤102,所述处理器通过与所述nao机器人平台相连接的opencv视觉库函数对接收到的目标物体图像信息进行色彩空间转换和外部轮廓特征提取,与已建立的物体特征数据库进行比对识别出目标物体的形状为球体;

步骤103,所述处理器计算出nao机器人距离球体的水平距离;

步骤104,所述处理器根据所述水平距离,计算出nao机器人行走路线,控制所述nao机器人基于所述行走路线抓取球体目标物。

nao机器人应用程序是建立在大量先进的复杂技术之上,如语音识别、物体识别、地图构建等并利用有限的资源、在有限的环境中运行的一种应用程序。用户可在windows、mac或linux系统下开发代码,并通过c++、python、urbi、.net等多种语言进行调用以实现nao机器人之间与人与机器人之间的互动,通过naoqi,不同模块(如运动、音频、视频等)之间可协调沟通,还可实现齐次规划,并与almemory模块共享信息。基于机器人视觉交流,实现机器人的视觉互动则需要opencv来完成实现。opencv是一个基于bsd许可(开源)发行的跨平台计算机视觉库,可以运行在linux、windows、android和macos操作系统上。它轻量级而且高效——由一系列c函数和少量c++类构成,同时提供了python、ruby、matlab等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。其主要应用体现在人机互动,物体识别,图像分割,人脸识别,动作识别,运动跟踪,运动分析,机器视觉结构分析等诸多方面。机器人视觉交流则是通过视觉获取目标物体的形状及色彩。

本实施例中,nao机器人摄像头完成对目标物体及其主体颜色的辨识,通过建立起所识别物体的特征数据库以及色彩空间,包括:(1)建立起合适的颜色空间,减少不同颜色以及不同环境(光照)下的互相干扰;(2)正确获取目标物体的外部轮廓以及特征。

1.1色彩空间的选取

色彩空间的用法是以某种标准下一般可以接受的方式对颜色进行描述。常用的色彩空间有rgb,cmy,hsv,hsi等。本文采用的色彩空间为rgb与hsv。

rgb(红色,绿色,蓝色)可以说r,g,b作为三维坐标系,其中每个坐标点表示一种颜色。hsv颜色空间,h是指颜色,通常使用一个有角度的圆来指代。s是指饱和度,圆的中心值为0,颜色非常浅,沿圆的半径增加颜色越来越深。v是指颜色的亮度,在底部的锥体值是指黑色,在顶部是白色。实际上,rgb颜色易被强光,低光,阴影等环境条件影响。相较下,hsv空间在面对这些变化的光线更加稳定,可以体现色彩的本质。

1.2转换色彩空间

opencv中有超过150种进行颜色空间转换的方法。但经常使用这两个:bgr$gray与bgr$hsv。本实施例用到的函数是:cv2.cvtcolor(input_image,flag),其中flag就是转换形式。对于bgr$gray的转换,要使用的flag就是cv2.color_bgr2gray。同样对于bgr$hsv的转换,使用的flag就是cv2.color_bgr2hsv。

2、目标物体的识别辨识

本实施例中,需要对摄像头抓取的目标物体图像进行特征提取,参见图2所示,包括:

(1)通过cvloadimage或imread函数将目标物体图像加载至内存。

opencv在应用cvloadimage函数将图像文件加载至内存后,可以调用cvshowimage函数来显示图片(cvnamedwindow函数可以改变显示图像的大小)。当不再需要加载到内存中的图像文件时,调用cvrealeaseimage函数以释放分配给该图像的内存(以矩阵的形式)。读取图片时,可以选择不同的读入效果和方式(主要是通过函数来实现与完成的),例如:函数cv_load_image_grayscale将图像读取为灰度图,cv_load_image_color函数读取为彩图。一般采用读入灰色值较多,因为灰色图像会占用比彩色图像更少的的内存空间。

在读取图片时,imread函数读取图片可以获得与cvloadimage同样的显示效果。cvloadimage与imread的区别是:imread返回的是一个mat数据对象而cvloadimage返回的是指针,返回数据对象的特点是在生存周期结束时无用手动释放。

(2)通过cvcvtcolor函数对所述目标物体图像进行灰度化处理;使用bitwise_not进行反色处理。

图像的灰度化是将彩色图像转换成为灰色图。众所周知,r(red)、g(green)、b(blue)是色彩的三原色,而opencv图像像素也遵循三原色模型,当rgb三值相等时,彩色表为灰色,r=g=b的值叫灰度值,灰度范围为0-255。

opencv中采用函数cvcvtcolor,将第二个参数设置为color_bgr2gray来完成彩色图像的灰度化;将第二个参数设置为color_bgr2hsv来完成彩色图像到hsv空间的转换。

反色实现原理:求得图片的像素值s,再去运行像素的减法255-s来求得反色,并存入路径;灰度图像一般只会有一个通道即gay2[a,b]=(255-gay[a,b]);而彩色图片则拥有三种通道,即255-gay[a,b][0],255-gay[a,b][1],255-gay[a,b][2],反色处理函数为bitwise_not。

(3)通过cvthreshold函数对所述目标物体图像进行二值化处理;

在图像特征获取(如后续会用到的轮廓边缘检测)时,必须先对图像进行二值化处理。图像的二值化即是将彩色图片转换为灰白效果的图片,要想达到这种效果可以将图像像素点设置为255(0亦可)。图像的二值化使图像中数据量大为减少,使得目标轮廓更为明显的呈现出来。

opencv中对图像进行二值化处理会调用二值化关键函数cvthreshold()。

(4)通过函数getstructuringelement制作操作内核;然后再通过erode函数与dilate函数进行腐蚀与膨胀处理。

二值图像的腐蚀和膨胀讲就是拿一个一般为3*3的二值图与另目标二值图像进行像素点的比较,根据比对得到结果对图像进行更深层次的处理。膨胀算法:用一个一般为3x3或者稍大一些的小二值图与另外一张二值图像的像素点做“与”运算,如果结果都0,则最后的结构图像的像素为0,else为1。在膨胀化后二值图像通常会向外扩大一圈。膨胀操作会使物体的边界向外扩张,这种膨胀操作会使物体图像内部的一些小洞被补满。如果此时再对其进行腐蚀操作的话,外部边界会变回原来的样子,但是那些图像中的内部空洞会永远消失。腐蚀算法:同样使用了3x3或者稍大的(11*11)的二值图像的像素点与目标二值图像的每一个像素做“与”运算,当运算结果为1时,结构图像的该像素为1,else为0结果。如果结果为零,二值图像则会大幅减少与缩减。腐蚀操作通常被用来去掉物体的边缘点,图像中通常会将细小物体像素点被认为是边缘点,因此会整个被删去。此时再运行膨胀算法时,留下来的大物体会变回原来的大小,而那些被认作被删除的边缘点则会消失。

开运算就是上述先腐蚀再膨胀的过程,可以消除图像上细小的噪声,并平滑物体的边界

同理,闭运算是先膨胀后腐蚀的过程,可以填充物体内细小的空洞,并平滑物体边界。

本实施例中,由于噪声的干扰和影响极为严重,图像在阈值化后所得到边界不平滑的现象,通常物体区域会存在部分噪声孔,或者背景区域上散落的一些小的噪声物体。多次的开和闭运算可以有效地改善噪声的干扰,如果需要,会进行多次腐蚀之后再加上相同次数的膨胀。

本实施例中可以先使用函数getstructuringelement来制作操作内核,然后再进行erode函数腐蚀与dilate膨胀。

(5)通过canny函数检测图像边缘。

(6)通过findcontours提取目标轮廓,得到一个连通区域的轮廓点的集合;再通过drawcontours函数画出轮廓并将其直观的展现出来。

本实施例中,首先依据颜色与纹理等特征提取出目标的前景图,然后再对前景图进行深度提取查找出特征目标。opencv里提取目标轮廓需要调用的函数是findcontours,函数会输入一个结果二值化处理过的图像,结果处理得出一个连通区域的轮廓点的集合:vector<vector<point>>。最终再通过drawcontours函数画出轮廓并将其直观的展现出来。

进一步的,使用opencv视觉图像辨别算法实现目标物体形状识别。

在完成视频图像的获取与图像形态处理与特征抓取后,主要考虑的问题是如何通过特征辨别(比对等算法)来对图片信息有效的归类,统筹与识别,并完成目标物体形状识别。

本实施例用到的方法包括svm算法和轮廓比法。

a、svm算法

svm向量机其实一种分类算法,它可以将两种不同的类划分开来,还可以用于模式识别与回归分析。svm分类机可以将特征空间进行分割并可以实现间隔最大化,将问题转化为一个凸二次规划问题的求解。

本实施例中基于svm算法采用了libsvm模式,包括:

按照libsvm软件包所要求的格式准备数据集;对数据进行简单的缩放操作;考虑选用rbf核函数;采用交叉验证选择最佳参数c与g;采用最佳参数c与g对整个训练集进行训练获取支持向量机模型;利用获取的模型进行测试与预测。

后面识别机器人形状实验中,将物体特征图片放入指定文件夹,形成了物体特征的图片库,以方便之后svm训练来识别图像形状。

svm训练机原理包括:

参见图3所示,首先设计一个svm训练机并配置训练机参数,并设定svm训练器路径;

开始训练正负样本,应用相应的opencv图像处理的矩阵思想,将图像样本文件(样本库)训练成为一组一维数组,分类并加以不同数字定义(0和1),同时机器人读入图像亦采用类似方法变换与处理。参见图4所示,注意定义好测试、加载和训练路径;

定义样本测试与分类方法,分别训练正负样本,用经过处理的图片一维矩阵求比对样本矩阵,通过数据比拟相似度,来确定读取图像更为接近哪一个样本,进而判断目标物体形状。

b、轮廓比对法

本实施例中用到的轮廓的特性包括:

b1轮廓的多边形逼近

轮廓的多边形逼近指的是:函数定义一个多边形来重新描绘图像中轮廓,从而大量削减了图像轮廓中的顶点数目。其实我们可以将多边形轮廓看作一种模糊化的轮廓,只是不再那么精细与特征明显,可以使用方法cvapproxpoly。

b2轮廓的关键点

轮廓的关键点是:关键点即指轮廓中突出顶点,一般会将它定义到一个轮廓关键点集合中,并使用cvfinddominantpoints函数来实现轮廓上的关键点的查找提取。

b3轮廓的周长和面积

轮廓的周长可以用cvcontourperimeter或者cvarclength函数来获取。轮廓的面积可以用cvcontourarea函数来获取。

本实施例中,使用轮廓hu矩匹配法得到了相应的匹配效果。轮廓的hu矩对包括缩放、旋转和镜像映射在内的变化具有不变性。cvmatchshapes函数可以很方便的实现对2个轮廓间的匹配。

参见图5至图7所示,通过如下方法计算出nao机器人距离球体的水平距离,包括:

判断球体是否在平面i横向中心线上;所述平面i为过球体中心且与摄像头镜头光轴互成90°的平面;

参见图6所示,如果球体在平面i横向中心上时,可知,

由此推导出摄像头距球的距离如下:

其中,r表示球体的半径;ω表示图像的水平宽度;r为图像上球体的半径;β表示nao机器人摄像头水平视角,为固定值47.8°;

参见图7所示,如果球体不在平面i横向中心线上时,可知:

由此推导出摄像头距球的距离如下:

其中,x表示球体中心在图像上的水平坐标;

可此计算出nao机器人距离球体的水平距离,如下:

其中,h表示nao机器人处于初始状态时摄像头距地面的高度。

进一步的,所述处理器根据所述水平距离,计算出nao机器人行走路线,控制所述nao机器人基于所述行走路线抓取球体目标物的方法,包括:

所述处理器根据所述水平距离,计算出nao机器人行走路线,控制所述nao机器人运动至所述球体的位置;获得所述nao机器人手臂的抓取轨迹;在所述球体的位置,根据所述抓取轨迹抓取所述球体。

以上所述,仅是本发明较佳实施例而已,并非对本发明的技术范围作任何限制,故凡是依据本发明的技术实质对以上实施例所作的任何细微修改、等同变化与修饰,均仍属于本发明技术方案的范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1