一种基于手势远程操控机器人的系统及其实现方法技术领域
本发明属于计算机应用技术领域,具体涉及一种基于手势远程操控机器人的系统
及其实现方法。
背景技术
随着机器人及其智能化的不断发展,人类现代生活越来越离不开智能机器,很多
工作都有了机器人的参与。机器人的控制方法有很多,本文将目前的探测机器人的控制方
式以有限与无线的方法分为两种,并以无线为主要发展方向。而无线控制又多以手柄、鼠标
或计算机直接控制,不仅在探险救灾等紧急情况下不方便操作,而且还会降低机器人的灵
动性。
发明内容:
本发明针对现有技术的不足,提供一种基于手势远程控制机器人的系统及方法,
并通过六足机器人来实现。
本发明解决其技术问题所采用的技术方案如下
一种基于手势远程控制机器人的系统,包括两个摄像头、本地网络终端、远程网络
终端、六足机器人。
一个摄像头安装在本地,用于采集手势指令数据,另一个摄像头安装在六足机器
人上,用于实时采集并反馈六足机器人的所处环境;本地网络终端用于数据处理和传输,当
本地网络终端接收到手势指令时,对手势指令进行解析处理,并将解析结果远程无线发送
给六足机器人;远程网络终端用于数据接收和传输,接收来自本地网络终端的解析结果,并
通过解析结果对六足机器人进行控制。
所述的本地网络终端设置有手势指令数据库,手势指令数据库包括静态手势和动
态手势;
所述的静态手势是指对手势指令进行拍照,通过Opencv的HSV肤色识别标记图中
的手势特征,并对该手势特征赋予相应的手势指令,然后将该手势指令存储在手势指令数
据库中并赋予相应的字符,等待匹配;
所述的动态手势,首先将动态手势指令的视频流进行特征图像选取,获得动态手
势的中心位置,然后通过多张特征图像判断手势的运动方向,对该动态手势赋予相应的指
令,并将该对应的指令存储在手势指令数据库中并赋予相应的字符,等待匹配;
一种基于手势远程操控机器人的系统的实现方法,具体包括如下步骤:
步骤1、在本地网络终端建立手势指令数据库,同时在六足机器人的远程网络终端
设置手势指令对应的动作指令数据库。
手势指令包括静态手势和动态手势;所述的静态手势是指对手势指令进行拍照,
通过Opencv的HSV肤色识别标记图中的手势特征,并对该手势特征赋予相应的手势指令,然
后将该手势指令存储在手势指令数据库中并赋予相应的字符,等待匹配;
所述的动态手势,首先将动态手势指令的视频流进行特征图像选取,获得动态手
势的中心位置,然后通过多张特征图像判断手势的运动方向,对该动态手势赋予相应的指
令,并将该对应的指令存储在手势指令数据库中并赋予相应的字符,等待匹配;
所述的动作指令数据库,是指对六足机器人的十八个舵机一一进行角度调整,形
成相应的运动顺序,达到所预想的动作,并将该对应的指令组存储在动作指令数据库中并
赋予相应的字符,等待匹配。
步骤2、对采集到的手势指令进行解析
2-1.在本地网络终端设置摄像头,用于采集手势;
2-2.对采集到的手势进行分析,从而与数据库中的手势指令进行匹配,具体如下;
2-2-1.对采集到的视频流进行减帧处理,对模糊图片进行逆滤波处理,得到手势
特征明显的图片;
2-2-2.通过Opencv的HSV肤色识别,对获取的图像进行中值滤波等预处理,并把图
像转换成HSV色彩空间,根据肤色在HSV空间的分布情况进行筛选,得到比较干净的带手势
区域的二值图像,从而确定从收集到的视频流中确定的手势模型。
2-2-3.得到视频流中的手势后,通过matchShapes()函数比较实时获取的图像与
本地网络终端的手势指令数据库中轮廓的相似值,从而达到匹配的 效果。
如若匹配不成功,即本地网络终端的手势指令数据库中无此静态手势,则进行动
态手势匹配,方法如下:
首先,利用Opencv中的函数boundingRect()来对刚才匹配失败的图片中的手势点
集进行包含,使得形成一个最合适的正向矩形框把当前指定的手势点集都框住,从而得到
外接矩形并通过函数rectangle()在图像上绘制矩形。
然后,对得到的手势区域进行轮廓检测,通过数学形态学中的腐蚀操作获取手势
区域中心位置点。由于手掌作为手势表观的主要组成部分,在手势区域中它占有最大的面
积而且点较为集中。通过连续的腐蚀操作,可以消除手势区域的边界点,使手势区域逐步缩
小,最终得到手势区域的中心位置点O。
最后,通过对多帧图片的中心位置点O进行位置对比从而判断手势的运动方向,根
据运动方向与动作指令数据库进行匹配匹配的效果。
步骤3、将匹配成功的手势指令发送给六足机器人
在确定好手势后,根据手势识别结果中的相应字符,建立socket通信,遵循TCP/IP
协议簇把字符发送到机器人控制板上,即远程网络终端。
步骤4、在远程网络终端将接收到的字符后与动作指令数据库进行匹配,然后调用
相应的动作组控制六足机器人执行。
本发明有益效果如下:
本发明以手势识别和无线传输为基础,用以组成未来勘测或抢险救灾的机器人无
线控制系统的雏形,在及其危险或紧急的情况下,免去找控制器或架设控制系统设备的麻
烦,解放人的双手并使人类对机器人的控制更加便利。
具体实施方式
下面对本发明作进一步说明。
一种基于手势远程控制机器人的系统,包括两个摄像头、本地网络终端、远程网络
终端、六足机器人。
一个摄像头安装在本地,用于采集手势指令数据,另一个摄像头安装在六足机器
人上,用于实时采集并反馈六足机器人的所处环境;本地网络终端用于数据处理和传输,当
本地网络终端接收到手势指令时,对手势指令进行解析处理,并将解析结果远程无线发送
给六足机器人;远程网络终端用于数 据接收和传输,接收来自本地网络终端的解析结果,
并通过解析结果对六足机器人进行控制。
所述的本地网络终端设置有手势指令数据库,手势指令数据库包括静态手势和动
态手势;
所述的静态手势是指对手势指令进行拍照,通过Opencv的HSV肤色识别标记图中
的手势特征,并对该手势特征赋予相应的手势指令,然后将该手势指令存储在手势指令数
据库中并赋予相应的字符,等待匹配;
所述的动态手势,首先将动态手势指令的视频流进行特征图像选取,获得动态手
势的中心位置,然后通过多张特征图像判断手势的运动方向,对该动态手势赋予相应的指
令,并将该对应的指令存储在手势指令数据库中并赋予相应的字符,等待匹配;
一种基于手势远程操控机器人的系统的实现方法,具体包括如下步骤:
步骤1、在本地网络终端建立手势指令数据库,同时在六足机器人的远程网络终端
设置手势指令对应的动作指令数据库。
手势指令包括静态手势和动态手势;所述的静态手势是指对手势指令进行拍照,
通过Opencv的HSV肤色识别标记图中的手势特征,并对该手势特征赋予相应的手势指令,然
后将该手势指令存储在手势指令数据库中并赋予相应的字符,等待匹配;
所述的动态手势,首先将动态手势指令的视频流进行特征图像选取,获得动态手
势的中心位置,然后通过多张特征图像判断手势的运动方向,对该动态手势赋予相应的指
令,并将该对应的指令存储在手势指令数据库中并赋予相应的字符,等待匹配;
所述的动作指令数据库,是指对六足机器人的十八个舵机一一进行角度调整,形
成相应的运动顺序,达到所预想的动作,并将该对应的指令组存储在动作指令数据库中并
赋予相应的字符,等待匹配。
步骤2、对采集到的手势指令进行解析
2-1.在本地网络终端设置摄像头,用于采集手势;
2-2.对采集到的手势进行分析,从而与数据库中的手势指令进行匹配,具体如下;
2-2-1.对采集到的视频流进行减帧处理,对模糊图片进行逆滤波处理,得 到手势
特征明显的图片;
2-2-2.通过Opencv的HSV肤色识别,对获取的图像进行中值滤波等预处理,并把图
像转换成HSV色彩空间,根据肤色在HSV空间的分布情况进行筛选,得到比较干净的带手势
区域的二值图像,从而确定从收集到的视频流中确定的手势模型。
2-2-3.得到视频流中的手势后,通过matchShapes()函数比较实时获取的图像与
本地网络终端的手势指令数据库中轮廓的相似值,从而达到匹配的效果。
如若匹配不成功,即本地网络终端的手势指令数据库中无此静态手势,则进行动
态手势匹配,方法如下:
首先,利用Opencv中的函数boundingRect()来对刚才匹配失败的图片中的手势点
集进行包含,使得形成一个最合适的正向矩形框把当前指定的手势点集都框住,从而得到
外接矩形并通过函数rectangle()在图像上绘制矩形。
然后,对得到的手势区域进行轮廓检测,通过数学形态学中的腐蚀操作获取手势
区域中心位置点。由于手掌作为手势表观的主要组成部分,在手势区域中它占有最大的面
积而且点较为集中。通过连续的腐蚀操作,可以消除手势区域的边界点,使手势区域逐步缩
小,最终得到手势区域的中心位置点O。
最后,通过对多帧图片的中心位置点O进行位置对比从而判断手势的运动方向,根
据运动方向与动作指令数据库进行匹配匹配的效果。
步骤3、将匹配成功的手势指令发送给六足机器人
在确定好手势后,根据手势识别结果中的相应字符,建立socket通信,遵循TCP/IP
协议簇把字符发送到机器人控制板上,即远程网络终端。
步骤4、在远程网络终端将接收到的字符后与动作指令数据库进行匹配,然后调用
相应的动作组控制六足机器人执行。
所述的步骤2中对采集到的手势指令进行解析,针对静态手势具体情况如下:
首先,通过Opencv的HSV肤色识别,对获取的图像进行中值滤波等预处理,并把图
像转换成HSV色彩空间,根据肤色在hsv空间的分布情况进行筛选,得到比较干净的带手势
区域的二值图像,从而确定从收集到的视频流 中确定的手势模型。其中,H参数表示色彩信
息,即所处的光谱颜色的位置。该参数用一角度量来表示,红、绿、蓝分别相隔120度。互补色
分别相差180度。纯度S为一比例值,范围从0到1,它表示成所选颜色的纯度和该颜色最大的
纯度之间的比率。S=0时,只有灰度。V表示色彩的明亮程度,范围从0到1。有一点要注意:它
和光强度之间并没有直接的联系。
RGB转化到HSV的部分算法
max=max(R,G,B)
min=min(R,G,B)
if R=max,H=(G-B)/(max-min)
if G=max,H=2+(B-R)/(max-min)
if B=max,H=4+(R-G)/(max-min)
H=H*60
if H<0,H=H+360
V=max(R,G,B)
S=(max-min)/max
HSV转化到RGB的部分算法
if s=0
R=G=B=V
else
H/=60;
i=INTEGER(H)
f=H-i
a=V*(1-s)
b=V*(1-s*f)
c=V*(1-s*(1-f))
switch(i)
case 0:R=V;G=c;B=a;
case 1:R=b;G=v;B=a;
case 2:R=a;G=v;B=c;
case 3:R=a;G=b;B=v;
case 4:R=c;G=a;B=v;
case 5:R=v;G=a;B=b;
其次,得到视频流中的手势后,通过matchShapes()函数比较实时获取的图像与模
板库中轮廓的相似值,从而达到匹配的效果。其中的matchShapes函数的作用是比较两个形
状的相似度
double MatchShapes(
const void*object1,
const void*object2,
int method,
double parameter=0
);
所述的步骤2中对采集到的手势指令进行解析,针对动态手势具体情况如下:
(1)通过Opencv的HSV肤色识别,确定从收集到的视频流中手势的大概区域,方法
同静态手势相同。
(2)利用Opencv中的函数boundingRect()来对指定的手势点集进行包含,使得形
成一个最合适的正向矩形框把当前指定的手势点集都框住,从而得到外接矩形并通过函数
rectangle()在图像上绘制矩形,得到手势区域后进行轮廓检测,用到函数findContours(
InputOutputArray image,
OutputArrayOfArrays contours,
OutputArray hierarchy,
int mode,
int method,
Point offset=Point());
第一步、mode取值“CV_RETR_EXTERNAL”,method取值“CV_CHAIN_APPROX_NONE”,即
只检测最外层轮廓,并且保存轮廓上所有点。(只有最外层的轮廓被检测到,内层的轮廓被
忽略)
第二步、mode取值“CV_RETR_LIST”,method取值“CV_CHAIN_APPROX_SIMPLE”,即检
测所有轮廓,但各轮廓之间彼此独立, 不建立等级关系,并且仅保存轮廓上拐点信息:
contours向量中所有的拐点信息得到了保留,但是拐点与拐点之间直线段的部分
省略掉了。
第三步、mode取值“CV_RETR_TREE”,method取值“CV_CHAIN_APPROX_NONE”,即检测
所有轮廓,轮廓间建立外层、内层的等级关系,并且保存轮廓上所有点。(所有内外层轮廓都
被检测到,contours点集组成的图形跟轮廓表现一致)
第四步、Point()偏移量设置
这个偏移量的设置不能过大或过小(负方向上的过小),若图像上任一点加上该偏
移量后超出图像边界,程序会内存溢出报错。
drawContours中最后一个参数是一个Point类型的offset,这个offset跟
findContours函数中的offset含义一致,设置之后所绘制的轮廓是原始轮廓上所有像素点
加上该偏移量offset后的效果。
当所分析图像是另外一个图像的ROI的时候,通过加减offset这个偏移量,就可以
把ROI图像的检测结果投影到原始图像对应位置上。
此时已经根据手势轮廓的面积和轮廓长度的阈值消除未去除干净的噪音轮廓,再
用函数boundingRect()返回的参数计算矩形的中心位置。
(3)通过数学形态学中的腐蚀操作获取手势区域中心位置点。由于手掌作为手势
表观的主要组成部分,在手势区域中它占有最大的面积而且点较为集中。通过连续的腐蚀
操作,可以消除手势区域的边界点,使手势区域逐步缩小,最终得到手势区域的中心位置点
C0。
计算出中心点与手势区域边缘的最大距离值l,对距离进行10等分,以d=l/10。以
手势区域中心点为圆心做出圆轨迹,圆半径从d开始到l,每次递加值为d,得到10个圆轨迹
线。
按顺时针方向记录每条圆轨迹线上像素值变化点Pij(0~1,即从黑色区域到白色
区域)和Qij(1~0,即从白色区域到黑色区域)的位置坐标值,i表示轨迹圆的编号,j表示同
一轨迹圆上P或者Q点编号,同时删除单独存在的Pij点和Qij点。
通过Pij和Qij的位置坐标,计算每对Pij和Qij之间的距离Dij,当轨迹圆与指尖部
分区域相截时获得较小的Dij,不能表现手指的实际宽度值, 所以当Dij小于阈值δ时,删除
对应的Pij和Qij点,根据经验设置阈值为δ=d/4。
每个轨迹圆上获得的j最大值,为与手掌相连分支数量总和N=max(j)。由于分支
中包含手指和手腕分支,则手指数量是Nf=N-1。
由每个分支的平均值计算得到分支的平均宽度Wj=Dij。在手形上可知手腕宽度
大于手指,在分支中手腕对应于最大宽度的分支。由除手腕分支外的其他分支在各自截取
的最大轨迹圆上取Pij和Qij的中点与中心位置点C0连线,得到指间夹角Aj-1。
通过比较多帧图像的中心位置点和指间夹角从而判断手势的运动方向,并将发送
相应的指令给机器人。
本发明的传输为无线传输,在确定好手势后,根据手势识别结果匹配相应的字符,
建立socket通信,遵循TCP/IP协议簇把字符发送到机器人控制板上,即远程网络终端。
本发明步骤4中所述的调用相应的动作组控制六足机器人执行,具体的执行过程
如下:
将六足机器人的六条腿分别分为两组,其中腿1、3、5为一组,腿2、4、6为一组。前进
时,腿2、4、6作为摆动腿抬起,为保持平衡,机器人的重心与腿1、3、5形成的三角形的重心重
合,此时,1、3、5腿为站立腿来支撑整个机体;摆动腿向前跨步;此时,作为站立腿的1、3、5一
面起到支撑整个机体的作用,一面通过直流驱动电机和皮带传动机构来驱动机体向前移动
一个步长s;当机器人移动完成后,腿2、4、6落地作为站立腿来支撑机体,机器人的机体重心
落在这三条腿构成的三角形的稳定区域内,此时的1、3、5腿作为摆动腿抬起,准备做跨步运
动,腿2、4、6作为支撑腿来支撑整个机体,此时机器人的重心落在支撑腿构成的三角形的稳
定区域内,来保证机器人能够稳定地站立;摆动腿1、3、5向前跨出一步;2、4、6腿作为站立腿
一面支撑机体使其能够稳定地站立,一面驱动机体向前移动一个步长s。因此,a—b—c—
d—e—f为机器人的一个运动周期,机器人向前移动就是循环往复从a到f的过程。