近两年,由于大模型技术的兴起,2023年被认为是人形机器人“元年”;刚过去不久的WAIC大会上,更是由多达18台人形机器人组成阵列欢迎参观者——它们被官方称为“十八金刚”。
这些人形机器人也并不只是徒有其表。以宇树最新的机器人G1为例,它不仅能在被击打时靠自己稳定站立,还会做后空翻、能炒菜、会砸核桃、甚至能耍金箍棒。
对于人类的练习,我们常说“台上一分钟,台下十年功”,对机器人也是一样的。(只不过机器人可以在虚拟世界里训练,并不需要真的花费十年功夫)
对于包含众多关节的机器狗和人形机器人,让开发者直接通过指定每个关节的运动来为其动作编程是不现实的。它们需要通过深度强化学习,在无数次试错中自己总结经验,最终呈现出满意的样子。就好像七年前的Alpha Go,也是在训练中不断与自己对弈数百万盘围棋后才得以神功大成。这些能够自主平衡的机器狗、会翻跟头的机器人,也是在无数次的尝试和失败后,总结“经验教训” 写入神经网络,才能稳稳地完成一个漂亮的后空翻。
那么,这些机器人背后的尝试和失败,都是在哪里完成的呢?
答案就是我们今天要讲的——物理仿真平台。
本文讨论的主要是能够服务于机器人研究的物理模拟器,或者叫仿真平台。
提到“仿真”,许多工程领域的专业人士更熟悉的可能是基于有限元法、有限体积法等高精度算法的工业软件,如ANSYS、Comsol等。这些软件能够精确地模拟力学、热学、电磁学、声学乃至多物理场耦合的复杂物理过程,但是计算效率较低,计算稍微复杂一点的模型就需要很长的时间和很大的算力。
另外一个极端来自游戏领域,在游戏引擎中也存在模拟真实物理过程的需求,但游戏界通常需要优先考虑计算的效率。游戏中让玩家看到的物理过程只需要“看上去像”就可以,并不一定要非常准确。甚至在很多时候开发者还可以通过一些预设的技巧,用增加存储空间的方式来减小实时计算的开销。一个典型的代表就是NVIDIA的PhysX物理引擎。
事实上,近些年里,这两者也都在努力朝对方的方向发展。工程仿真软件的领头羊ANSYS早在6年前就发布了Discovery Live,它能够使用NVIDIA显卡来实现近乎实时的结构、热和流体仿真;而NVIDIA最新发布的PhysX 5,已经支持了基于有限元法的软体动力学,并且可以更精确地模拟液体、布料和气球等物件。
从某种程度上说,机器人的物理模拟器位于二者之间。对机器人的仿真来说,首先它对于模拟的精度确实有一定的要求,但通常不需要达到那么高的精度。例如工程仿真软件的用户可能希望获得区域内精确的应力、温度、流动速度等物理量的分布,而机器人模拟器的用户往往只需要知道接触反力和关节的力矩等信息。另外,如开头所说,如果要在模拟器里进行强化学习的训练,对训练的数据量要求更大,因此大部分机器人仿真软件,从算法和历史沿革上,都要更接近游戏的物理引擎。
可用于机器人研究的物理模拟器,大大小小数量极多。在逐一列举这些模拟器之前,我们更感兴趣的是,用于机器人仿真研究的物理模拟器,一般需要包含哪些功能。或者换句话说,这些模拟器能够模拟什么样的物理过程。
刚体动力学
通俗地讲,刚体就是不需要考虑变形的物体。刚体有确定的形状,它可以有质量,有速度,因此具有惯性。在地球上,显然它还会根据自身的密度分布受重力。
接触与碰撞检测
刚体在运动过程中当然可能发生碰撞,因此模拟器需要能够确定两个物体何时发生碰撞,碰撞之后会如何反弹。物体接触时,也会产生摩擦力。
约束与关节
刚体之间可以通过关节(joint)连接。模拟器中当然要包含一些基础的连接关系。这些连接关系在刚体中主要表现为在某些运动方向上的约束。比如一扇门,就是只能绕某个轴发生转动,同时还可能只允许朝某一个方向打开。
在此基础上稍向前一步,这些关节里面当然都有可能放入电机,可以主动驱动。这就可以模拟研究电机的控制了。
一个最简单的机器手臂,在不考虑变形的情况下,可以将其看作几个通过关节相连的刚体部件。想要在模拟器中描述它的运动,就至少需要刚体动力学、连接关节的描述和接触检测功能。
柔性体动力学
在游戏、电影特效等领域,主要的柔性体就是两种:布料和果冻。在计算机图形学的世界里,有许多不同的算法能够以不同的速度和精度来模拟布料和柔性体的变形。一般来说,精度最高的柔性体模拟算法就是工程仿真软件中使用的有限元法。但在各类机器人的物理模拟器中,即使同样使用有限元法,其侧重点也和工程仿真软件不同。
例如知名的柔性体模拟引擎SOFA(Simulation Open Framework Architecture,听上去就很软对不对),就被研究者们主要用来模拟软体机器人和生物组织,以及开发基于软体机器人的强化学习平台等。
粒子系统与流体模拟
自上世纪80年代起,计算机图形学、游戏和电影特效领域就在使用粒子系统来模拟火焰、爆炸、烟雾和流体的运动。就像前面介绍游戏引擎的特性时所说,这类算法往往美观有余而相对来说精度不足。
随着技术的发展,研究者们也在不断提出各种算法以改进流体模拟的精度。类似于FishGym、UWSim等仿真框架已经能够以足够高的精度来模拟和渲染水下机器人的工作环境。
一般来说,并不是所有的机器人物理模拟器都能很好地完成柔性体仿真和粒子\流体仿真这两项任务。即使强如NVIDIA,其最新的PhysX 5.4 版本中,基于有限元法的柔体模拟功能也只支持简单的四面体网格和非常有限的材料属性。大部分软体机器人\水下机器人的研究者都会使用专门的仿真框架。
图形渲染
对于工程仿真软件来说,通过计算得到准确的仿真结果是最重要的。对结果进行渲染只是相对没那么重要的“后处理”工作。而对于游戏和电影特效来说则恰恰相反,你的物理过程可以模拟得没那么准确,但渲染必须要尽可能地逼真。
对于机器人的模拟器来说,如果用户只希望训练一只机械手臂学会抓取物体,那么对图形渲染功能的要求就相对较低。然而大多数更加复杂的机器人,尤其是具身智能的四足和双足机器人都拥有视觉摄像头甚至带有景深的雷达等传感器,它们需要看到、识别到各种形状的物体才能与之交互。因此对于这些机器人来说,想要在模拟器里让它们学会和真实世界互动,模拟器的渲染必须足够逼真,才能让它学到的经验有效地迁移到现实世界。
这类问题在学术界被称为Sim2Real,也是一个非常大的难点。
传感器
机器人的身上会安装各种各样的传感器。仅仅是视觉方面,就可能有单目摄像机、立体摄像机、深度相机,全向摄像头,或者激光雷达等。其他传感器还包括触觉传感器、惯性传感器(Inertial measurement unit, IMU)等。
一款合格的机器人物理模拟器当然应该能准确地仿真这些传感器在机器人工作时收到的信号。
之前我们曾经介绍过NVIDIA的Omniverse平台。Isaac Sim就是NVIDIA基于Omniverse平台和PhysX物理引擎开发的机器人物理模拟器,Isaac Gym是用于机器人强化学习研究的框架。
英伟达开发机器人模拟器具有很多优势。
在物理仿真方面,NVIDIA的PhysX框架是游戏引擎Unity和Unreal采用的物理引擎,尤其是最新的PhysX 5,NVIDIA于2021年将著名物理仿真引擎Bullet的作者Erwin Coumans招入麾下,大大提升了PhysX框架的仿真能力。
在图形渲染方面,这更是NVIDIA的传统强项。被广泛用于游戏和电影渲染中的RTX实时光追技术让Isaac Sim模拟的画面能够以假乱真,从而跨越Sim2Real的鸿沟。
在文件格式方面,NVIDIA引入了Pixar公司开发的USD(Universal Scene Description)格式,不仅能够非常有效地描述机器人和复杂场景,而且在业内也有广泛的用户基础。
ROS,全名为Robot Operating System,机器人操作系统。但它实际上并不是一个像Linux那样的操作系统,而是一个开源的软件开发工具包SDK,它提供了构建机器人应用程序所需的大量模块。ROS拥有一个非常活跃的社区和生态系统,能够帮助开发者降低设计机器人的门槛,专注于特定领域的应用。前面提到的NVIDIA Isaac Sim也有ROS接口。
Gazebo是一个开源的机器人模拟器,最早在2002年由USC Robotics Research Lab (南加州大学机器人实验室) Andrew Howard教授和他的学生Nate Koenig开发。
Open Robotics是一家非营利性公司,总部位于加利福尼亚州山景城。目前ROS和Gazebo框架的主要维护者都是Open Robotics公司,所以Gazebo与ROS生态关系最为紧密。
依托ROS生态,Gazebo是目前市面上使用非常广泛的一款机器人模拟器。由于Open Robotics公司的主要投资机构包括DARPA(美国国防高级研究计划局)、NASA、亚马逊等公司,因此Gazebo也被DARPA举办的许多机器人挑战赛指定为官方专用机器人模拟器。
Bullet是一个基于C++开发的用于VR、游戏、视觉效果、机器人、机器学习等的实时碰撞检测和多物理场仿真的框架。
PyBullet,看名字就能猜到,它是一个基于Python的Bullet环境,同样是完全开源的。有许多基于PyBullet进行的机器人相关研究工作,比如这篇2020年由谷歌研究院和UC Berkeley研究者发表的让机器狗模仿动物进行活动的论文。
MuJoCo代表( Multi-Joint dynamics with Contact,多关节动态与接触),它和Bullet、PhysX类似,是一个用于机器人、生物力学、图形和动画、机器学习等领域的物理引擎。MuJoCo最初于2012年由神经科学家、华盛顿大学运动控制实验室主任Emo Todorov开发,于2015年通过Roboti LLC以商业产品的形式进行转化,2021年10月被DeepMind收购并免费提供,于2022年5月开源。
与其他偏向游戏和动画渲染的物理引擎不同,MuJoCo最初就是为机器人仿真而生。用户可以使用原生的MJCF场景描述语言来定义模型。MuJoCo还提供了Unity插件,让用户能在Unity环境下使用MuJoCo模拟引擎。
MuJoCo官方提供了非常丰富的模型库。其中包括人形机器人、四足机器狗、灵巧手、机械臂、无人机,其中不乏宇树G1、H1、Go2和Universal Robots UR5e等众多明星型号。
除此之外,还有Cyberbotics的Webots;
最早由日本东京的科研人员开发,目前由瑞士公司维护的Coppelia Robotics:
由UCSD、Stanford和SFU的研究人员开发并维护的机器人模拟训练统一框架 SAPIEN(智人):
以及前面提到过的,模拟软体机器人的开源仿真框架SOFA(Simulation Open Framework Architecture):
还有Airsim,CARLA,UWSim,Chrono,SimGrasp,Chai3D,FLEX,Evosoro,Nimble……凡此种种不胜枚举。
实际上每个模拟器都有自己的渊源,有自己最擅长的领域,也可能有很多隐藏的问题。像念花名册一样列出甚至背下来它们的名字其实用处不大。
Simulately是一个由清华、北大毕业的几位同学创建的开放Wiki社区,目的是收集和比较现有流行的机器人模拟器之间的差异,汇总机器人和具身智能相关领域的最新研究工作。
Simulately的几位创始人感觉到,当前在机器人领域可选择的模拟器看似五花八门,百花齐放,但实际上选择一款模拟器深入使用下去以后,往往会发现它缺失某些关键功能。而机器人领域的研究者也很难仅通过官方网站、文档和案例去了解到不同物理仿真框架之间的功能差异。
为了解决这些障碍,他们创建了Simulately项目。这个网站目前还处于初级阶段,并不十分完善,但已经能够为对这个领域感兴趣的朋友们提供很大帮助。网站上列出了许多通用模拟器和专用模拟器的信息、官方网站和应用案例,也列表比较了一些模拟器在功能和特性上的区别。与时俱进地,他们的Logo由DALL-E 3生成,网站上还集成了一个GPT可以提问。感兴趣的读者可以移步他们的网站:
https://simulately.wiki/
在调研中笔者发现,目前这些知名的机器人仿真软件平台,好像也是由国外公司、高校开发和维护的居多。
笔者自己的专业更偏向传统的工业仿真软件。在工业仿真软件领域里,传统的巨头公司如ANSYS、Abaqus等都是闭源的商业软件。在贸易战背景下,由于这些研发设计类工业软件存在“卡脖子”风险,近些年许多自主工业软件公司乘势兴起,希望能够在一定程度上逐渐替代这些老牌的工业仿真软件在企业研发中的角色。
然而实际上,在笔者看来,无论是闭源的工业仿真软件还是开源的机器人物理模拟器、乃至操作系统,中国都有必要努力追求自主化,开发自己的平台。
这件事的意义并不仅仅在于防止被发达国家“卡脖子”,更重要的意义在于,这些仿真平台,实际上是基础科学与应用研究之间最直接的桥梁,也是最新的理论、算法、科学进步和工程经验沉淀的平台。笔者喜欢用这样一个比喻:基于各种研发设计类工业软件开发出的产品是树上的果实,而仿真软件就像是一棵大树。中国的制造业企业在规模、技术上已经做到了世界一流,这些果实当然挂在我们自家的园子里,结在我们自家的枝头。但追根溯源,那些“树根”却种植在别人的土壤里。
使用国外的研发设计类工业软件开发我们自己的工业品,同时也在为他们的软件平台做测试、做背书,帮助国外的仿真软件平台逐步完善自己,让大量的基础科学理论、算法和公式沉淀在他们的平台上。这就好像是收获自己果实的同时,在为别人家的树根浇水施肥。
在机器人仿真软件领域,虽然看起来很多框架都是开源的,不存在一纸行政禁令不让我们用的风险,但实际上,“科学无国界,科学家有祖国”这句话一直是成立的。前面介绍过的机器人操作系统ROS和Gazebo模拟器,维护它们的Open Robotics公司看似是一家非盈利公司,实际上背后第一大金主就是美国国防部高级研究计划局DARPA。
其实,现代的科学技术进步早已广泛打通了不同学科之间的壁垒。游戏引擎和机器人的仿真可以借鉴来自工程仿真领域的算法和经验来提高模拟精度,所谓“传统”的工程仿真软件领域,当然也可以考虑引入计算机图形学领域的新算法,或许以略微牺牲计算精度为代价,来提高仿真分析的效率。
虽然在汽车、航空航天、消费电子等行业里,传统CAD、CAE软件的应用已经非常成熟,中国的自主软件公司追赶困难,但把视角拉远一点,在泛物理仿真这个大行业里,还有很多未开拓的蓝海和机遇。
希望中国的研究者和工业软件公司们,不要等到国外的软件已经发展形成生态和壁垒以后,才以追赶者心态去解决“卡脖子”问题。我们应当争取在这些底层新兴技术发展早期就及时跟上世界先进水平,努力成为这个行业里的一流玩家。
毕竟,中国已经拥有了世界上规模最大的制造业体系。我们拥有世界一流的下游产业,当然配得上 也应该拥有世界一流的上游研发平台。
[1] “十八金刚”来了!人形机器人成“顶流”,何时能走进千家万户?|聚焦2024WAIC (new.qq.com/rain/a/20240705A09Y7U00)
[2] 全球首次 全尺寸电驱 人形机器人原地空翻 (www.bilibili.com/video/BV17F4m1F7Em/)
[3] NVIDIA PhysX Document (https://nvidia-omniverse.github.io/PhysX/physx/5.4.0/index.html)
[4] MuJoCo Documents (https://mujoco.readthedocs.io/en/stable/overview.html)
[5] SOFA Applications (https://www.sofa-framework.org/applications/plugins/)
[6] Webots User Guide (https://www.cyberbotics.com/doc/guide/sensors)
[7] Gazebo Showcase (https://gazebosim.org/showcase)
[8] Why ROS? (https://www.ros.org/blog/why-ros/)
[9] Bullet Real-Time Physics Simulation (https://pybullet.org/wordpress/)
[10] 聊一聊“Sim”(上)——一览机器人模拟器生态 (https://mp.weixin.qq.com/s/-FZJapwba0vWnE_--b9Q-w)
[11] Simulately (https://simulately.wiki/)
其余资料均为网络公开整理