一种实时模仿人体上半身动作的人形机器人控制方法与流程

文档序号:11078620阅读:1067来源:国知局
一种实时模仿人体上半身动作的人形机器人控制方法与制造工艺

本发明属于自动化和人机交互领域,具体涉及一种实时模仿人体上半身动作的人形机器人控制方法。



背景技术:

目前,大多数研究专注于机器人对人体上下肢动作的模仿以及模仿时的全身平衡控制,尚没有系统地控制人体上肢、头部转动和手掌开合的模仿方法,如果能系统实现这些模仿,则功能更为完善。具有头部模仿功能的机器人可通过利用控制机器人头部摄像机转向,改变摄像头视野,从而扩大机器人视野,在更大范围内寻找操作对象,实现相应地作业。而手部模仿将使机器人能够完成抓取、释放等动作,从而使得通过模仿技术来操纵机器人完成某种任务成为可能。



技术实现要素:

为了克服现有机器人模仿中无法完全模仿上半身动作的不足,本发明提出一种实时模仿人体上半身动作的人形机器人控制方法,包括上肢、手部和头部。

为了实现上述目的,采用的技术方案如下。

一种实时模仿人体上半身动作的人形机器人控制方法,其包括如下步骤:

1)通过Kinect传感器获取人体骨骼信息、彩色信息和深度信息;

2)从骨骼信息中提取上肢各关节的三维坐标,通过几何分析方法计算出人体上肢左右手臂的关节角度;

3)利用彩色信息和深度信息作为输入,通过Kinect SDK中的面部追踪算法获取人的面部转动角度;

4)在深度图像中分割出人的手部并判断手掌开合状态;

5)用步骤2)-4)计算出的人体上肢左右手臂角度、头部转动角度和判断出的手部状态驱动机器人完成与人相同的动作。

进一步地,所述步骤2)使用几何分析方法,具体是提取人的肩部、肘部、手部、髋部的三维坐标,用坐标构成向量,分析手臂运动过程中关节角度与向量之间的关系,找出能代表关节角度的向量夹角,用数量积公式求出向量夹角。

进一步地,所述步骤3)具体是:使用Kinect SDK的面部追踪算法,输入彩色和深度信息,实时识别和追踪人脸,存储追踪结果并提取人脸转动角度。

进一步地,步骤4)使用手掌分割方法分割出人的手部并判断手掌开合状态,具体是利用深度信息获取手部的深度区间[DMIN,DHAND]从而将手部分割出来,用像素点的个数判断是否检测到手部,并使用手部在深度图中的坐标定位手部的位置,判断分割出的部分是属于左手还是右手;同时,将手部开合状态判断转化为手掌拳头面积比较,为了使面积差异更为明显,绘制包围手部的最小圆,通过比较最小圆面积S和设定阈值S1的大小判断手部的开合状态,如果S>1,则手掌状态为开,否则为合;结合左右手判断和手掌拳头判断,可区分双手四种状态:左手开、左手闭、右手开、右手闭。

与现有技术相比,本发明具有如下优点和技术效果:本发明能系统地构成人形机器人模仿人上半身动作,克服现有机器人模仿中无法完全模仿上半身动作的不足。本发明基于向量运算的几何分析方法无需建模即可计算出上肢左右手臂的关节角度;基于面部识别的角度获取方式解决了机器人模仿人头部转动的问题;利用深度信息进行手掌分割的方法简便地判断人手部状态。

附图说明

图1为本实例中一种实时模仿人体上半身动作的人形机器人控制方法的流程图;

图2为左上肢各关节角度计算示意图;

图3为Nao机器人的左臂关节各自由度及其范围示意图;

图4为头部转动角度示意图;

图5为面部识别追踪流程图;

图6为手部分割示意图;

图7为左右手检测的矩形框;

图8为包围手部的最小圆以及手掌拳头面积比较;

图9为手部检测流程图。

具体实施方式

下面结合附图和实例对本发明的具体实施作进一步说明,但本发明的实施和保护不限于此。

图1所示的实时模仿人体上半身动作的人形机器人控制方法主要由图像数据采集和预处理1,基于向量法的几何分析、Kinect SDK面部追踪算法、手掌检测算法2,人形机器人3三个执行部分组成。先通过Kinect传感器获取骨骼信息、彩色信息和深度信息,完成图像数据采集和预处理,再通过基于向量法的几何分析、Kinect SDK面部追踪算法、手掌检测算法获取相关角度和手部开合状态信息,将关节角度和手部状态等数据传递给机器人,实现上半身模仿。

图2以Nao机器人左臂为例给出了求解关节角度的方法。当机器人双臂向前平举时各角度为0。推导过程在Kinect坐标系下进行,公式考虑机器人关节角度的正负限制,机器人关节活动范围如图3所示。从Kinect的角度看,Kinect坐标系以摄像头为原点,x轴指向左侧,y轴指向上方,z轴指向前方。为便于描述,将需要使用的点用数字代替:左肩-1,右肩-2,左肘-3,左手-4,左髋-5,右髋-6;用表示从点x到y的向量;关节角度LShoulderRoll(左肩翻滚角)、LShoulderPitch(左肩俯仰角)、LElbowRoll(左肘翻滚角)、LElbowYaw(左肘偏航角)依次用θSR,θSP,θER,θEY表示。

θSR:引入一个从人体左髋部指向右髋部的向量θSR即为从左肩指向左肘的向量与该向量的夹角:

θSP:设则θSP可以表示为:

θER:该角度可以直接由上臂和下臂的夹角求得:

θEY:该角度可认为是由左肩、右肩、左肘三点构成的平面和由左肩、左肘、左手三点构成的平面的夹角,这两个平面的法向量分别用表示,

设则:

Kinect SDK中的面部追踪算法支持对人脸进行实时识别和跟踪,以彩色图像和深度图像作为输入,可以估算头部姿态。图4为人的头部的三种转动角度:俯仰角(pitch)、翻滚角(roll)和偏航角(yaw),这三种角度在Kinect坐标系中定义。追踪步骤如下:启动Kinect后初始化变量,获取深度数据、彩色数据以及颈部和头部的三维坐标,作为面部追踪的输入,并开始追踪。如果没有追踪到,那么追踪继续执行;如果追踪到了面部,生成的数据将被存储。提取数据中的头部姿态,其输出结果的单位为角度,根据机器人关节度数设置的需要可进行角度-弧度的转换。其流程如图所示。在更明亮的场景下图像质量更好,识别率更高,在脸部可识别范围内,脸部离Kinect更近,识别效果也更好。面部识别追踪流程如图5所示。

对于机器人手部控制,首先在深度图像中遍历所有像素点寻找距离Kinect最近的点,其深度值为DMIN。在DMIN上加上一个合适的深度值h,得到比人手部最大深度像素点的深度更大的深度值DHAND

DHAND=DMIN+h,

根据深度区间[DMIN,DHAND]可将人的手部与身体其他部位区别开从而将手部分割出来,如图6所示。利用左右手在深度图中的坐标,设置两个各自能够完全包含左手和右手的矩形框,对深度图中深度值介于DMIN和DHAND之间并且位于矩形框中部分的像素点进行计数,得到左矩形框和右矩形框中的点数分别为N1和N2。我们可以根据以下情况判断是左手被检测到还是右手被检测到:

如果有左手或右手被检测到时,抠出手形,如图7所示。为避免当手部距离身体其他部位太近时其他部位也会被检测到,利用3维坐标计算手部与身体的距离d,当d小于某个阈值d1时,将暂停手部检测。在抠出手形后要进行手部状态判断,换句话说,就是区分此时手部展示的是手掌还是拳头。因为目标只是判断手部的开合两种状态,因而问题可以转化为比较手掌和拳头的面积大小,为了使两种面积差异更明显,使用Opencv库函数画出包围手部的最小圆,通过比较最小圆的面积S来判断手部状态,图8展示了两手分别为手掌和拳头时的面积比较。当S大于某一个阈值S1时判定为手掌,否则为拳头。记左手和右手某种状态连续出现次数分别为t1和t2,为了提高准确度,只有当t1或t2大于阈值a时才会被最终确定。整个流程如图9所示。根据上述检测方法,可以得到4种状态:左手开、左手闭、右手开、右手闭。

将上述求得的角度和手部状态传送给机器人,从而控制机器人模仿人体上半身动作,实现本发明的方法。

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