正向运动学和反向运动学

上次制作的骨骼动画例子程序并不完美,我在程序里面也说了,因为没有牵涉到反向运动学的知识,所以人物运动起来感觉脚无法收缩、头发无法飘逸的感觉。其实在现实中这样的情况是要避免的,但是由于在动画设计的时候要指定每一个关节,显得非常费事。所以引入了反向运动学这个概念。在介绍反向运动学之前,首先让我们看一下正向运动学。

原创文章,反对未声明的引用。原博客地址:http://blog.csdn.net/gamesdev/article/details/13991063

正向运动学,通俗来说是给定父骨骼位置以及它的变换来得出子骨骼的位置以及变换,打一个比方,就像运动手臂,可以带动手肘,进而带动手掌运动。正向运动学的概念是非常容易理解的,实现起来也比较方便,即在场景中先绘制父骨骼,应用父骨骼的变换,然后根据这个变换绘制子骨骼,以此类推。我们可以用下面伪代码来表示:

PushMatrix( );RenderParentBone( );ApplyParentTransform( );PushMatrix( );RenderChildBone( );ApplyChildTransform( );……PopMatrix( );
PopMatrix( );

反向运动学(InverseKinematics),又称逆运动学,与正向运动学的概念不同,是以子骨骼的位置和变换反推父骨骼的位置和变换,相比正向运动学来说,概念稍难理解。同样打一个比方,我们拽着玩具机械臂的一头进行运动,可以看到机械臂的各个关节都跟着进行运动。下面有几个视频介绍了反向运动学,大家可以看看。

反向运动学的概念知道了后,我们该思考一下如何实现反向运动学,即给定n个骨骼以及n-1个关节形成一个关节链,已知末端关节的位置和首端关节的位置求出中间关节的位置。目前网络上有关反向运动学的资料偏少,可能这是一个存在时间并不长的课题吧。我所看到的中文资料仅限于二维的AS3相关实现,于是开始研究在三维条件下反向运动学的实现。

这里有一些参考资料,如果大家感兴趣的话,可以下载,我也是在研究这么多资料之后才开始着手实现的。

解决三维中反向运动学的问题的方法是分析型(一称解析型)的和数值型方法。分析型的方法给出了一个完整的求解思路,可是求解的效率不高,尤其是反向运动学的关节链很长的时候,在实时演算的领域(比如说游戏领域)就不是一个可行的方法。数值型方法是一个好方法,它类似于启发式搜索的方法,即先试错然后逐步修正,最终得到近似解。下面简单介绍一下数值型方法中两种解法:循环坐标下降(cyclic coordinate decent)法和雅可比矩阵(Jacobian matrix)法。

雅可比矩阵法描述了整个关节链,每一个矩阵的列表示了每个关节的末端变化。解雅可比矩阵可不是一件容易事情,所以这只在非实时领域或者高级IK解算器中会得到使用。

循环坐标下降法是一种简单而可行的办法,它由关节链的末端出发,层层向上递推旋转到目标位置,而且层层迭代以确保准确性,但是效果可能并不好,常常发生在与末端关节连接的关节上,导致的是扭转变形的关节链。但是速度还是有保证的。

我在研究了几种方法之后觉得还是从循环坐标下降方法开始研究,于是在参考资料和前辈们的源码帮助下制作出了下面的演示程序。

正向运动学和反向运动学相关推荐

  1. Udacity机器人软件工程师课程笔记(十五)-运动学-正向运动学和反向运动学(其二)-DH参数等

    正向运动学和反向运动学 目录 2D中的旋转矩阵 sympy包 旋转的合成 旋转矩阵中的欧拉角 平移 齐次变换及其逆变换 齐次变换的合成 Denavit-Hartenberg 参数 DH参数分配算法 正 ...

  2. Udacity机器人软件工程师课程笔记(十四)-运动学-正向运动学和反向运动学(其一)

    正向运动学和反向运动学 目录 2D中的旋转矩阵 sympy包 旋转的合成 旋转矩阵中的欧拉角 平移 齐次变换及其逆变换 齐次变换的合成 Denavit-Hartenberg 参数 DH参数分配算法 正 ...

  3. Udacity机器人软件工程师课程笔记(十八)-机械臂仿真控制实例(其三)-KR210机械臂反向运动学

    机械臂仿真控制实例(其二)-KR210正向运动学 目录 反向运动学概述 为Kuka KR210创建IK解算器 1.反向运动学概述 KR210的最后三个关节是满足三个相邻的关节轴线在单点处相交的旋转关节 ...

  4. Blender终极角色创造:从初学者到专业人士

    Ultimate character creation in Blender: From beginner to pro 流派:电子学习| MP4 |视频:h264,1280×720 |音频:AAC, ...

  5. 游戏中反向运动学(ik)的研究与简介

    反向运动学(ik),英文名称是inverse kinematics,主要应用在机器人手臂操作及计算机动画等领域,它与正向运动学即fk是相反的过程,具体定义在此不多说,感兴趣的可以看下wikipedia ...

  6. 机械臂正向运动学原理通俗解释

    机械臂正向运动学理解原理通俗解释 正向运动学可以理解为关节运动量的传递. 定性理解:关节的运动量都是以在前面一个关节上建立的坐标系为参考旋转多少角度,一个关节运动会带动后面的关节运动,会导致固定在关节 ...

  7. 麦克纳姆轮底盘-正反向运动学-里程估计

    此篇博客转自本作者在古月居的博客:https://www.guyuehome.com/33978 前言: 大概在大一的时候由于Robocon比赛就开始调试麦克纳姆轮底盘.恰好,最近有个项目需要用到这个 ...

  8. motoman机器人正向运动学

    正向运动学 不用twist也不用D-Htable,直接随便建立坐标系,根据相邻坐标系之间的坐标变换,来计算总的变换.经试验,的确可行. %输入是各个关节的数值,输出(BASE)世界坐标系的6维向量 i ...

  9. 机器人学之运动学笔记【3】—— 机械臂DH表示法+正向运动学(Forward Kinematics)

    机器人学之运动学笔记[3]-- 机械臂DH表示法+正向运动学(Forward Kinematics) 1. 手臂几何描述方式 2. 改进DH法 描述机械臂 2.1 在连杆上建立Frame 2.2 D- ...

最新文章

  1. K12教育整体业务流程+涉及各类产品分析
  2. ASP.NET MVC下使用SWFUpload完成剪切头像功能
  3. java版spring cloud+spring boot+redis多租户社交电子商务平台 (十一)docker部署spring cloud项目...
  4. 网页标题设置,为什么在SERP中,显示结果不一致?
  5. 前端学习(665):逻辑中断逻辑或二
  6. PHP5.5中新增的参数跳跃和生成器功能介绍
  7. Linux rmdir命令:删除空目录
  8. iBatis in 语句参数传入方法
  9. QT中调用shell或外部命令
  10. 计算机一级考试基本操作是什么,计算机一级等级考试试题基本操作总结
  11. 对于幸福不是悖论的证明,在现代对于幸福探寻
  12. js 万年历农历转阳历 方法_JavaScript实现公历转农历功能示例
  13. 计算机无法找到扫描仪和照相机,我的电脑不显示扫描仪和摄像头的原因及解决方法...
  14. DEDE自动调用轮播图/幻灯片
  15. vscode设置启动时不打开上一次目录
  16. a as as big rat_亲子阅读《Big,bad bug》大坏虫
  17. 阿里巴巴“新18罗汉”养成记
  18. 电脑服务器独立显卡显示配置,电脑显卡装完驱动,英伟达显示设置不可用解决方发...
  19. 里约奥运|高科技助力 本届奥运会有待打破更多记录
  20. html是什么的理解

热门文章

  1. 程序员菜鸟到高手的11个阶段,你处于哪个阶段?
  2. skynet源码阅读7--死循环检测
  3. 魔术方法 :__callStatic( )实例详解
  4. 详解Paint的setColorFilter(ColorFilter filter)
  5. Windows下MYSQL数据库BOOT密码的修改方法
  6. 渣渣的leetcode刷题笔记-树(1)
  7. Java排序之归并排序
  8. tomcat 原理与使用资料
  9. 单表的更新UPDATE和删除记录DELETE(二十六)
  10. C++两种单例(饿汉式,懒汉式)