正向运动学和反向运动学
上次制作的骨骼动画例子程序并不完美,我在程序里面也说了,因为没有牵涉到反向运动学的知识,所以人物运动起来感觉脚无法收缩、头发无法飘逸的感觉。其实在现实中这样的情况是要避免的,但是由于在动画设计的时候要指定每一个关节,显得非常费事。所以引入了反向运动学这个概念。在介绍反向运动学之前,首先让我们看一下正向运动学。
原创文章,反对未声明的引用。原博客地址: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解算器中会得到使用。
循环坐标下降法是一种简单而可行的办法,它由关节链的末端出发,层层向上递推旋转到目标位置,而且层层迭代以确保准确性,但是效果可能并不好,常常发生在与末端关节连接的关节上,导致的是扭转变形的关节链。但是速度还是有保证的。
我在研究了几种方法之后觉得还是从循环坐标下降方法开始研究,于是在参考资料和前辈们的源码帮助下制作出了下面的演示程序。
分享到:
相关推荐
正向运动学、逆向运动学、正向动力学(使用 Newton-Euler 算法)。 命名约定遵循 Siciliano 的书 ()。 依赖项: Peter Corke 的机器人工具箱 要运行解决方案,请按照 中的说明设置 Peter Corke 的机器人工具箱。 ...
使用WPF和helix-toolkit在C#中对机械臂进行3D模拟、正向和反向运动学_C#_下载.zip
1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码...4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
matlab资源 用于可配置机械臂仿真(从1ddl到6ddl)、正向和反向运动学的Matlab GUI仅供学习参考用代码
MATLAB中3DOF机械臂(平面和3d)的正向运动学和逆向运动学 FK3DOF -3自由度平面臂的正向运动学 FK3DOFE3自由度(3d)臂的前向运动 IK3DOF -3自由度平面臂的逆运动学 IK3DOFElbow -3自由度(3d)手臂的反向运动学 IK3...
3D正向和反向到达反向运动学的P5js / WEBGL实现。 介绍 由于最近二十年来自动化程度的大幅提高,机器人已成为我们生活中必不可少的一部分。 从工业装配线机器人到航天器对接臂的自动化系统包围着我们。 由于机器人...
本书中,作者首先清晰地介绍了所有相关的数学知识,然后引入了加速、速度向量、缓动、弹动、碰撞检测、动能守恒、3D、正向运动学和反向运动学等物理概念。
link1: 具有反向运动学PD-伪反向Jacobian和正向运动学Denavit Hartenberg的机器人操纵器控制。 链接2: 具有反向运动学PD-伪反向Jacobian和正向运动学Denavit Hartenberg的机器人操纵器控制。 影片示范:...
13.1 正向和反向运动学介绍 13.2 正向运动学编程准备 13.2.1 单关节运动 13.2.2 双关节的运动 13.3自动运行 13.3.1 创建自然的行走循环 13.3.2 动态调整 13.4 使它真正地行走 13.4.1 给它一些空间 13.4.2 加入重力 ...
六自由度机器人的正向和反向运动学仿真
该软件包具有以下特点: 1) UR5 运动学和反向运动学已被“混合”以提高性能。 2) UR5 机器人模型的高效、无滞后可视化。 我要感谢以下软件包的作者提供的软件包。 1) Oliver Woodford 的 C++ 类的示例 MATLAB 类...
在这里您可以找到 Delta 型机器人的正向运动学和反向运动学。 请注意如何在所附图片中找到参数“f”和“e”。
Matlab代码还涉及MeArm机器人的正向运动学和反向运动学。 该项目是我的机器人课程的开放式最终项目。 我想尝试使用EMG传感器进行控制,以实现涉及许多假肢的控制的非常简单的版本。 如果我可以基于一根肌肉来充分...
这是能够解决正向和反向运动学问题的 Puma 762 机械手的仿真。 该代码基于 Don Riley 的“3D Puma Robot Demo”。 对功能进行了一些更改,以便为逆运动学问题(位置和方向)提供更完整的解决方案。 GUI已通过一些新...
++代码的MEX接口来计算正向和反向运动学解决方案。 有很多方法可以在MATLAB中可视化机器人模型。 此类通过利用MATLAB提供的图形对象来有效地实现此目的。 关键优势在于,可以通过回调函数或对draw_configuration的调...
执行库 使用MATLAB软件的Exechon机器人正向和反向运动学
具有工作空间计算的6自由度臂的正向和反向运动学
正逆运动学模型 COMS 4160 PA2 README.txt Nicole Seleme (ns2873) ********************* 组件 ******************... ************** A 部分:正向运动学 ***************** 输入命令: COMMAND KEYBOARD KEY
运动学和动力学库 Orocos项目将提供实时可用的运动学和动力学代码,其中包含用于刚体运动学计算和运动结构及其反向和正向运动解算器表示的代码。 C ++库位于orocos_kdl文件夹中。 可以在找到安装说明。 python绑定...
Puma-Robot-Simulation:能够解决正向和反向运动学问题的Puma 762机械手的仿真