创建可微物理引擎Nimble,开源SOTA人体骨骼模型,斯坦福腿疾博士生用AI助跑人生

 

机器之心报道
编辑:杜伟陈萍


身残志坚,斯坦福大学的这位人工智能 + 机器人博士生想用技术克服身体缺陷



有一位研究者,他身患残疾,出生时便患有退行性神经疾病,该疾病一直攻击着他的外周运动神经元(进行性神经性腓骨肌萎缩症, 2A 型)他就是来自斯坦福大学的博士生 Keenon Werling
为了走路,Werling 不得不带上腿支架,可能随着病情的恶化,还会坐上轮椅

不能像正常人一样行走,但可以通过技术来帮助自己因此,Werling 对设计构造和控制外骨骼以帮助恢复行动不便的人正常行走产生了浓厚 兴趣为了实现这一目标,Werling 还对可微物理引擎人体建模和机器人技术感兴趣此外,他还是可微物理引擎 Nimble 的创建者
Nimble 地址:http://nimblephysics.org/

Werling 希望更多的人从事触觉动作捕捉人机交互等的研究

在相关论文 Fast and Feature-Complete Differentiable Physics for Articulated Rigid Bodies with Contact 中, Keenon Werling 作为一作系统地介绍了关于 Nimble 的相关工作
论文地址:https://arxiv.org/pdf/2103.16021.pdf

该研究提出了一个快速和功能完备的可微分物理引擎 Nimble,它支持拉格朗日动力学和关节刚体模拟的硬接触约束Nimble 提供了一套完整的功能,这些功能通常只能在机器人应用程序经常使用的不可微分物理模拟器中可用他们使用线性互补问题(LCP),可以精确地求解接触约束该研究利用 LCP 解的稀疏性,通过非弹性接触的 LCP 公式,提出了有效和新颖的解析梯度

该研究支持复杂的接触几何和近似连续时间弹性碰撞的梯度此外,该研究还介绍了一种计算互补感知梯度的新方法,可避免下游优化任务在鞍点失速

该研究表明,在现有物理引擎 (DART)的分支中实现这种组合,在计算单个时间步(single timestep)分析雅可比矩阵时,能够在有限差分方法的基础上实现 87 倍的单核加速,同时保留原始 DART 的所有表现力
Nimble 技术原理 
此前已经在许多不同领域对可微物理模拟进行了研究,包括机械工程机器人物理学和计算机图形学借助自动微分方法和库的最新进展,研究人员已经提出了许多可微物理引擎来解决刚体和非刚体的控制和参数估计问题虽然这些物理引擎都旨在解决类似的逆问题,但它们提供的特性和功能差异很大,包括接触处理状态空间参数化和碰撞几何支持等方面的差异

下表 I 展示了几个可微物理引擎的差异,这些引擎已经展示了模拟有接触铰接刚体的能力基于每个引擎各自支持的功能,计算梯度的方法可以分为这几类,分别是有限差分自动微分符号微分以及利用神经网络来近似物理
研究者提出的 Nimble 与 MuJoCoDiffTaichi 等其他物理引擎的比较

研究者提出的 Nimber 物理引擎通过手动调整的 C++ 代码,使用符号微分来计算引擎每个部分的梯度从技术来讲,他们提出了一种新的方法来解析微分 LCP,该方法利用了解的稀疏性,并与求解 LCP 的直接方法兼容

此外,研究者的引擎支持比以前可用更丰富的碰撞和接触处理几何集合,包括网格和网格原始碰撞,以便为机器人应用程序实现全功能可微的 DART 物理引擎版本

Nimble 物理引擎的效果怎么样呢?下图 1 是利用 Nimble 引擎模拟的学习瑜伽的波士顿动力 Atlas 机器人Atlas 机器人有 34 个网格碰撞器和 32 个自由度,整个冻结帧(freeze frame)有 24 个接触点即便 Atlas 构造如此复杂,研究者在使用他们提出的方法在单个 CPU 上计算机器人动力学雅克比矩阵时,速度是有限差分方法的 87 倍(8.5ms VS 749ms)
Nimble 具体实现


目前,Nimble 正在测试阶段,支持 Linux 和 Mac OS X 系统,不支持 Windows 系统,Windows 用户可以使用 Windows Subsystem for Linux

所需 Python 版本为 3.53.63.7 或 3.8,安装以下 pip 即可运行:

    pip install nimblephysics


    将世界建模为一组骨骼

    Nimble 将世界建模为一组骨骼,每个骨架由一组关节组成,它们将刚体连接在一起研究者以 KR5 机器人为例展示了整个过程
    图源:free3d.com

    输入以下代码:

      import nimblephysics as nimble
      import osworld: nimble.simulation.
      World = nimble.simulation.World()
      arm: nimble.dynamics.Skeleton = world.loadSkeleton(


      os.path.join(os.path.dirname(__file__), "./KR5.urdf"))
      # Your code here
      gui = nimble.NimbleGUI(world)
      gui.serve(8080)
      gui.blockWhileServing()


      用户运行以上代码时应该会在浏览器中看到 KR5 机器人研究者通过这个运行示例来解释 Nimble 的基本概念

      在出现Your code here的地方,用户可以插入以下代码:

        print(arm.getPositions())


        当用户运行该文件时,将看到一个长度为 6 的 numpy 向量被打印到控制台Nimble 在广义坐标(generalized coordinate)中工作,这意味着位置向量(有时称为自由度)的每个元素都指代一个关节位置具体如下图所示:
        用户可以更改骨架的关节值并重新运行代码以更改手臂的位置:

          arm.setPositions([0, 0, -90*(3.1415/180), 0, 0, 0])


          通过告知肘部(向量中的索引 2)向后旋转 90 度,手臂将直接指向天空,如下图所示:
          研究者还在相同的广义坐标空间中表达速度例如,如果用户希望肘关节以每秒 1 弧度的速度向前旋转,则可以将手臂的速度设置如下

            arm.setVelocities([0, 0, 1, 0, 0, 0])


            Nimble 还为很多不同的关节类型提供了内置支持,下图展示了一些常见的关节类型:
            可微人体模型

            该研究创建 Nimble 的主要动机之一是支持生物力学和 AI 交叉领域的研究为了支持这一目标,Nimble 包含了许多用于处理可微分人体的工具

            有许多不同的骨骼可以用来代表人体骨骼形式通常被设计成对计算机图形学应用足够好的形式对于需要物理精度的应用,该研究参考了生物力学文献,生物力学的黄金标准人体模型是 Rajagopal 2015 模型,从 OpenSim 移植而来该模型与 Nimble 捆绑在一起,并且是完全可微的!用户可以使用以下方法创建它:

              # Create a Rajagopal skeleton and add it to the worldhuman: nimble.dynamics.Skeleton = nimble.RajagopalHumanBodyModel()world.addSkeleton(human)


              这将创建一个如下图所示的骨架:
              与吴恩达共话ML未来发展,2021亚马逊云科技中国峰会可玩可学

              2021亚马逊云科技中国峰会第二站将于9月9日-9月14日全程在线上举办对于AI开发者来说,9月14日举办的人工智能和机器学习峰会最值得关注

              当天上午,亚马逊云科技人工智能与机器学习副总裁Swami Sivasubramanian 博士与 AI 领域著名学者Landing AI 创始人吴恩达(Andrew Ng )博士展开一场炉边谈话

              不仅如此,人工智能和机器学习峰会还设置了四大分论坛,分别为机器学习科学机器学习的影响无需依赖专业知识的机器学习实践和机器学习如何落地,从技术原理实际场景中的应用落地以及对行业领域的影响等多个方面详细阐述了机器学习的发展

              点击阅读原文,立即报名
               THE END 
              转载请联系本公众号获得授权
              投稿或寻求报道:content@jiqizhixin.com


                  关注 机器之心


              微信扫一扫关注公众号

              0 个评论

              要回复文章请先登录注册