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

2023-11-07

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

2012-11-12 00:05 by 风恋残雪, 1469 阅读, 0 评论, 收藏编辑

 反向运动学(ik),英文名称是inverse kinematics,主要应用在机器人手臂操作及计算机动画等领域,它与正向运动学即fk是相反的过程,具体定义在此不多说,感兴趣的可以看下wikipedia对于ik的定义。本文主要讲述一下我所看过的求解ik的方法。求解Ik的方法主要分为两种,一种是分析法,即通过三角函数等进行分析计算,对于骨骼数少的可以进行此种运算,但是对于链很长的情况,用此方法就行不通,有些文章对此进行了改进,可以对多个骨骼进行分析计算得出结果,比如这篇文章:A 12-DOF Analytic Inverse Kinematics Solver for Human Motion Control[1],当然还有其他类似的文章,第二种方法就是数值方法,通过不断迭代运算求出一个近似解,这类方法比较多,同时也是普遍被接受的一类方法,比如CCD (cyclic coordinate descent)[2], Jacobian Transpose[3], pseudoinverse method[4], damped least squares methods[5], selectively damped least squares methods[6],比较详细的介绍可以在Introduction to Inverse Kinematics with JacobianTranspose, Pseudoinverse andDamped Least Squares methods这遍文章中看到,从后面的文献中可以看到你感兴趣的东西,下面就简单的介绍下各种方法。

1 CCD (cyclic coordinate descent),具体解释请看这里,作者已经解释的很详细了,很好的一篇文章,http://multi-crash.com/?p=45 ,作者也把他的动画库开源了,可以下载代码研究下,我也参考作者的代码实现了下,但是发现效果并不是特别好,这是ccd本身存在的问题,还有其他一些文章,比如Jeff Lander的Oh my God, I Inverseted kine!以及Making Kine More Flexible,这里详细得介绍了原理。

2 Jacobian Transpose. 雅可比转置矩阵是整个系统的偏导,它定义了末端效应器(end effector)如何基于整个系统的瞬时变换而变化。末端效应器就是指整个骨骼链的末端,比如你现在要对整个手臂做ik,那么手掌(假设手掌上只有一个骨骼)就是末端效应器。如下图1所示,此图来自Mathmatics for inverse kinematics,  Ming Yao,里面也有对ccd和jacobian transpose 以及pesudoinverse method的介绍,看完后能对求解Ik的三种方法有个大概了解。Jason CLark的inverse kinematics,以及Chris Hecker的My Adventure with  Inverse Kinematics。图2是雅可比矩阵的表示形式,具体求解方法可参照Ming Yao的Pdf,然后我们对求得的矩阵示转置,就可以得到要求的矩阵。

end effector 示例

图1. 末端效应器                          图2 雅可比矩阵

 

 

3 Pseudoinverse Jacobian. 由于上面求得的雅可比矩阵可能不为方阵,或者矩阵本身是奇异矩阵,所以不能直接求逆。求出的结果和推导过程如图3所示,具体请参考Ming Yao的pdf,或者[4]。

图3 Pseudoinverse Jacobian推导过程

 

4 damped least squares methods 和selectively damped least squares methods请参看文献里面的[5],[6],在[6]里面作者分别实现了Jacobian Transpose, pseudoinverse Jacobian, damped least squares methods,selectively damped least squares methods,并对其结果进行了分析,指出了他们的优缺点,以及各种方法适合在什么情况下使用,在此感谢作者无私的精神,把代码贡献出来。开源建模软件blender中也使用了这两种方法,具体可以看这里http://wiki.blender.org/index.php/User:Brecht/SummerOfCode2005/Inverse_Kinematics,因为是开源的,感兴趣的也可以看下blender实现部分的源代码。

游戏中用分析法以及简单的ccd就足够了(比如简单的游戏中角色的脚的放置问题),但就目前我用的ccd效果来看不是特别好,可能有些细节没有注意到。在ce3一个老版本中是只有分析法和ccd的,不过对于其中有些地方的处理不是特别清楚,如果有熟悉ce3 ik的大牛还请指导一下。:-),如果有时间的话可能把jacobian transpose, pseudoinverse jacobian, sdls集成进去看看效果与效率如何,是否适用于游戏中。

没什么实质性的东西,大多数都是我看过的文章及个人的理解,如有错误还请指正,希望对研究ik的朋友有所帮助。

此文并未完结,我会陆续把我个人在实现中遇到的问题和想法写到这。

参考文献:

[1] Xiaomao Wu, Lizhuang Ma, Zhihua Chen, Yan Gao, A 12-DOF Analytic Inverse Kinematics Solver for Human Motion Control  

[2] Li-Chun Tommy Wang and Chih Cheng Chen, A combined optimization Method for solving the inverse kinematics problems of mechanical manipulators  

[3] A. Balestrino, G. De Maria, and L. Sciavicco, Robust control of robotic manipulators

[4] D. E. Whitney, Resolved motion rate control of manipulators and human prostheses 

[5] C. W. Wampler, Manipulator inverse kinematic solutions based on vector formulations and damped least squares methods

[6] Samuel R. Buss, Jin-Su Kim, Selectively Damped Least Squares for Inverse Kinematics

作者: 风恋残雪

出处: http://www.cnblogs.com/ghl_carmack

关于作者:专注游戏引擎,关注VR,对操作系统、编译原理有深厚兴趣!

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 原文链接,否则保留追究法律责任的权利。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

游戏中反向运动学(ik)的研究与简介 的相关文章

  • Java线程池ThreadPoolExecutor应用(Spring Boot微服务)

    记录 475 场景 在Spring Boot微服务中使用Java线程池ThreadPoolExecutor 实现Runnable接口提交线程任务到线程池 版本 JDK 1 8 Spring Boot 2 6 3 1 使用注解配置线程池Thr
  • EMC定义 +EMC问题定位整改

    参考链接 强烈推荐 1 有源医疗器械电磁兼容入门知识汇总 2 电磁兼容EMC测试 电磁兼容整改 EMC整改 深圳第三方检测认证机构 3 EMC设计和整改 定位 专题 最重要 https blog csdn net lyh290188 cat
  • MATLAB的Structure数组

    数组的定义与调用 gt gt s struct a 1 4 7 2 9 3 Anne b James pi c magic 3 1 7 使用struct函数创建结构数组 gt gt s 1 1 a 1 2 ans 1 1 cell 数组 4
  • jdk和java什么关系_Java中JDK和JRE的区别是什么?它们的作用分别是什么?

    JDK和JRE是Java开发和运行工具 其中JDK包含了JRE 但是JRE是可以独立安装的 它们在Java开发和运行的时候起到不同的作用 1 JDK JDK是Java Development Kit的缩写 是Java的开发工具包 主要包含了
  • http的get请求如何传递一个对象

    原文链接 https www longkui site program frontend httpget 4366 0 前言 以前前台往后台对象时 后台都用POST请求 前台有时候通过拼接参数传参 会显得比较长 所以考虑前台GET请求能否直
  • Linux (Centos)下pip命令出现错误bash: pip: 命令未找到..解决方案

    今天在服务器上跑程序 提示没有XX模块 我就用pip install XX 安装了一下 结果竟然提示pip命令找不到了 pip3能安装 但是pip3 list一看 里面都没有torch包 之前应该都是用pip安装的才对 去网上找了一通 发现
  • 【算法】分支定界

    一 基本描述 类似于回溯法 也是一种在问题的解空间树T上搜索问题解的算法 但在一般情况下 分支限界法与回溯法的求解目标不同 回溯法的求解目标是找出T中满足约束条件的所有解 而分支限界法的求解目标则是找出满足约束条件的一个解 或是在满足约束条
  • React组件的生命周期

    1 组件生命周期概述 什么是组件的生命周期 组件从被创建到挂载到页面中运行 再到组件不用时卸载的过程 这个过程就叫做组件的生命周期 react在组件的生命周期中提供了一系统的钩子函数 可以让开发者在函数中注入代码 这些代码会在适当的时候运行
  • java ip解析_java域名解析

    DNS原理 http amon org dns introduction html 根域 就是所谓的 根域服务器只是具有13个IP地址 但机器数量却不是13台 因为这些IP地址借助了 域的划分 根域下来就是顶级域或者叫一级域 每个域都会有域
  • [element-ui] el-dropdown下拉菜单禁用项没有鼠标悬浮禁用样式

    鼠标移入出现禁用样式 如下图 就是我们想要的效果
  • Blender3.5 - 快捷键

    图形移动 框选 gt 刷选 gt 套索选择 W 游标 相当于形状的中心点 shitf 空格 空格 游标回到世界中心 shift C 移动 移动 G 随意移动 选中图形 G 沿 X 轴移动 选中图形 G X 沿 Y 轴移动 选中图形 G Y
  • 动态内存(智能指针与new)

    文章目录 一 引言 二 动态内存管理 1 使用动态内存的原因 2 智能指针 2 1 shared ptr 2 1 1 shared ptr定义与初始化 2 1 2 shared ptr操作 2 1 3 make shared操作 2 1 4
  • 【剑指 Offer】(四种解法)数组中重复的数字

    剑指 Offer 03 数组中重复的数字 题目描述 在一个长度为 n 的数组 nums 里的所有数字都在 0 n 1 的范围内 数组中某些数字是重复的 但不知道有几个数字重复了 也不知道每个数字重复了几次 请找出数组中任意一个重复的数字 示
  • 微信公众号与企业号的TOKEN验证与使用

    上图是 微信客户端与微信服务端与公众号 企业号的服务器的原理架构 首先 我们如果使用应用服务器 则需要告诉微信服务器 它在哪里 所以TOKEN就是一个标识的作用 TOKEN是一个参数 是一个自定义的值 负责标识微信服务器和应用服务是不是一一
  • unity狼模型、山谷模型

    unity狼模型 山谷模型 模型如下图 下载链接在文末 点我下载资源 https download csdn net download weixin 43474701 60362226
  • 如何使用文件作为参数,调用接口并获取返回数据?

    String path picture 20220420 1 doc 指定文件的路径 或相对路径 File file new File path System out println 文件名 file getName 文件绝对路径 file
  • 百度AI攻略:增值税发票识别

    1 功能描述 在日常工作中经常要用到增值税发票 在使用的时候需要对增值税发表进行检查 验真 录入等很多工作 使用增值税发票识别技术 实现对增值税普票或专票各字段信息的识别和录入 可应用于企业税务核算及内部报销等场景 能够有效减少人工核算工作
  • Tensorflow与Python、CUDA、cuDNN的版本对应表

    1 官方配置 官网只有英文版的才更新到了TensorFlow 2 12 0 中文版只更新到了2 6 0 所以要想看到下面的内容需要进入官网之后将语言更改为英文 经过测试的构建配置 Linux CPU Version Python versi

随机推荐