介绍
逆运动学,這個字分為兩部份,运动学代表物體运动(包括旋转,位移,缩放),而"逆"则是指我们不控制手臂每个关节的旋转位移缩放。逆向运动学是反過來使用終點位置何驱动这些关节的旋转位移缩放。 整个世纪以来,数学家和工程师一直在开发无数解决方案。大多数3D建模软件和游戏引擎(包括Unity)都带有多个工具,可用于操纵不同的東西(例如机械臂,尾巴,触手,机翼等)。但是,这样是有代价的,這就是效率。它太耗时又昂贵,无法同时用作多个角色。 这一讲第一節是一個专门针对两个自由度的手臂的逆运动学。您可以运行多个人物的IK。
逆运动学(Inverse Kinematic)
我们想像一下有机械臂,机械臂有两个部份和两个关节,如下图所示。我们要控制末端的执行器(Effector)。因為我们无法直接控制末端(Effector)的位置,只能改變关节的旋转(Rotation)。逆运动学解決的问题是從末端(Effector)的位置找到关节旋转數據。
这个算法仅适用于带有两个关节的。我們可以将有两个自由度的手臂建模为三角形。
两个关节A和B(均为黑色)可以分别旋转A度和B度。这导致末端执行器(EFFECTOR)移动到最終位置。
内角
我们可以使用三个点A,B和C构造一个内角为 α \alpha α , β \beta β 和 γ \gamma γ 的三角形,如下图所示。
我们知道所有边的长度。AB段代表手臂,长度为c;BC段代表前臂,长度为a;CA线段代表肩关节和手之间的距离,长度为b。因為知道三角形的三个边就足以找到其所有角度。控制手所需的两个角度是 α \alpha α , β \beta β和。 γ \gamma γ 代入来找到。我们也可以再次用余弦定律来找到