system: [SYSTEM]

user: 2. 相关工作 2.1. 骨骼数据采集模块(Visual C++编写) 2.1.1. 骨骼追踪的实现 Kinect传感器能够追踪人体全身的25个骨骼点，识别出人体的骨架模型，找到人体骨骼节点图像，算出骨骼特征点的坐标是骨骼数据采集平台的核心工作。本文在VS 2013 (Visual Studio 2013)的开发环境下，使用C++编程语言与Opencv开发库来完成骨骼跟踪。 从深度图像信息中提取出骨骼数据，首先要获得深度图像，然后通过计算机的图形视觉处理技术，获得人体图像，最后得出由骨骼关节点构成的人体骨架图，如图1所示。 Skeleton Stream (骨骼数据流)、Skeleton Frame (骨骼框架)、Skeleton (骨骼)和Joint (特征点)是Kinect的骨骼追踪系统中的四个主要对象模型。其中Skeleton Frame包含了人体的骨架信息。Joint共有ME25个骨骼特征点。每一个Joint都具有三种属性，如表1所示。 其中，Joint中的Joint Tracking State具有三种跟踪状态属性，如表2所示。 图1. 人体骨架图 Table 1 Three properties of the joint objec Joint对象的三种属性 定义 Joint Type属性 这是Joint的一种枚举类型 Position属性 Position的X、Y、Z表示骨骼点的三维坐标，以米作为单位。使用右手坐标系可以知道X、Y、Z的位置关系，以Kinect为中心原点，X轴向左代表正方向，向右为负，Y轴向上为正方向，向下为负，Z值表示人距Kinect的距离，越靠近Kinect，Z值越小。 Joint Tracking State属性 包含骨骼特征点的跟踪情况。跟踪情况有三种状态： Tracked (已跟踪)、NotTracked (未跟踪)、Inferred (推测而来)。 表1. Joint对象的三种属性 Table 2 Attribute characteristics of Joint Tracking Stat Joint Tracking State属性字段 含义 Inferred 骨骼追踪在深度图像数据帧中查看不到相应的关节点，但是可以计算出相对应的关节点位置 Not Tracked 关节点的位置无法确定，且位置为0 Tracked 关节点能够被检测，且一直被追踪 表2. Joint Tracking State的属性特征 当Kinect追踪骨骼特征点时，骨骼的姿势有可能会被遮住，然后导致追踪效果不好。因此，在处理骨骼数据时，首先要进行判断，只有当Joint Tracking State等于Tracked的骨骼点时才能进行处理，这样就可以除去有干扰的骨骼信息。 通过上述分析，骨骼数据采集流程图如图2，获取的骨骼数据采集图如图3。 2.1.2. 关节角度的计算 本文采用平面几何计算方法，计算骨骼关节点夹角时，两个关节点的连线与水平面的夹角θ，计算方式如图4，θ的结果如公式(2.1)。 因此，角度θ = (2.1) 本文采用的六自由度机械手臂有六个舵机共同控制机械臂的运动。考虑到人体手臂一只手只能控制机械臂的5个自由度，那么需要另外一只手来完成最后一个自由度的控制。人体双臂的控制动作与机械臂动作的对应关系如下表3。 2.2. 机械手臂控制模块(Visual C#编写) 在Visual Studio 2013环境下使用C#搭建机械手臂控制平台并编写上位机软件，如图5。 机械手臂控制平台将骨骼数据采集平台所采集的角度数据转化为舵机的控制信号，然后控制机械臂运动，舵机编号如图6。其中上位机发送给51单片机的是机械臂的控制指令(即舵机的控制指令)，由于舵机采用PWM脉宽调整信号控制，控制指令包括PWM值的信息。经过测量计算，关节角度的改变值转换算成PWM值时，270˚舵机每转动1˚，PWM值改变7.4；180˚舵机每转动1˚，PWM值改变11.11。例如原来的PWM值为1400，关节角度变化10˚，则PWM变为了1500 + 7.4 * 10 = 1474。 综上所述，从Kinect传感器到机械手臂控制的设计框图如图7所示。 2.3. 动态时间规整算法 DTW算法主要是基于动态规划(Dynamic Programing)的思想，它是通过动态归整来对齐时间轴，使得每个数据点都有着最好的对齐方式，从而消除对不齐造成的误差，以此来获得时间序列间的最优匹配 [ 7 ] 。如果通过时间变化的运动时间序列与时间序列模板库中的模板序列有最大程度的一致性，那么就可以将其中的模板序列去作为一种控制指令去控制机械臂运动。其中DTW算法的编写是用MATLAB这个软件完成的，并且MATLAB还需要完成多种任务：完成DTW的编写；实现与Mysql数据库之间的通信与联系；不断去访问实时数据表，通过其中的比较，将其用DTW算法和时间序列模板库中的模板序列进行相似性判断。 DTW算法实现的原理如下： 假定存入模板库中的运动序列组为一个参考模板，可以表示为 R = { R ( 1 ) ， R ( 2 ) ， R ( 3 ) ， ⋯ ， R ( M ) } ，其中， R ( 1 ) ， R ( 2 ) ， R ( 3 ) ， ⋯ ， R ( M ) 分别表示一个n维的时间序列，M为时间序列的个数 [ 8 ] 。实时的动作过程看作是测试模板，表示为 T = { T ( 1 ) ， T ( 2 ) ， T ( 3 ) ， ⋯ ， T ( N ) } ，其中， T ( 1 ) ， T ( 2 ) ， T ( 3 ) ， ⋯ ， T ( N ) 分别表示一个n维的时间序列，N为时间序列的个数。 图2. 骨骼数据采集流程图 图3. 骨骼数据采集图 图4. 计算两个关节点之间的夹角θ Table 3 Two-arm control arm rotatio 舵机编号 机械臂转动部位 双臂控制动作与机械臂动作的对应关系 0号 云台的左转 左肘部往上移动——云台左转 左肘部往下移动——云台右转 1号 大臂的前后移动 脖子到右臂肩关节的夹角变化来 控制大臂的前后移动 2号 小臂的前后移动 左臂肩部往下——小臂往后 左臂肩部往上——小臂往前 3号 腕关节的前后移动 右臂肘部往上——腕关节往前 右臂肘部往下——腕关节往后 4号 爪子的左右转 右臂腕关节往下——爪子右转 右臂腕关节往上——爪子左转 5号 爪子的张合 右手握成拳头——爪子闭合 右手张开——爪子张开 / 机械臂开始动作 举起左手 / 机械臂停止动作 左手握成拳头 表3. 双臂控制机械臂转动 图5. 上位机界面 图6. 舵机的编号图 图7. Kinect传感器到机械手臂控制的设计框图 计算参考模板和测试模板之间的直接距离，可以得出它们之间的相似度。两个模板之间的距离越短，可以得出两个模板之间的相似度也越高。根据DTW的边界条件，最短距离也就是 d = ( 0 ， 0 ) 到 d = ( m ， n ) 之间的最短路径如图8。再结合DTW算法的单调性和连续性要求，设定局部路径约束条件为：当从一个方格 d ( i − 1 ， j − 1 ) 、 d ( i − 1 ， j ) 或者 d ( i ， j − 1 ) 中到下一个方格 d ( i ， j ) ，横向或竖向的距离为 d ( i ， j ) ，斜着对角线过来的则是 2 d ( i ， j ) 。数学表达式(2.2)可以清楚地解释这种约束条件，其中 g ( i ， j ) 表示2个模板都从 g ( 0 ， 0 ) )点到 g ( m ， n ) 逐次匹配时两个模板之间的距离，并且要在上一次匹配的基础上加 d ( i ， j ) 或者 2 d ( i ， j ) ，然后取最小值。通过比较模板之间的直接距离，可以得出模板之间的相似程度。模板之间的直接距离愈来愈短，相似程度就愈来愈高。 g ( c k ) = g ( i k ， j k ) = g ( i ， j ) = min { g ( i − 1 ， j ) + d ( i ， j ) g ( i ， j − 1 ) + 2 d ( i ， j ) g ( i ， j − 1 ) + d ( i ， j ) (2.2) 2.4. Uniform Scaling算法 索引和匹配运动流的一个主要困难(此后可与“时间序列”互换使用)是人体运动速度的可变性 [ 9 ] 。例如，演员可以执行快速或慢速打击，而这种可变性可以表现为均匀缩放，时间序列的全局拉伸或收缩(即相对于时间轴)。DTW优于欧几里德距离的优势越来越明显，但是对于均匀缩放不变的相似性搜索的需求还不是很清楚。使用DTW (图9左)，我们无法实现2次动作和3次动作之间的直观对齐，即使序列恰好是相同的长度。然而，通过拉伸底部序列的均匀缩放可以实现有意义的对齐。 为了创建用于均匀缩放的下界限距离度量，我们将生成边界包络。引入了边界包络以降低DTW，虽然这里的原理是相同的，但是包络的定义是非常不同的。特别是，我们创建了两个序列U和L： U i = max ( c ⌊ ( i − 1 ) ∗ m / n ⌋ + 1 ， ⋯ ， c ⌊ i ∗ m / n ⌋ ) L i = max ( c ⌊ ( i − 1 ) ∗ m / n ⌋ + 1 ， ⋯ ， c ⌊ i ∗ m / n ⌋ ) 可以将这些序列可视化为界定时间序列C的前n个点。再引入下边界函数LB_Keogh： L B _ K e o g h ( Q ， C ) = ∑ i = 1 n { ( q i − U i ) 2 if q i > U i ( q i − L i ) 2 if q i > U i 0 o t h e r w i s e 图8. 两条时间序列 图9. DTW (左)和Uniform Scaling (右)的视觉对比 它可以降低Q和C之间距离的任何比例因子，将U和L可视化为分段常数函数，它们分别与U和L相交而不相交(图10)。 在这种情况下，只需计算DTW变换的上下边界包络，以便在均匀缩放找到最佳全局缩放后允许对时间轴进行小的局部调整。