带角度约束的2D FABRIK逆运动学是否存在类万向锁已知问题?
我正在实现一个大量运用逆运动学的2D骨骼动画系统,选择FABRIK(Forward And Backward Reaching Inverse Kinematics)作为核心方案,因为它鲁棒性强且易于集成各类约束。
但添加角度约束后,出现了类似万向锁的问题——即使逆运动学问题存在有效解,骨骼关节系统仍容易陷入无法找到可行解的状态。我认为这不是FABRIK的实现问题,而是2D场景下算法本身的固有问题。
逆运动学的核心是找到骨骼与节点的配置,让末端执行器(effector)到达目标位置,系统中可能存在一个或多个固定根节点。单根节点场景下,FABRIK通过迭代两个阶段求解:
- 前向延伸阶段:从末端执行器向目标位置延伸,暂时忽略根节点固定限制,允许其移动
- 反向回溯阶段:从根节点向固定位置回溯修正
重复这个过程,直到末端执行器到达目标,或者在无解场景下,末端执行器的位置变化小于设定阈值。
通常算法的「延伸」子流程具有确定性,能保证收敛——迭代后根节点回归固定位置,末端执行器也会更接近目标。但添加角度约束后,一些非极端场景会导致迭代后末端执行器离目标更远,算法无法收敛。
我查阅了部分文献(如《Extending FABRIK with model constraints》),只看到FABRIK适配约束的相关结论,没找到针对这类锁定问题的研究。该问题常出现在包含至少两组父子角度约束及一个固定节点的场景中,以下是示例:
示例中,右上角节点是末端执行器,红色圆圈为目标位置。所有关节都带有角度约束(青色标注):骨骼相对父骨骼的旋转角度需在0°至90°之间。
- 初始状态:

- 可行解状态:

- 前向延伸后状态:

- 反向回溯后状态:

可以看到,该问题存在有效解,但经过前向延伸和反向回溯后,末端执行器的位置比初始状态离目标更远,继续迭代也无法解决问题。这是因为角度约束导致前向延伸时根节点大幅偏离固定位置,违背了算法迭代的启发式逻辑。
请问该问题是否已在学术文献中被描述或解决?
内容的提问来源于stack exchange,提问作者jwezorek

