角色动画研究 —— 使用雅可比矩阵(Jacobian)来结算IK
来源:互联网 发布:2016网络在逃人员查询 编辑:程序博客网 时间:2024/06/13 00:34
这篇博客介绍了如何通过雅可比行列式来进行IK的结算。
雅可比矩阵
在IK结算中,如果骨骼的架构比较复杂,那么往往几何分析的结算方法就不太现实了。此时通常使用数值方法让其自己构建出来 —— 在每个时间步长的时候进行对应的计算来得到此时每一个骨节的角度应该进行怎样的改变。在这些数值方法中比较好用的就是使用雅可比矩阵(Jacobian)来进行结算。
从数学意义上来解释雅可比矩阵,我们可以想象有6个函数,每个函数对应着有6个变量。那么针对每个输入变量
因此
因此结合上面的方程,我们可以将上面的方程写为向量的形式:
函数
在某个时间步长,雅可比矩阵其实也就是针对于
雅可比矩阵与动力学
雅可比矩阵的解释
当雅可比矩阵被用在机械臂&动力学&铰链结构时,此时输入的向量
针对于雅可比矩阵与机械臂的分析,在百度文库上有一篇讲述的很详细的PPT,传送门。
在这种情况下,雅可比矩阵实际上真正要表述的是各个关节的角度变化率敲黑板。
向量
而
针对于n关节的骨骼架构,雅可比矩阵应该是6*n的形式。
因此针对于不同的骨骼架构,雅可比矩阵的形式也不一样。例如针对铰链关节(revolute joint),终端的朝向变化率基本上就是关节基于回转轴的角速度
雅可比矩阵示例
考虑一个如下图的三臂铰链关节,所有的关节都约束在xy平面上,所有的约束轴向量都是
在这个示例中,终端关节
由于不考虑目标的朝向应该是哪里,那么
同样的,根据约束条件,可以很容易的计算出各个角速度:
那么根据
矩阵的求解
正如之前所说,根据方程需要求得
因此:
但是就如上面所说的,通常的雅可比矩阵不一定是n*n形式的,所以此时的求解需要使用到线性代数中的广义逆(pseudoinverse)。
广义逆
矩阵的广义逆指的是在矩阵
或:
而
或:
具体的广义逆的解释这里就略过了,有兴趣的读者可以去自行查阅资料,传送门。
推导过程
具体的推导过程如下:
假设此时
展开
将
针对于上面的等式,令
最终得到:
骨节迭代Integration
正常的Integration方法都可以用于骨骼的迭代,例如Euler Integration或者Verlet Integration等…… 但是需要注意的是,雅可比矩阵在下一个时间步长的时候已经改变了所以需要进行一次重新的计算。这个过程一直持续到终端骨节与目标位置的差值已经到了一个可以接受的误差范围为止。
下图展示了一个臂长分别为15,10,5的机械臂。初始的pose角度分别为
当然,需要注意的是有时矩阵依然可能会出现奇异性的状况。有人提出一种方法是使用最小二乘法来进行优化,公式如下:
但是这种方法可能会对迭代的收敛性有影响,因此这个方法到底是不是好也有争论。下图展示了是否使用最小二乘法来进行迭代结算的两种情况:
在这种情况下,目标位置是
使用雅可比矩阵的转置而不是逆
在线性代数中求逆的工作量是很大的,因此有一种可选择的方法是使用雅可比矩阵的转置而不是逆矩阵来进行结算:
这种方法可以免去求逆或广义逆的计算量,但是可能存在的风险是终端骨节可能不够稳定。具体的分析这里略过,可能日后会另开博客讲解。
下图是使用转置矩阵的效果图:
额外收获
在研究雅可比矩阵的结算的过程中,我最大的额外收获应该是广义逆的使用。回想起有一段时间再研究Laplacian Mesh Editing的过程中,似乎也可以使用广义逆来进行非n*n形式矩阵的求逆呢……
<全文完>
- 角色动画研究 —— 使用雅可比矩阵(Jacobian)来结算IK
- 角色动画研究 —— IK的三种结算方法
- 雅可比(Jacobian)矩阵
- 雅可比矩阵
- 雅可比矩阵
- 雅可比矩阵
- matlab 雅可比矩阵求取
- 雅可比矩阵matlab实现
- Overview of Jacobian IK
- 雅克比(Jacobian)矩阵
- 雅可比矩阵 和 海森矩阵
- 雅可比矩阵 和 海森矩阵
- 雅可比矩阵和海森矩阵
- 雅可比矩阵 和 海森矩阵
- 雅可比矩阵和Hessian矩阵
- Jacobian矩阵
- 雅可比(Jacobi)矩阵与行列式
- 运动学与雅可比矩阵举例
- 苹果 Mac app 所有常用软件下载资源(免费破解版)
- 【备忘】传智IOS7案例视频讲解 下载
- 通过jdbc对数据库操作
- matlab svm工具包配置
- js 判断是否数字
- 角色动画研究 —— 使用雅可比矩阵(Jacobian)来结算IK
- gitbook--好用的编写API文档工具
- Android解决图片上传过大问题
- GetMessage
- Android中的自定义属性
- android上传接口(有汉字)出现乱码解决方法
- 自动解析绑定内容中的html
- centos 安装mongoDB
- Git使用(本地仓库) 主分支