基于改进的反向运动学进行姿态解算的方法及相关设备转让专利

申请号 : CN201911033145.0

文献号 : CN110531866B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 杭建伟许秋子

申请人 : 深圳市瑞立视多媒体科技有限公司

摘要 :

本发明涉及运动捕捉技术领域,公开了一种基于改进的反向运动学进行姿态解算的方法及相关设备,用于提高人体骨骼末端移动旋转到目标位置的精准度。基于改进的反向运动学进行姿态解算的方法包括:获取预置关节点的旋转参数集、骨骼末端的当前位置和骨骼末端的目标位置;根据当前位置和旋转参数集计算得到雅可比矩阵以及雅可比矩阵的转置;根据当前位置和目标位置得到误差向量;根据误差向量、雅可比矩阵、雅可比矩阵的转置以及预置偏移向量更新当前位置,判断更新后的误差向量的模是否减小,若是,则根据预设迭代公式更新旋转参数集,直到迭代次数不小于预设迭代阈值或者更新后的误差向量收敛于0时,停止迭代更新旋转参数集。

权利要求 :

1.一种基于改进的反向运动学进行姿态解算的方法,其特征在于,包括:获取预置关节点的旋转参数集、骨骼末端的当前位置和所述骨骼末端的目标位置,所述旋转参数集用于指示所述预置关节点的旋转量,所述骨骼末端根据所述旋转参数集从所述当前位置逐渐靠近所述目标位置;

根据所述骨骼末端的当前位置和所述旋转参数集计算得到雅可比矩阵以及所述雅可比矩阵的转置;

根据所述骨骼末端的当前位置和所述骨骼末端的目标位置得到误差向量;

根据所述误差向量、所述雅可比矩阵、所述雅可比矩阵的转置以及预置偏移向量更新所述骨骼末端的当前位置,判断更新后的误差向量的模是否减小,若是,则根据预设迭代公式更新所述旋转参数集,直到迭代次数不小于预设迭代阈值或者所述更新后的误差向量收敛于0时,停止迭代更新所述旋转参数集。

2.根据权利要求1所述的方法,其特征在于,所述根据所述误差向量、所述雅可比矩阵、所述雅可比矩阵的转置以及预置偏移向量更新所述骨骼末端的当前位置包括:根据更新公式更新所述骨骼末端的当前位置,所述更新公式为:s′=s+α(JJTe+βe),0<α<1,其中,s′为更新后的骨骼末端的当前位置,s为所述骨骼末端的当前位置,e为误差向量、J为雅可比矩阵、JT为雅可比矩阵的转置,βe为预置偏移向量。

3.根据权利要求2所述的方法,其特征在于,所述预置偏移向量中的β初始设置值大于

0,其中β随迭代改变数值,若所述误差向量e的模不断减小,则β不断增大,若所述误差向量e的模增大,则β取负值。

4.根据权利要求2或3所述的方法,其特征在于,所述判断更新后的误差向量的模是否减小包括:根据所述更新后的骨骼末端的当前位置和所述骨骼末端的目标位置确定更新后的误差向量;

判断所述更新后的误差向量的模与上一次迭代产生的误差向量的模相比是否减小;

若是,则确定引入所述预置偏移向量βe的更新策略有效,若否,则确定无效。

5.根据权利要求4所述的方法,其特征在于,所述根据所述更新后的骨骼末端的当前位置和所述骨骼末端的目标位置确定更新后的误差向量包括:根据所述更新后的骨骼末端的当前位置和所述骨骼末端的目标位置之间的差值,得到所述更新后的误差向量。

6.根据权利要求4所述的方法,其特征在于,所述若是,则根据预设迭代公式更新所述旋转参数集,直到迭代次数不小于预设迭代阈值或者所述更新后的误差向量收敛于0时,停止迭代更新所述旋转参数集包括:若确定引入所述预置偏移向量βe的更新策略有效,则根据预设迭代公式更新所述旋转参数集;

获取迭代次数,并对所述迭代次数进行加1计算,所述迭代次数的初始值为0;

判断所述迭代次数是否小于预设迭代阈值;

若所述迭代次数不小于所述预设迭代阈值,则停止迭代更新所述旋转参数集;

若所述迭代次数小于所述预设迭代阈值,则判断所述更新后的误差向量是否收敛于0;

若是,则停止迭代更新所述旋转参数集,若否,则继续迭代更新所述旋转参数集。

7.根据权利要求6所述的方法,其特征在于,所述根据预设迭代公式更新所述旋转参数集包括:根据所述预设迭代公式计算得出每次迭代用于更新的参数集;

根据所述每次迭代用于更新的参数集得到更新后的旋转参数集θ′,则θ′=θ+dθ,其中,θ为所述旋转参数集,dθ为每次迭代用于更新的参数集。

8.根据权利要求7所述的方法,其特征在于,所述根据所述预设迭代公式计算得出每次迭代用于更新的参数集包括:T

设置所述预设迭代公式:Jdθ=JJ (e+Δe),则根据所述预设迭代公式得出所述每次迭代用于更新的参数集,其中,Δe为修正向量。

9.根据权利要求8所述的方法,其特征在于,所述设置所述预设迭代公式:Jdθ=JJT(e+Δe),则根据所述预设迭代公式得出所述每次迭代用于更新的参数集,其中,Δe为修正向量包括:设置JJT(e+Δe)=JJTe+βe,则JJTΔe-βe=0;

将JJT进行奇异值分解,得到JJT=UDVT,其中,U和VT分别为左奇异矩阵和右奇异矩阵的转置,D为对角矩阵;

T T

获得所述修正向量:Δe=VEUβe,其中,将D中的非零值替换为所述非零值的倒数得到矩阵E;

将所述Δe输入所述预设迭代公式中,得到所述每次迭代用于更新的参数集:dθ=JT(I+VEUTβ)e,其中,I为单位矩阵。

10.根据权利要求6所述的方法,其特征在于,所述判断所述更新后的误差向量是否收敛于0包括:判断所述更新后的误差向量的模是否大于预设误差阈值;

若是,则确定所述更新后的误差向量不收敛于0;

若否,则获取当前迭代后的误差向量和上一次迭代后的误差向量,并根据预置公式对所述当前迭代后的误差向量和所述上一次迭代后的误差向量进行计算,得到计算结果;

判断所述计算结果是否小于预置阈值;

若是,则确定所述更新后的误差向量收敛于0;

若否,则确定所述更新后的误差向量不收敛于0。

11.根据权利要求10所述的方法,其特征在于,所述根据预置公式对所述当前迭代后的误差向量和所述上一次迭代后的误差向量进行计算,得到计算结果包括:根据预置公式对所述上一次迭代后的误差向量Δ1和所述当前迭代后的误差向量Δ2进行计算,得到计算结果γ,所述预置公式为:

12.一种基于改进的反向运动学进行姿态解算的装置,其特征在于,包括:获取单元,用于获取预置关节点的旋转参数集、骨骼末端的当前位置和所述骨骼末端的目标位置,所述旋转参数集用于指示所述预置关节点的旋转量,所述骨骼末端根据所述旋转参数集从所述当前位置逐渐靠近所述目标位置;

计算单元,用于根据所述骨骼末端的当前位置和所述旋转参数集计算得到雅可比矩阵以及所述雅可比矩阵的转置;根据所述骨骼末端的当前位置和所述骨骼末端的目标位置得到误差向量;

迭代更新单元,用于根据所述误差向量、所述雅可比矩阵、所述雅可比矩阵的转置以及预置偏移向量更新所述骨骼末端的当前位置,判断更新后的误差向量的模是否减小,若是,则根据预设迭代公式更新所述旋转参数集,直到迭代次数不小于预设迭代阈值或者所述更新后的误差向量收敛于0时,停止迭代更新所述旋转参数集。

13.一种基于改进的反向运动学进行姿态解算的设备,其特征在于,包括:存储器和处理器,所述存储器中存储有指令,所述存储器和所述处理器通过线路互连;

所述处理器调用所述存储器中的所述指令,以使得所述设备执行如权利要求1-11中任意一项所述的方法。

14.一种计算机可读存储介质,其上存储有计算机程序,其特征在于:所述计算机程序被处理器执行时实现如权利要求1-11中任意一项所述方法的步骤。

说明书 :

基于改进的反向运动学进行姿态解算的方法及相关设备

技术领域

[0001] 本发明涉及运动捕捉技术领域,尤其涉及基于改进的反向运动学进行姿态解算的方法及相关设备。

背景技术

[0002] 人体动作捕捉技术是制作电影特效、实现虚拟现实等人机交互活动的重要途径,要实现这些应用必须通过运动姿态的测量来跟踪人体关节点的运动轨迹,因此,在基于标记点的动作捕捉过程中,需要进行姿态解算以求得人体骨骼中各关节的旋转信息。
[0003] 在现有技术中,经常使用反向运动学(inverse kinematics,IK)算法来计算骨骼姿态,通过IK算法可获得骨骼运动参数,通过该运动参数使得人体骨骼末端的实际运动轨迹基本与目标运动轨迹一致,解算IK可以使用牛顿法,但需要计算雅可比矩阵的逆矩阵,然而通常存在雅可比矩阵不可逆的情况,由此导致无法解算出骨骼的姿态信息。

发明内容

[0004] 本发明的主要目的在于解决了反向运动学算法中出现矩阵不可逆的情况下,避免求逆矩阵以及优化单一转置方法,以提高准确性的问题。
[0005] 为实现上述目的,本发明第一方面提供了一种基于改进的反向运动学进行姿态解算的方法,包括:获取预置关节点的旋转参数集、骨骼末端的当前位置和所述骨骼末端的目标位置,所述旋转参数集用于指示所述预置关节点的旋转量,所述骨骼末端根据所述旋转参数集从所述当前位置逐渐靠近所述目标位置;根据所述骨骼末端的当前位置和所述旋转参数集计算得到雅可比矩阵以及所述雅可比矩阵的转置;根据所述骨骼末端的当前位置和所述骨骼末端的目标位置得到误差向量;根据所述误差向量、所述雅可比矩阵、所述雅可比矩阵的转置以及预置偏移向量更新所述骨骼末端的当前位置,判断更新后的误差向量的模是否减小,若是,则根据预设迭代公式更新所述旋转参数集,直到迭代次数不小于预设迭代阈值或者所述更新后的误差向量收敛于0时,停止迭代更新所述旋转参数集。
[0006] 可选的,在本发明第一方面的第一种实现方式中,所述根据所述误差向量、所述雅可比矩阵、所述雅可比矩阵的转置以及预置偏移向量更新所述骨骼末端的当前位置包括:根据更新公式更新所述骨骼末端的当前位置,所述更新公式为:s′=s+α(JJTe+βe),0<α<
1,其中,s′为更新后的骨骼末端的当前位置,s为所述骨骼末端的当前位置,e为误差向量、J为雅可比矩阵、JT为雅可比矩阵的转置,βe为预置偏移向量。
[0007] 可选的,在本发明第一方面的第二种实现方式中,所述预置偏移向量中的β初始设置值大于0,其中β随迭代改变数值,若所述误差向量e的模不断减小,则β不断增大,若所述误差向量e的模增大,则β取负值。
[0008] 可选的,在本发明第一方面的第三种实现方式中,所述判断更新后的误差向量的模是否减小包括:根据所述更新后的骨骼末端的当前位置和所述骨骼末端的目标位置确定更新后的误差向量;判断所述更新后的误差向量的模与上一次迭代产生的误差向量的模相比是否减小;若是,则确定引入所述预置偏移向量βe的更新策略有效,若否,则确定无效。
[0009] 可选的,在本发明第一方面的第四种实现方式中,所述根据所述更新后的骨骼末端的当前位置和所述骨骼末端的目标位置确定更新后的误差向量包括:根据所述更新后的骨骼末端的当前位置和所述骨骼末端的目标位置之间的差值,得到所述更新后的误差向量。
[0010] 可选的,在本发明第一方面的第五种实现方式中,所述若是,则根据预设迭代公式更新所述旋转参数集,直到迭代次数不小于预设迭代阈值或者所述更新后的误差向量收敛于0时,停止迭代更新所述旋转参数集包括:若确定引入所述预置偏移向量βe的更新策略有效,则根据预设迭代公式更新所述旋转参数集;获取迭代次数,并对所述迭代次数进行加1计算,所述迭代次数的初始值为0;判断所述迭代次数是否小于预设迭代阈值;若所述迭代次数不小于所述预设迭代阈值,则停止迭代更新所述旋转参数集;若所述迭代次数小于所述预设迭代阈值,则判断所述更新后的误差向量是否收敛于0;若是,则停止迭代更新所述旋转参数集,若否,则继续迭代更新所述旋转参数集。
[0011] 可选的,在本发明第一方面的第六种实现方式中,所述根据预设迭代公式更新所述旋转参数集包括:根据所述预设迭代公式计算得出每次迭代用于更新的参数集;根据所述每次迭代用于更新的参数集得到更新后的旋转参数集θ′,则θ′=θ+dθ,其中,θ为所述旋转参数集,dθ为每次迭代用于更新的参数集。
[0012] 可选的,在本发明第一方面的第七种实现方式中,所述根据所述预设迭代公式计算得出每次迭代用于更新的参数集包括:设置所述预设迭代公式:Jdθ=JJT(e+Δe),则根据所述预设迭代公式得出所述每次迭代用于更新的参数集,其中,Δe为修正向量。
[0013] 可选的,在本发明第一方面的第八种实现方式中,所述设置所述预设迭代公式:Jdθ=JJT(e+Δe),则根据所述预设迭代公式得出所述每次迭代用于更新的参数集,其中,Δe为修正向量包括:设置JJT(e+Δe)=JJTe+βe,则JJTΔe-βe=0;将JJT进行奇异值分解,得到JJT=UDVT,其中,U和VT分别为左奇异矩阵和右奇异矩阵的转置,D为对角矩阵;获得所述修正向量:Δe=VEUTβe,其中,将DT中的非零值替换为所述非零值的倒数得到矩阵E;将所述Δe输入所述预设迭代公式中,得到所述每次迭代用于更新的参数集:dθ=JT(I+VEUTβ)e,其中,I为单位矩阵。
[0014] 可选的,在本发明第一方面的第九种实现方式中,所述判断所述更新后的误差向量是否收敛于0包括:判断所述更新后的误差向量的模是否大于预设误差阈值;若是,则确定所述更新后的误差向量不收敛于0;若否,则获取当前迭代后的误差向量和上一次迭代后的误差向量,并根据预置公式对所述当前迭代后的误差向量和所述上一次迭代后的误差向量进行计算,得到计算结果;判断所述计算结果是否小于预置阈值;若是,则确定所述更新后的误差向量收敛于0;若否,则确定所述更新后的误差向量不收敛于0。
[0015] 可选的,在本发明第一方面的第十种实现方式中,所述根据预置公式对所述当前迭代后的误差向量和所述上一次迭代后的误差向量进行计算,得到计算结果包括:根据预置公式对所述上一次迭代后的误差向量Δ1和所述当前迭代后的误差向量Δ2进行计算,得到计算结果γ,所述预置公式为:
[0016]
[0017] 本发明第二方面提供了一种基于改进的反向运动学进行姿态解算的装置,包括:获取单元,用于获取预置关节点的旋转参数集、骨骼末端的当前位置和所述骨骼末端的目标位置,所述旋转参数集用于指示所述预置关节点的旋转量,所述骨骼末端根据所述旋转参数集从所述当前位置逐渐靠近所述目标位置;计算单元,用于根据所述骨骼末端的当前位置和所述旋转参数集计算得到雅可比矩阵以及所述雅可比矩阵的转置;根据所述骨骼末端的当前位置和所述骨骼末端的目标位置得到误差向量;迭代更新单元,根据所述误差向量、所述雅可比矩阵、所述雅可比矩阵的转置以及预置偏移向量更新所述骨骼末端的当前位置,判断更新后的误差向量的模是否减小,若是,则根据预设迭代公式更新所述旋转参数集,直到迭代次数不小于预设迭代阈值或者所述更新后的误差向量收敛于0时,停止迭代更新所述旋转参数集。
[0018] 本发明第三方面提供了一种基于改进的反向运动学进行姿态解算的设备,包括:存储器和至少一个处理器,所述存储器中存储有指令,所述存储器和所述至少一个处理器通过线路互连;所述至少一个处理器调用所述存储器中的所述指令,以使得所述基于改进的反向运动学进行姿态解算的设备执行上述第一方面所述的方法。
[0019] 本发明的第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述第一方面所述的方法。
[0020] 从以上技术方案可以看出,本发明具有以下优点:
[0021] 本发明提供的技术方案中,获取预置关节点的旋转参数集、骨骼末端的当前位置和所述骨骼末端的目标位置,所述旋转参数集用于指示所述预置关节点的旋转量,所述骨骼末端根据所述旋转参数集从所述当前位置逐渐靠近所述目标位置;根据所述骨骼末端的当前位置和所述旋转参数集计算得到雅可比矩阵以及所述雅可比矩阵的转置;根据更新所述预置关节点的旋转参数集,得到更新后的骨骼末端的当前位置;根据所述更新后的骨骼末端的当前位置和所述骨骼末端的目标位置得到误差向量;根据所述误差向量、所述雅可比矩阵、所述雅可比矩阵的转置以及预置偏移向量更新所述骨骼末端的当前位置,判断更新后的误差向量的模是否减小,若是,则根据预设迭代公式更新所述旋转参数集,直到迭代次数不小于预设迭代阈值或者所述更新后的误差向量收敛于0时,停止迭代更新所述旋转参数集。本发明实施例中,通过将雅可比矩阵的逆矩阵替换为雅可比矩阵的转置,避免了雅可比矩阵很可能不可逆的情况,同时通过预置偏移向量使得更新更具方向性,从而优化更新朝向之后,可使整个算法简单化、计算精度进一步提高,进而提高骨骼末端移动旋转到目标位置的精准度。

附图说明

[0022] 图1为本发明实施例中基于改进的反向运动学进行姿态解算的方法的一个实施例示意图;
[0023] 图2为本发明实施例中基于改进的反向运动学进行姿态解算的方法的另一个实施例示意图;
[0024] 图3为本发明实施例中基于改进的反向运动学进行姿态解算的装置的一个实施例示意图;
[0025] 图4为本发明实施例中基于改进的反向运动学进行姿态解算的装置的另一个实施例示意图;
[0026] 图5为本发明实施例中基于改进的反向运动学进行姿态解算的设备的一个实施例示意图。

具体实施方式

[0027] 本发明实施例提供了一种基于改进的反向运动学进行姿态解算的方法及相关设备,用于通过将雅可比矩阵的逆矩阵替换为雅可比矩阵的转置,避免了雅可比矩阵很可能不可逆的情况,同时通过预置偏移向量使得更新更具方向性,从而优化更新朝向之后,可使整个算法简单化、计算精度进一步提高,进而提高骨骼末端移动旋转到目标位置的精准度。
[0028] 为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例进行描述。
[0029] 本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”或“具有”及其任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
[0030] 为便于理解,下面对本发明实施例的具体流程进行描述,请参阅图1,本发明实施例中基于改进的反向运动学进行姿态解算的方法的一个实施例包括:
[0031] 101、获取预置关节点的旋转参数集、骨骼末端的当前位置和骨骼末端的目标位置,旋转参数集用于指示该预置关节点的旋转量,骨骼末端根据该旋转参数集也即随着预置关节点的旋转从当前位置逐渐靠近目标位置;
[0032] 服务器获取预置关节点的当前旋转参数集、骨骼末端的当前位置和骨骼末端的目标位置,旋转参数集用于指示所述预置关节点的旋转量,比如旋转量包含肩部、肘部、手腕、手指等身体各部分骨骼关节点分别在XYZ轴上的移动量,骨骼末端随着预置关节点的旋转从当前位置逐渐靠近目标位置。其中,骨骼末端随着预置关节点的旋转进行转动。具体的,服务器设置包含预置关节点的旋转参数集θ,θ为一个高维向量,整个骨架可依据该旋转参数集θ进行运动,以便从当前位置到达预期的目标位置,同时,服务器可检测到骨骼末端的当前位置为s、骨骼末端的目标位置为t。
[0033] 需要说明的是,反向动力学是依据骨骼末端位置来反求出上述旋转参数集θ,反向动力学工作效率高,大大减少了需要手动控制的关节数目。
[0034] 102、根据骨骼末端的当前位置和旋转参数集计算得到雅可比矩阵以及雅可比矩阵的转置;
[0035] 服务器根据骨骼末端的当前位置和旋转参数集计算得到雅可比矩阵以及雅可比矩阵的转置。具体的,服务器根据预置关节点的旋转参数集θ和骨骼末端的当前位置s进行计算,得到s关于θ的雅可比矩阵,并将雅可比矩阵设置为J;服务器对雅可比矩阵进行转置计算,得到雅可比矩阵的转置,并将雅可比矩阵的转置设置为JT。
[0036] 需要说明的是,在向量微积分中,雅可比矩阵是一阶偏导数以一定方式排列成的矩阵,其行列式称为雅可比行列式。雅可比矩阵的重要性在于它体现了一个可微方程与给出点的最优线性逼近,因此,雅可比矩阵类似于多元函数的导数。
[0037] 103、根据骨骼末端的当前位置和骨骼末端的目标位置得到误差向量;
[0038] 服务器根据骨骼末端的当前位置和骨骼末端的目标位置得到误差向量。其中,误差向量用于指示骨骼末端的当前位置和骨骼末端的目标位置之间的偏差值和方向。具体的,服务器比较骨骼末端的当前位置s和骨骼末端的目标位置t,得到当前误差向量e,该误差向量为e=t-s。
[0039] 可以理解的是,服务器根据预置关节点的旋转参数集和骨骼末端的当前位置计算得到更新后的骨骼末端的当前位置,更新后的骨骼末端的当前位置与骨骼末端的目标位置之间存在误差向量e,当误差向量e的模逐渐减小时,服务器确定骨骼末端的当前位置正在靠近骨骼末端的目标位置;当误差向量e的模逐渐增大时,服务器确定骨骼末端的当前位置正在远离骨骼末端的目标位置。
[0040] 104、根据误差向量、雅可比矩阵、雅可比矩阵的转置以及预置偏移向量更新骨骼末端的当前位置,判断更新后的误差向量的模是否减小,若是,则根据预设迭代公式更新旋转参数集,直到迭代次数不小于预设迭代阈值或者更新后的误差向量收敛于0时,停止迭代更新旋转参数集。
[0041] 根据步骤101-103求出的误差向量、雅可比矩阵、雅可比矩阵的转置以及另外预置偏移向量可更新骨骼末端的当前位置,即得出更新后的骨骼末端的当前位置,之后可求出更新后的误差向量,此时可判断更新后的误差向量的模是否减小。需要理解的是,通过先根据设定的迭代更新策略更新骨骼末端的当前位置之后,可用于求出误差向量,通过判断更新后的误差向量的模是否减小,才能确定该设定的更新策略是否有效。确定该设定的更新策略有效之后,则根据预设迭代公式来更新旋转参数集,即求解出骨骼中各关节点的旋转信息,一直到迭代次数不小于预设迭代阈值,或者更新后的误差向量收敛于0时,就停止迭代更新旋转参数集,通过骨骼末端的运动轨迹便反向推导出骨骼中各关节点的旋转信息。
[0042] 可以理解的是,迭代次数越多消耗的时间就越久,图像的帧率从而下降,影响图像流畅性,因此,本实施例为保证帧率,设置了迭代上限阈值,当迭代次数超过了该预设迭代阈值,则无论误差向量是否收敛于0均自动停止迭代,其中,迭代次数的初始值为0。具体的,服务器重复执行步骤101至步骤104,直到迭代次数不小于预设迭代阈值或者误差向量收敛于0时,停止迭代更新旋转参数集。
[0043] 可以理解的是,当误差向量收敛于0时,服务器确定骨骼末端精准地旋转移动到目标位置。例如,服务器检测到更新后的误差向量的模为0.0001,服务器确定该误差向量收敛于0,从而确定骨骼末端的当前位置到达目标位置。也就是通过设定迭代更新策略使得误差向量逐渐收敛于0,从而求得旋转参数集θ,完成反向运动学的求解。
[0044] 本发明实施例中,通过将雅可比矩阵的逆矩阵替换为雅可比矩阵的转置,避免了雅可比矩阵很可能不可逆的情况,同时通过预置偏移向量使得更新更具方向性,从而优化更新朝向之后,可使整个算法简单化、计算精度进一步提高,进而提高骨骼末端移动旋转到目标位置的精准度。
[0045] 请参阅图2,本发明实施例中基于改进的反向运动学进行姿态解算的方法的另一个实施例包括:
[0046] 201、获取预置关节点的旋转参数集、骨骼末端的当前位置和骨骼末端的目标位置,旋转参数集用于指示预置关节点的旋转量,骨骼末端根据旋转参数集从当前位置逐渐靠近目标位置;该步骤与步骤101相同,此处不再赘述。
[0047] 202、根据骨骼末端的当前位置和旋转参数集计算得到雅可比矩阵以及雅可比矩阵的转置;
[0048] 服务器根据骨骼末端的当前位置和旋转参数集计算得到雅可比矩阵J以及雅可比矩阵的转置JT。其中,雅可比矩阵是一阶偏导数以一定方式排列成的矩阵,其行列式称为雅可比行列式。雅可比矩阵的重要性在于它体现了一个可微方程与给出点的最优线性逼近,因此,在向量微积分中,雅可比矩阵类似于多元函数的导数。
[0049] 服务器对雅可比矩阵进行转置计算,得到雅可比转置矩阵。可以理解的是,理论上,误差向量e可以理解为e=Jdθ(解析表达式),dθ=J-1e,由此可以解得dθ,从而确定关节-1点的旋转信息,但J 为J的逆矩阵,J很可能不可逆,并且,当J维度大时,求其逆矩阵需要消耗大量计算力,会影响实时性。因此,需要尽量避免求J-1,其中一种避开J-1的方式为用J的转置JT替换J-1,即令dθ=JTe来解算出关节点的旋转信息。
[0050] 203、根据骨骼末端的当前位置和骨骼末端的目标位置得到误差向量;
[0051] 服务器根据骨骼末端的当前位置和骨骼末端的目标位置得到误差向量。其中,误差向量用于指示骨骼末端的当前位置和骨骼末端的目标位置之间的偏差值和方向。具体的,服务器将骨骼末端的目标位置设置为t;服务器比较骨骼末端的当前位置s和骨骼末端的目标位姿t,得到误差向量e。
[0052] 可以理解的是,当误差向量e的模逐渐减小时,服务器确定骨骼末端的当前位置正在靠近骨骼末端的目标位置;当误差向量e的模逐渐增大时,服务器确定骨骼末端的当前位置正在远离骨骼末端的目标位置。随着迭代更新的进行,更新后的骨骼末端的当前位置越来越靠近骨骼末端的目标位置。
[0053] 204、根据误差向量、雅可比矩阵、雅可比矩阵的转置以及预置偏移向量更新骨骼末端的当前位置;
[0054] 本实施例中,根据更新公式可以逐步更新骨骼末端的当前位置,该更新公式为:s′=s+α(JJTe+βe),0<α<1,其中,s′为更新后的骨骼末端的当前位置,s为骨骼末端的当前位置,e为误差向量、J为雅可比矩阵、JT为雅可比矩阵的转置,βe为预置偏移向量,也就是说,在获得误差向量、雅可比矩阵、雅可比矩阵的转置基础上,通过引入βe来更新骨骼末端的当前位置,可使当前位置的更新更具方向性。需要说明的是,更新后的骨骼末端的当前位置s′也可以通过s′=s+αJdθ,0<α<1求得,即理论上Jdθ=JJTe+βe,dθ与姿态信息相关。此处由于是运用反向运动学原理求解未知的关节点的姿态信息,所以dθ是未知的。
[0055] 通过设置预置偏移向量中的β可实现更新骨骼末端的当前位置,且初始设置的β值大于0,其中β随迭代改变数值,若误差向量e的模不断减小,则β不断增大,若误差向量e的模增大,则β取负值。例如,服务器第一次迭代计算得到误差向量e的模为1,服务器第二次迭代计算得到误差向量e的模为2,说明误差增大,则服务器直接将β设置为-1;若服务器第一次迭代计算得到误差向量的模为1,服务器第二次迭代计算得到误差向量的模为0.8,说明误差在减小,则服务器接下来可不断增大β的值。
[0056] 可以理解的是,更新后的骨骼末端的当前位置逐渐靠近骨骼末端的目标位置,同时通过不断调整预置偏移向量,确保更新后的骨骼末端的当前位置沿着误差向量的方向靠近目标位置。
[0057] 服务器可以根据更新后的骨骼末端的当前位置逆向推出人体骨骼链上预置关节点的当前姿态即旋转信息,例如,服务器控制角色的手臂去触碰一个固定的物体,就是调整手臂的当前位置以达到目标位置,通过该当前位置可以逆向解算出手臂关节点的姿态信息。
[0058] 205、判断更新后的误差向量的模是否减小;
[0059] 更新骨骼末端的当前位置后可得到更新后的骨骼末端的当前位置,根据更新后的骨骼末端的当前位置和骨骼末端的目标位置确定更新后的误差向量;其中,更新后的误差向量e′为更新后的骨骼末端的当前位置s′和骨骼末端的目标位置t之间的差值:e′=t-s′。可以理解的是,当误差向量的模不断减小时,表示更新后的骨骼末端的当前位置逐渐接近骨骼末端的目标位置。
[0060] 判断更新后的误差向量e′的模与上一次迭代产生的误差向量e的模相比是否减小;
[0061] 若是,则确定引入所述预置偏移向量βe的更新策略有效,若否,则确定无效,即通过判断误差向量的模是否减小来确定更新策略是否有效。
[0062] 206、若确定引入预置偏移向量βe的更新策略有效,则根据预设迭代公式更新旋转参数集;
[0063] 本实施例中,若确定引入预置偏移向量βe的更新策略有效,可首先根据预设迭代公式计算得出每次迭代用于更新的参数集dθ(与姿态信息相关);具体的,设置预设迭代公式:Jdθ=JJT(e+Δe),则根据该预设迭代公式可得出dθ,其中,Δe为修正向量。需要说明的是,在得出每次迭代用于更新的参数集dθ之前,需要通过验证骨骼末端当前位置更新后对应的误差向量的模是否有所减小,才能进行下一步求解出dθ的步骤,若是,表明引入预置偏移向量βe的更新策略有效,接下来才能求出dθ,以达到通过反向运动学解算出姿态信息的目的。
[0064] 如前所述,虽然可令dθ=JTe,但由于JT显然不等于J-1,若根据s′=s+αJdθ=s+αJJTe,采用JT只能保证s在靠近t,不能保证更新后的当前位置s′一定能到达目标位置t,即仅仅以JT替换J-1更新当前位置的确能使s′靠近t,但是更细究的话,s靠近t的最优途径应该是沿着e的方向靠近,而此时Jdθ=JJTe只是与e大方向一致,即两者内积为正数,两者朝向的差异即夹角可能较大,最终可能无法达到令人满意的结果。
[0065] 因此,为了提高算法精确度,可以让两个高维向量在高维空间的朝向更一致,即两者夹角更小,这样才能够让当前位置的更新更具方向性。此时需要设置一预置偏移向量βe,其中,β随迭代更新改变数值,若误差向量e的模增大,则确定Jdθ与e的朝向不一致,两者夹角增大,通过调整预置偏移向量中的β值能够减小夹角,也就是引入预置偏移向量使得更新更有方向性,提高了迭代效率,进一步地,通过βe能缩小Jdθ与e的朝向差异,即令Jdθ=JJTe+βe,但根据此等式仍然需要用到J-1来求dθ,为避免用到J-1,进一步引入修正向量Δe,设置T T预设迭代公式为:Jdθ=JJ (e+Δe),则求出dθ=J (e+Δe)。由于修正向量Δe为未知,Δe求解方法为:
[0066] 设置JJT(e+Δe)=JJTe+βe,则JJTΔe-βe=0;将JJT进行奇异值分解,得到JJT=UDVT,其中,U和V分别为左奇异矩阵和右奇异矩阵,D为对角矩阵,右上角标T代表转置符号;根据U、D、V即可获得修正向量:Δe=VEUTβe,其中,将DT中的非零值替换为该非零值的倒数可得到矩阵E,由此便求出Δe;然后将Δe输入预设迭代公式中,得到每次迭代用于更新的参数集:dθ=JT(e+Δe)=JT(I+VEUTβ)e,其中,I为单位矩阵。
[0067] 求出dθ后,便可得到更新后的旋转参数集θ′,则θ′=θ+dθ,其中,θ为旋转参数集,获得θ′就代表解算出骨骼中关节点的旋转(姿态)信息了。之后便根据迭代步骤,经过多次迭代后获得期望的旋转参数集θ′,这里的期望旋转参数集指骨骼末端当前位置到达目标位置时所对应的骨骼关节点的旋转(姿态)信息。
[0068] 207、获取迭代次数,并对迭代次数进行加1计算,迭代次数的初始值为0;
[0069] 服务器获取迭代次数,并对迭代次数进行加1计算,迭代次数的初始值为0。例如,当迭代次数的初始值为0时,服务器进行第一次更新骨骼末端的当前位置后,迭代次数为1;服务器进行第二次更新骨骼末端的当前位置后,迭代次数为2,以此类推,服务器每次更新骨骼末端的当前位置后,对迭代次数进行加1计算。
[0070] 208、判断迭代次数是否小于预设迭代阈值;
[0071] 服务器判断迭代次数是否小于预设迭代阈值。其中,预设迭代阈值用于确保图像帧率。例如,服务器设置预设迭代阈值为50,当迭代次数从0累计到49时,服务器确保迭代次数小于预设迭代阈值。
[0072] 209、若迭代次数不小于预设迭代阈值,则停止迭代更新旋转参数集;
[0073] 例如,服务器设置预设迭代阈值为50,当迭代次数从0累计到50时,服务器确定迭代次数不小于预设迭代阈值,此时直接停止迭代更新旋转参数集,即无论骨骼末端是否到达目标位置,均停止迭代计算旋转参数集。
[0074] 210、若迭代次数小于预设迭代阈值,则判断更新后的误差向量是否收敛于0;
[0075] 若迭代次数小于预设迭代阈值,则说明还可以继续迭代,服务器判断更新后的误差向量是否收敛于0。具体的,服务器判断更新后的误差向量的模是否小于或者等于预设误差阈值;若更新后的误差向量的模大于预设误差阈值,则服务器确定更新后的误差向量不收敛于0;若更新后的误差向量的模小于或者等于预设误差阈值,则服务器获取当前迭代后的误差向量和上一次迭代后的误差向量,并根据预置公式对当前迭代后的误差向量和上一次迭代后的误差向量进行计算,得到计算结果;判断计算结果是否小于预置阈值;若计算结果大于或者等于预置阈值,则确定更新后的误差向量不收敛于0;若计算结果小于预置阈值,则确定更新后的误差向量收敛于0。
[0076] 进一步地,服务器根据预置公式对上一次迭代后的误差向量Δ1和当前迭代后的误差向量Δ2进行计算,得到计算结果γ,预置公式为:
[0077]
[0078] 可以理解的是,该判断过程可以设置一定的判断阈值范围,比如更新后的误差向量的模小于预设误差阈值5mm,并且根据预置公式计算得到计算结果γ为0.000000001,计算结果小于预置阈值0.00000001,可以认为满足收敛于0的条件,说明,更新后的当前位置已到达目标位置。
[0079] 211、若更新后的误差向量收敛于0,则停止迭代更新旋转参数集,若否,则继续迭代更新旋转参数集。
[0080] 若更新后的误差向量收敛于0,则服务器停止迭代计算旋转参数集,若否,则继续迭代计算旋转参数集,即循环进行步骤201-211的操作。
[0081] 需要说明的是,对于多关节的人体骨骼链迭代更新,可以从人体骨骼链的骨骼末端开始,逐步改变每个关节的旋转角度,其中人体骨骼链包括根节点、各个中间关节点和骨骼末端。具体的,首先旋转骨骼末端的关节,得到骨骼末端的当前位置;若骨骼末端的当前位置没有达到骨骼末端的目标位置,则获取当前关节的上一关节,改变当前关节上一关节的旋转角度,直到人体骨骼链的根节点。若骨骼末端的当前位置还没有达到骨骼末端的目标位置,则又从骨骼末端的关节点开始旋转角度,直到骨骼末端的当前位置和骨骼末端的目标位置之间的误差向量趋近于0,停止迭代更新骨骼末端的当前位置,同时停止迭代计算旋转参数集。
[0082] 本发明实施例中,通过将雅可比矩阵的逆矩阵替换为雅可比矩阵的转置,避免了雅可比矩阵很可能不可逆的情况,同时通过预置偏移向量使得更新更具方向性,从而优化更新朝向之后,可使整个算法简单化、计算精度进一步提高,进而提高骨骼末端移动旋转到目标位置的精准度,并且,进一步引入修正向量后,便于解算出期望的旋转参数集。
[0083] 上面对本发明实施例中基于改进的反向运动学进行姿态解算的方法进行了描述,下面对本发明实施例中基于改进的反向运动学进行姿态解算的装置进行描述,请参阅图3,本发明实施例中基于改进的反向运动学进行姿态解算的装置的一个实施例包括:
[0084] 获取单元301,用于获取预置关节点的旋转参数集、骨骼末端的当前位置和骨骼末端的目标位置,旋转参数集用于指示预置关节点的旋转量,骨骼末端根据旋转参数集从当前位置逐渐靠近目标位置;
[0085] 计算单元302,用于根据骨骼末端的当前位置和旋转参数集计算得到雅可比矩阵以及雅可比矩阵的转置;根据骨骼末端的当前位置和骨骼末端的目标位置得到误差向量;
[0086] 迭代更新单元303,用于根据误差向量、雅可比矩阵、雅可比矩阵的转置以及预置偏移向量更新骨骼末端的当前位置,并判断更新后的误差向量的模是否减小,若是,则根据预设迭代公式更新旋转参数集,直到迭代次数不小于预设迭代阈值或者更新后的误差向量收敛于0时,停止迭代更新旋转参数集。
[0087] 本发明实施例中,通过将雅可比矩阵的逆矩阵替换为雅可比矩阵的转置,避免了雅可比矩阵很可能不可逆的情况,同时通过预置偏移向量使得更新更具方向性,从而优化更新朝向之后,可使整个算法简单化、计算精度进一步提高,进而提高骨骼末端移动旋转到目标位置的精准度,并且,进一步引入修正向量后,便于解算出期望的旋转参数集。
[0088] 请参阅图4,本发明实施例中基于改进的反向运动学进行姿态解算的装置的另一个实施例,
[0089] 参照图3中的迭代更新单元303还包括:
[0090] 迭代更新子单元3031,用于根据更新公式更新骨骼末端的当前位置,更新公式为:s′=s+α(JJTe+βe),0<α<1,其中,s′为更新后的骨骼末端的当前位置,s为骨骼末端的当T
前位置,e为误差向量、J为雅可比矩阵、J为雅可比矩阵的转置,βe为预置偏移向量;设置预置偏移向量中的β初始值大于0,其中β随迭代改变数值,若误差向量e的模不断减小,则β不断增大,若误差向量e的模增大,则β取负值。
[0091] 迭代计算子单元3032,用于根据更新后的骨骼末端的当前位置和所述骨骼末端的目标位置之间的差值,得到更新后的误差向量。
[0092] 判断子单元3033,用于判断更新后的误差向量的模与上一次迭代产生的误差向量的模相比是否减小;若是,则确定引入预置偏移向量βe的更新策略有效,若否,则确定无效;若确定引入预置偏移向量βe的更新策略有效,则根据预设迭代公式更新旋转参数集;获取迭代次数,并对迭代次数进行加1计算,迭代次数的初始值为0;判断迭代次数是否小于预设迭代阈值;若迭代次数不小于预设迭代阈值,则停止迭代更新旋转参数集;若迭代次数小于预设迭代阈值,则判断更新后的误差向量是否收敛于0;若更新后的误差向量收敛于0,则停止迭代更新旋转参数集,若否,则继续迭代更新旋转参数集,即循环进行步骤201-211的操作。
[0093] 可选的,迭代更新子单元3031还可以具体用于:
[0094] 根据预设迭代公式计算得出每次迭代用于更新的参数集;设置预设迭代公式为:Jdθ=JJT(e+Δe),dθ为每次迭代用于更新的参数集,则根据预设迭代公式得出dθ,其中,Δe为修正向量;进一步地,为求出Δe,设置JJT(e+Δe)=JJTe+βe,则JJTΔe-βe=0;将JJT进行奇异值分解,得到JJT=UDVT,其中,U和VT分别为左奇异矩阵和右奇异矩阵的转置,D为对T T
角矩阵;获得修正向量:Δe=VEUβe,其中,将D中的非零值替换为该非零值的倒数可得到矩阵E;将计算出的Δe输入预设迭代公式中,得到每次迭代用于更新的参数集:dθ=JT(I+VEUTβ)e,其中,I为单位矩阵;最后根据求出的每次迭代用于更新的参数集得到更新后的旋转参数集θ′,则θ′=θ+dθ,其中,θ为旋转参数集,dθ为每次迭代用于更新的参数集。
[0095] 可选的,判断子单元3033还可以具体用于:
[0096] 判断更新后的误差向量的模是否大于预设误差阈值;
[0097] 若更新后的误差向量的模大于预设误差阈值,则确定更新后的误差向量不收敛于0;
[0098] 若更新后的误差向量小于或者等于预设误差阈值,则获取当前迭代后的误差向量和上一次迭代后的误差向量,并根据预置公式对当前迭代后的误差向量和上一次迭代后的误差向量进行计算,得到计算结果;
[0099] 判断计算结果是否小于预置阈值;
[0100] 若计算结果大于或者等于预置阈值,则确定更新后的误差向量不收敛于0;
[0101] 若计算结果小于预置阈值,则确定更新后的误差向量收敛于0。
[0102] 可选的,迭代计算子单元3032还可以具体用于:
[0103] 根据预置公式对上一次迭代后的误差向量Δ1和当前迭代后的误差向量Δ2进行计算,得到计算结果γ,预置公式为:
[0104]
[0105] 本发明实施例中,通过将雅可比矩阵的逆矩阵替换为雅可比矩阵的转置,避免了雅可比矩阵很可能不可逆的情况,同时通过预置偏移向量使得更新更具方向性,从而优化更新朝向之后,可使整个算法简单化、计算精度进一步提高,进而提高骨骼末端移动旋转到目标位置的精准度,并且,进一步引入修正向量后,便于解算出期望的旋转参数集。
[0106] 上面图3和图4从模块化功能实体的角度对本发明实施例中的基于改进的反向运动学进行姿态解算的装置进行详细描述,下面从硬件处理的角度对本发明实施例中基于改进的反向运动学进行姿态解算的设备进行详细描述。
[0107] 图5是本发明实施例提供的一种基于改进的反向运动学进行姿态解算的设备的结构示意图,该设备500可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(central processing units,CPU)501(例如,一个或一个以上处理器)和存储器509,一个或一个以上存储应用程序507或数据506的存储介质508(例如一个或一个以上海量存储设备)。其中,存储器509和存储介质508可以是短暂存储或持久存储。存储在存储介质508的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对基于改进的反向运动学进行姿态解算的设备中的一系列指令操作。更进一步地,处理器501可以设置为与存储介质508通信,在基于改进的反向运动学进行姿态解算的设备500上执行存储介质
508中的一系列指令操作。
[0108] 基于改进的反向运动学进行姿态解算的设备500还可以包括一个或一个以上电源502,一个或一个以上有线或无线网络接口503,一个或一个以上输入输出接口504,和/或,一个或一个以上操作系统505,例如Windows Serve,Mac OS X,Unix,Linux,FreeBSD等等。
本领域技术人员可以理解,图5中示出的基于改进的反向运动学进行姿态解算的设备结构并不构成对基于改进的反向运动学进行姿态解算的设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
[0109] 所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0110] 在本发明所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0111] 所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0112] 另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0113] 所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read-only memory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
[0114] 以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。