本文来源于微信公众号“小米科技”,经授权转载。
仿真是机器人学习和研究过程中最重要的工具之一,是指通过计算机对实际的物理系统进行模拟的技术。机器人仿真基于交互式计算机图形技术和机器人学理论,生成机器人的几何图形,并对其进行三维显示,用来描述机器人及工作环境的动态变化过程。本期技术干货,我们邀请到了小米工程师——谢岩,以机器人仿真平台为主要讨论对象,从仿真的必要性到仿真评价指标,结合具体的物理引擎和仿真软件,多层次介绍机器人仿真平台。
一、仿真必要性
为什么需要仿真?这可能是绝大部分初学者的第一个疑问。传统的产品开发流程往往需要经过产品定义—>概念设计—>方案评审—>详细设计—>样机试制—>测试—>方案优化等流程。但是随着产品复杂度的增大,尤其对于机器人这种多自由度复杂系统,直接采用上述流程的弊端越来越大。
首先,当测试发现问题时,需要对方案进行迭代优化,尤其对于硬件设计,加工以及组装的过程耗时费力,中间一旦出现问题,迭代的周期很容易就会拖长。
图1 传统的开发流程
其次,在没有仿真的情况下,软件开发工作很容易滞后。虽然在等待硬件定型的过程中依然可以进行软件结构的设计,但是由于缺乏有效的反馈,这个过程中开发的东西很容易跟实际系统产生脱节,等到在实际系统上做测试的时候,部分组件甚至会需要推倒重来,之前的部分工作量一定程度上就浪费了。
为了提升产品开发的效率,现在产品的开发往往采用基于仿真驱动的开发流程。在方案评审环节之后通过仿真对方案进行评估,针对方案中不合理的部分进行迭代优化,然后再对方案进行详细设计。这样可以缩短开发周期,降低开发成本,减小设计风险。
图2 基于仿真驱动的开发流程
最后,很多个人和团队不具备搭建硬件平台的条件。对于一些工业机械臂而言,其价格达到几十万甚至更高,这对于一些机器人爱好者或者初学者是无法承受的,而仿真可以提供一个廉价的学习环境,使用者可以在仿真环境中轻松搭建自己的机器人硬件,来实现和测试自己的软件算法。
二、仿真简介
仿真是指通过计算机对实际的物理系统进行模拟的技术。对于机器人而言,机器人仿真是基于交互式计算机图形技术和机器人学理论,生成机器人的几何图形,并对其进行三维显示,用来描述机器人及工作环境的动态变化过程。
图3 仿真平台构成
一个完整的机器人仿真平台主要负责三件事:模型建模、动力学计算、可视化显示。这分别对应了仿真平台的三个组成部分:
模型描述、动力学引擎、渲染引擎。
▍模型描述
主要负责机器人模型的建模,使用计算机语言向仿真平台描述机器人是如何构成的。机器人的基本构成可以使用连杆(link)和关节(joint)来描述。除此之外,还需要知道这些基本组成部分的一些物理信息,例如连杆的质量属性,惯量属性,颜色,以及关节的种类(到底是转动关节还是平动关节)。
目前业界主要使用URDF(Unified Robot Description Format)和SDF(Simulation Description Format)文件来描述机器人模型,他们都是XML语法框架下用来描述机器人的语言格式。虽然URDF是ROS中的标准格式,但它缺乏许多功能来描述更复杂的场景。例如,URDF只能指定单个机器人的运动学和动力学特性,它无法指定摩擦特性和处理闭链结构。此外,它不能指定环境信息,例如灯光、高度图等。SDF的提出就是为了解决URDF的缺点,它可以实现对机器人所有内容的完整描述,其可扩展性更适合于复杂的仿真。
▍动力学引擎
可以根据物体的物理属性计算运动、旋转和碰撞。动力学引擎的基础是系统动力学,动力学是对现实世界中物体运动规律的数学描述,这种数学描述主要是基于常微分方程的,物理引擎核心的任务就在于求解常微分方程。
常用的机器人仿真物理引擎有ODE,Bullet,MuJoCo等。Bullet和ODE开发的初衷主要是用于3D电影和游戏。因此,在数值求解器上用的是一阶的半隐式欧拉方法(Semi-implicit Euler method),主要追求的是速度、稳定性而非精度。MuJoCo是一个近期开源的物理引擎,旨在促进机器人学、生物力学、图形和动画以及其他需要快速准确模拟的领域的研究和开发。MuJoCo提供了速度、精度和建模能力的独特组合,主要应用于强化学习和最优化控制领域。
图4 物理引擎工作流程
▍渲染引擎
使用计算机图形学技术,根据机器人模型和纹理渲染出机器人的三维图形,这样我们可以通过可视化平台观察机器人运行的正确性。目前机器人渲染引擎主要使用OpenGL。
OpenGL(Open Graphics Library)是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口。这个接口由近350个不同的函数调用组成,用来从简单的图形比特绘制复杂的三维景象。OpenGL常用于CAD、虚拟实境、科学可视化程序和电子游戏开发,具有强大的通用性和可移植性。

图5 渲染引擎工作流程
三、仿真评价指标
为了客观评价仿真软件的优劣,需要制定统一的标准。早期的研究学者确定了评估机器人仿真平台的通常标准:逼真度、可扩展性、开发简易性和成本。这四个标准可以用来判断任何一款机器人仿真软件。但随着仿真软件的发展以及应用场景的丰富,在不同开发环境下对仿真软件的评价标准也稍有不同。
特殊地,对于足式机器人仿真而言,其结构为多自由度的开链或闭链结构,导致其动力学模型比一般的轮式机器人更为复杂,并且机器人运动过程中需要与环境实时进行多点接触,这对仿真器在多物体碰撞检测方面的性能要求就会很高。使用精确的数学模型来描述动力学模型和碰撞模型固然是好的,但是这无疑会增大求解器的负担。因此,仿真器需要在计算精度与计算速度之间进行合理的权衡。除此之外,仿真器还需要考虑扩展性、维护性以及兼容性等因素,这些因素对于开发者项目的开发、部署以及后期维护都很重要。下表列出了一些更为丰富的评价指标。
表1 仿真评价指标

四、物理引擎介绍
物理引擎有两种常见的类型:
高精度物理引擎和
实时物理引擎。
高精度物理引擎需要更多的处理能力来计算非常精确的物理,侧重于精确计算,仿真结果精度高,通常使用在科学研究(计算物理学)和电脑动画电影制作,比如ADAMS、ANSYS等。
实时物理引擎通常在电子游戏领域使用并且简化运算、降低精确度以减少计算时间,以此得到在电子游戏中可以接受的处理速度,比如UnrealEngine、Bullet等。下面将对目前机器人技术和机器学习领域中使用最广泛的几种物理引擎进行介绍和分析。
>>>> RaiSim
介绍:RaiSim[1]是RaiSim Tech Inc.开发的用于机器人技术和AI的跨平台多体物理引擎,其设计目的是为模拟机器人系统提供准确性和速度。但是,它是通用的刚体模拟器,可以非常有效地仿真任何刚体。它是闭源的,且完全支持Linux,Mac Os和Windows系统,用户需要付费购买商业License才能使用,学术Lisense则免费。
特点:支持以下功能——独特的接触求解方法、高效的多体动力学算法,以O(n)的复杂度计算整个系统的正向动力学以及接触相关特性,最容易学习/使用的C++仿真库,极少的依赖项(仅依赖STL和Eigen)。
>>>> Bullet Physics (Bullet)
介绍:Bullet[2]物理引擎是开源的、专业的,集刚体、软体和碰撞检测于一身的动力学类库。由Erwin Coumans开发。它最初是为游戏开发而设计的,但现在已经广泛用于机器人学、虚拟现实、计算机图形学等领域。Bullet3支持多种物理模拟,包括刚体、软体、车辆、水、气体等。
特点:开源霸主,具有离散和连续碰撞检测的刚体和柔体仿真;碰撞形状包括:球体、长方体、圆柱体、圆锥体、使用GJK的凸包、非凸网格和三角形网格;支持柔体仿真:布料、绳索和可变形物体;提供丰富的刚体和柔体约束;具有速度级MLCP和简化坐标Featherstone ABA算法;丰富的插件:支持Maya、Softimage的插件,可集成到Houdini、Cinema 4D、LightWave 3D、Blender、Godot和Poser中;Collada 1.4物理内容导入;针对PlayStation 3 Cell SPU、CUDA和OpenCL的定向优化。
>>>> Open Dynamics Engine (ODE)
介绍:ODE[3](Open Dynamics Engine,开源动力学引擎)是一个著名免费的具有工业品质的用于模拟关节连接的刚体动力学的库,由Russell Smith在一些贡献者的帮助下开发而成。经过验证的应用场景包括在虚拟显示环境中模拟地面车辆,足式生物和移动物体。它具有快速、灵活、健壮的特点,并具有内置的碰撞检测功能。
特点:支持具有任意质量分布的刚体;关节类型:球副、转动副、移动副、固定副、旋转电机、直线电机、万向节;碰撞基本体:球体、长方体、圆柱体、胶囊体、平面和三角形网格、凸面体;碰撞空间:四叉树、哈希空间和简单空间;模拟方法:根据Trinkle/Stuwart和Anitescu/Potra的拉格朗日乘子速度模型推导出运动方程;使用一阶积分器,速度很快但还不够准确,稍后将推出更高阶的积分器;时间步长方法的选择:可以使用标准的“大矩阵”方法或较新的迭代QuickStep方法;接触和摩擦模型:基于Baraff的Dantzig LCP求解器,尽管ODE实现了对Coloumb摩擦模型的更快近似;开放原生的C接口(尽管ODE大部分是用C++编写的)和基于C++接口。
>>>> Multi-Joint dynamics with Contact (MuJoCo)
介绍:MuJoCo[4]是由Emo Todorov为Roboti LLC而开发的一种物理引擎,旨在促进机器人技术、生物力学、图形、动画以及其他需要快速而准确仿真领域的研究和开发。它提供了速度,准确性和建模能力的独特组合,但它不仅仅是一个更好的模拟器。相反,它是第一个从头开始设计的全功能模拟器,目的是基于模型的优化,尤其是通过接触进行的优化。MuJoCo使扩大计算密集型技术(例如最优控制,物理一致状态估计,系统识别和自动化机制设计)成为可能,并将其应用于具有丰富接触行为的复杂动态系统。它还具有更多传统应用程序,例如在物理机器人上部署之前测试和验证控制方案,交互式科学可视化,虚拟环境,动画和游戏。
特点:在广义坐标系中进行仿真,避免出现关节冲突;即使存在接触也可以很好地定义逆动力学;通过凸优化对约束进行统一的连续时间表述;约束包括软接触,极限,干摩擦,等式约束;能模拟粒子系统,布料,绳索和软物体;包括马达,圆柱体,肌肉,腱,滑块曲柄的执行器;可选择牛顿,共轭梯度或投影高斯-赛德尔求解器;可选择金字塔形或椭圆形的摩擦锥,密集或稀疏的雅可比方程式;可选择Euler或Runge-Kutta数值积分器;多线程采样和有限差分近似;直观的XML模型格式(称为MJCF)和内置的模型编译器;跨平台GUI在OpenGL中具有交互式3D可视化;用ANSI C编写并针对性能进行手工调整的运行时模块。
>>>> Dynamic Animation and Robotics Toolkit (DART)
介绍:DART[5](动态动画和机器人工具箱)是由乔治亚理工学院的图形实验室和仿人机器人实验室创建的一个协作、跨平台的开放源码库。该库为机器人技术和计算机动画中的运动学和动力学应用提供数据结构和算法。由于DART使用广义坐标来表示铰接刚体系统,并使用Featherstone的铰接体算法来计算运动动力学,因此它的精度和稳定性得到了显著的提高。DART在机器人学和计算机动画中有着广泛的应用,因为它具有多体动力学模拟器和各种用于控制和运动规划的运动学工具。
特点:支持多种平台:Ubuntu,Archlinux,FreeBSD,macOS和Windows;提供可扩展的API以解决各种优化问题,例如非线性编程和多目标优化。
支持多种碰撞检测器:FCL,Bullet和ODE;支持各种碰撞形状,包括原始形状,凹面网格和概率体素网格;通过可定制的惯性和材料属性,支持众多原始的和任意的身体形状;提供对任意实体和坐标系的运动状态(例如,变换,位置,速度或加速度)的全面访问。
即插即用的分层整体逆运动学求解器;使用李群表示法和Featherstone混合算法为铰接式动态系统实现高性能;为动态量及其派生提供全面的API,例如质量矩阵,科里奥利力,重力,其他外力和内力;使用隐式LCP处理接触和碰撞,以确保不穿透,定向摩擦以及近似的库仑摩擦锥条件;提供多个约束求解器:Lemke方法,Dantzig方法和PSG方法;支持“孤岛”技术来细分约束处理以提高性能。
以上五种物理引擎的基本特点可以总结如下表[6]:
表2 五种物理引擎的基本特点
为了更公平地评估各物理引擎的性能,我们引入速度-精度曲线。如下图所示,理想的物理引擎位于右上角,而大多数物理引擎表示为从左到右向下倾斜的曲线。较好的物理引擎曲线位于右上方;因此,曲线1表示的物理引擎优于曲线2表示的物理引擎。
图6 速度-精度曲线
下表描述了基于速度-精度曲线评估的各物理引擎性能结果[7]。
表3 五种物理引擎性能结果
从表3可以看出,ODE通常能很好地处理单个基本体形状的物体,而MuJoCo和DART在多体仿真中具有优势。ODE的多体系统仿真是非常耗时的,但值得注意的是,它在articulated-robot-system momentum test中表现出色:尽管效率明显低下,但采用最大坐标表示方法具有良好的动量保持能力。Bullet可以非常准确、高效地模拟具有摩擦接触的物体的滑动。RaiSim凭借其独特的接触求解方法和高效的多体动力学算法实现,通常在单体和多体任务中都具有良好的性能。
但是,这些引擎也具有自身局限性:
- ODE和DART的LCP接触模型在某些条件下无法模拟物体的滑动;
- DART不适用于多物体的仿真场景;
- 由于没有求解器错误纠正机制,Bullet的位置级漂移严重;
- MuJoCo的软接触模型无法控制接触弹性。
五、仿真软件介绍
机器人系统设计离不开仿真工具的支持。机器人仿真让我们在没有物理硬件的情况下也可以快速对算法进行验证或者提高安全性,避免实验损伤我们的设备(比如在增强学习中,就需要大量random的exploration)。一般来说机器人仿真工具在物理引擎之上进行包装,如基于ODE、Bullet等。有些情况下我们只需要使用物理引擎就可以满足需要,但一般情况下我们也想通过可视化平台观察机器人运行的正确性。下面将对目前在机器人仿真领域比较知名的仿真平台进行介绍和分析。
>>>> Webots
Webots[8]是瑞士公司Cyberbotics发布的一种用户友好型机器人模拟仿真器。它可以在Windows,Linux或macOS上运行,并且支持大多数编程语言,例如C/C++,Java,URBI,MATLAB和Python。还可以使用API或任何标准TCP/IP网络从外部控制Webots模拟器。Webots模拟器使用ODE在逼真的3D环境中模拟物理。它还支持对碰撞和接触点进行精确建模,这可以使用虚拟机器人测试各种场景。Webots甚至附带一个机器人模型库,可使用PR2,Atlas,Aibo甚至是某些NASA机器人。Webots还支持VRML97,因此可以使用大多数建模软件(Solidworks,AutoCAD,Blender和Inventor)导入机器人设计。还可以导入地图和地形数据以在测试环境中创建准确的世界表示。
但Webots也有许多缺点。首先,Webots建模过程比较繁琐,对于闭链结构机器人的支持不够完善,使用webots仿真并联机器人会比较麻烦。其次,Webots仿真过程数据不能自动保存,可视化做得也不是很好,使用较为不便。最后,Webots控制台不支持中文,软件界面中文翻译不完整,帮助文档也没有中文版。

图7 Webots仿真器界面
图片来源:https://blog.csdn.net/ZhangRelay
>>>> V-rep
V-REP[9](现在更新命名为CoppeliaSim)是免费的,用于教育目的,如果计划将其用于商业项目,则可以升级到专业版。可以在Windows,Linux或macOS上运行V-REP,并且可以使用六种不同的编程语言对其进行编程。它还具有ROS&BlueZero支持,因此可以只使用3D模拟器并使代码在另一个平台上运行。
V-REP支持四种不同的物理引擎(Bullet, ODE, Newton, and Vortex Dynamics)。它可以准确地处理对象的交互,例如碰撞,接触点和抓取。V-REP还支持粒子物理学来模拟空气和水,因此可以准确地对喷气发动机和螺旋桨建模。V-REP还可以模拟各种传感器,甚至可以通过插件将新传感器添加到模拟器。V-REP甚至支持路径和运动规划,甚至可以计算正向和逆向运动学。它还支持网格编辑,因此可以在模拟器中对设计进行小的调整,或者可以轻松导入任何五种不同3D模型格式(Obj,STL,URDF等)的模型。
图8 V-REP仿真器界面
图片来源:https://www.coppeliarobotics.com/coppeliaSim_v-rep_iros2013.pdf
>>>> Gazebo
Gazebo[10]模拟器是一个免费的开源平台,可用于设计,开发,测试和可视化几乎任何类型的机器人。Gazebo可在Linux,Windows和Mac上运行,是ROS的默认仿真器,可以调用多种开源算法并可以直接部署到真机。Gazebo支持多种高性能物理引擎,例如ODE,Bullet,Simbody和DART。Gazebo模拟器还附带了一些机器人模型,例如PR2,DX,Irobot Create和TurtleBot,因此即使没有自己的机器人模型,也可以快速上手。它还支持广泛的传感器,并且可以模拟噪声和传感器故障,以准确模拟实际问题。甚至可以在云中运行Gazebo,并使用简单的Web浏览器与模拟器进行交互。

图9 Gazebo系统架构
图片来源:https://www.mdpi.com/2075-1702/7/2/42
Gazebo中的模型格式是基于XML的SDF,构建一个模型需要用户自己编写XML文件,对于初学者有一定难度。其次,Gazebo对于闭链结构机器人的支持不够完善,并且Gazebo与ROS的结合程度很高,对于不熟悉ROS的用户而言上手难度较大。
图10 Gazebo仿真器界面
图片来源:https://alternativeto.net/software/gazebo-robot-simulator/about/
>>>> ISAAC
NVIDIA ISAAC[11]平台是由领先的显卡厂商NVIDIA开发的仿真平台,可以为开发者提供一个功能强大的端到端平台,用于开发、仿真和部署支持 AI 的机器人。它可以在启用GPU的桌面上运行,也可以在AWS,Google Cloud或Azure上的云中运行。它还支持NVIDIA Jetson AGX Xavier,Jetson TX2和Jetson Nano。由于ISAAC机器人技术平台是由NVIDIA制造的,因此它提供了所有机器人模拟仿真器中最好的图形。
ISAAC针对NVIDIA硬件(GPU)进行了优化,可以生成高效的平台优化的交叉编译应用程序。ISAAC 集成了其中许多CUDA加速的开源库,例如NPP,OpenCV,ROS,PCL(wip),Eigen等。ISAAC SDK附带了一系列高性能算法,这些算法被称为GEM,此外除了机器人控制类的算法,ISAAC还为主业打游戏副业“炼丹”的同学们准备了深度神经网络模块的集成,例如立体声深度估计、目标检测、Tracking算法等等。ISAAC 整合了最新的PhysX和RTX引擎进行物理仿真和图像仿真,其次引入了Pixar公司开发的usd(Universal Scene Description)描述格式作为机器人和复杂场景的描述方式。
图11 ISAAC仿真器
图片来源:https://docs.nvidia.com/isaac/doc/overview.htmlhttps://analyticsindiamag.com/nvidia-releases-developer-toolbox-for-ai-powered-robotic-working-system/
>>>> Drake
Drake[12]是由麻省理工学院计算机科学与人工智能实验室(CSAIL)机器人 Robot Locomotion Group 开发的C++工具箱。随着丰田研究所(Toyota Research Institute)领导的核心开发团队的发展,开发团队现已显著壮大。它是一个用于分析机器人动力学和构建机器人控制系统的工具集合,重点强调基于优化的设计/分析[13]。
Drake旨在模拟非常复杂的机器人动力学(例如,摩擦、接触、空气动力学等),但始终强调揭示控制方程中的结构特性(稀疏性、分析梯度、多项式结构、不确定性量化等),并使这些信息用于高级规划、控制和分析算法。
Drake有三个主要组件:1)多体动力学引擎;2)用于将库中的系统模型组织和组合成框图的“系统框架”;3)数学编程的优化框架。这些组件中的每一个对机器人研究都很重要。
图12 Drake系统框架
图片来源:https://medium.com/toyotaresearch/drake-model-based-design-in-the-age-of-robotics-and-machine-learning-59938c985515
这些组件中的每一个对机器人研究都很重要,Drake的愿景是促进在单个应用程序中实现三个组件的强大组合。Drake支持符号计算,这对与优化问题非常有用。Drake还提供了一系列传感器模型、执行器模型、低层控制器和低层感知算法。Drake提供了Python接口,以实现新算法的快速验证,同时还致力于为许多最先进的算法提供可靠的开源实现。

图13 Drake仿真器
图片来源:https://www.youtube.com/watch?v=_8af5NgbKVc
>>>> MATLAB
MATLAB是由美国MathWorks公司出品的一款商业数学软件。它是一个多功能的科学计算平台,将算法开发、数据分析、矩阵计算等诸多强大功能集成在一个易于操作的视窗环境中。
MATLAB下的Simulink[14]更是被认为可以“仿真任何系统”。正是由于MATLAB/Simulink的强大功能,它在机器人领域得到了广泛的运用。内置的Simscape工具箱可以用来设计和分析三维刚体机械结构(譬如汽车平台、机械臂等等)。除此之外,它还可以使用电气、液压或气动以及其他组件进行多域系统建模。Robotics System Toolbox可以让你通过ROS直接连接到传感器并且对传回来的信息进行校准、降噪等操作。
同时,针对机器视觉,Mathwork开发了单独的工具箱Computer Vision Toolbox。它支持单目、立体、鱼眼等相机的校准,提供了对象的检测跟踪,特征提取和匹配等算法,同时可以根据数据进行三维重建和3D点云处理。Simulink提供了一系列的嵌入式硬件支持,预设Arduino和树莓派的硬件包,支持微控制器、PLC、FPGA、GPU等多种设备,不仅仅可以仿真,更可以对硬件进行直接的控制。Simulink的编程环境具有多样化,支持C/C++,可以直接连接到ROS系统。MATLAB Coder和Simulink Coder可以根据你建立的模型自动生成控制代码,大大减轻工作量。

图14 Matlab/Simulink Simscape仿真器
图片来源:https://www.mathworks.com/content/dam/mathworks/mathworks-dot-com/solutions/automotive/files/jp-expo-2015/mbd-for-robotics-development.pdf
https://ww2.mathworks.cn/videos/modeling-and-simulation-of-walking-robots-1576560207573.html
>>>> PyBullet
PyBullet[15]是基于Bullet物理引擎开发的仿真环境,是Gazebo强有力的竞争对手。由Erwin Coumans和其他贡献者开发,它允许用户使用Python编程语言来控制Bullet3物理引擎,并进行物理仿真。
PyBullet和Python紧密结合,目前在增强学习(RL)中广泛应用。该环境可以结合TensorFlow实现RL训练,比如DQN、PPO、TRPO、DDPG等算法[16],目前看到比较多的都是仿真多关节机器人。
PyBullet是一个快速且易于使用的Python模块,用于机器人仿真和机器学习,重点是Sim到Real的转换;使用PyBullet,可以从URDF、SDF、MJCF和其他文件格式加载铰接体;PyBullet提供正向动力学仿真、反向动力学计算、正向和反向运动学、碰撞检测和射线相交查询;Bullet Physics SDK包括PyBullet机器人示例,例如模拟的四足机器人Minitaur,使用tensorflow进行决策的模拟人类跑步,以及KUKA抓取物体;简化的坐标多体、刚体和变形体由统一的LCP约束求解器处理。
除了物理模拟之外,还具有渲染绑定,包括CPU渲染器(TinyRenderer)和OpenGL可视化,并支持HTC Vive和Oculus Rift等虚拟现实;PyBullet还具有执行碰撞检测查询(最近的点,重叠对,射线相交测试等)并添加调试渲染(调试行和文本)的功能;PyBullet具有跨平台的内置客户端服务器,支持共享内存,UDP和TCP网络,可以在连接到Windows VR服务器的Linux上运行PyBullet;PyBullet包装了新的Bullet C-API,它独立于底层的物理引擎和渲染引擎,因此我们可以轻松地迁移到Bullet的较新版本,或者使用不同的物理引擎或渲染引擎。
图15 PyBullet仿真器
图片来源:https://www.youtube.com/watch?v=aiWxIjtMMFI
https://twitter.com/erwincoumans/status/1002601540111118337
>>>> Mujoco
MuJoCo全称Multi-Joint dynamics with Contact (接触型多关节动力学),它是一个模拟接触周围环境的多关节运动的物理引擎,可用于机器人动作、生物力学、图形和动画、机器学习等领域。2021年被DeepMind收购并开源,可在Linux,Windows和Mac上运行。
MuJoCo结合了广义坐标模拟和优化后的接触动力学[17],这使它能够模拟完整的物理运动。更让人惊艳的,还有MuJoCo对于人体关节、肌肉复杂运动的模拟。许多机械手的研究,都是先在MuJoCo中模拟和验证的。MuJoCo还能灵活将仿真步骤拆开执行,或者只执行仿真流程的一部分(如不计算逆动力学)。而且支持软体材料,如绳子、布料的稳定性仿真。
为了提高仿真性能,MuJoCo做了AVX指令等大量优化,是极少的选择C语言来实现的现代物理引擎之一。而由C语言编写,能够让它很容易转化为其他架构。使用基于 XML 的 MJCF 场景描述语言定义模型,用专用的优化编译器编译。除了 MJCF,引擎还支持统一机器人描述格式 (URDF) 的文件上传。MuJoCo 还提供了一个图形界面,用于仿真过程的交互式 3D 可视化和使用 OpenGL 的结果表示。
图16 Mujoco仿真器1
图片来源:https://www.deepmind.com/blog/opening-up-a-physics-simulator-for-robotics

图17 Mujoco仿真器2
图片来源:https://www.youtube.com/watch?v=3dlM1dvBtko
六、总结
仿真在复杂的机器人项目中可以有效地帮助提高开发和测试效率,使得开发者在实机测试和部署之前尽可能多的发现错误,在系统出现问题之后更方便的复现和解决问题,同时还有利于同一个项目中不同的小团队(例如软件组和硬件组)协调工作进度。但是,天下没有免费的午餐,构建和维护仿真也需要额外的工作量,因此开发团队需要针对项目需求,评估和选择合适的仿真平台以最大化收益/成本。
参考文献:
[1] https://raisim.com/
[2] https://pybullet.org/wordpress/
[3] http://www.ode.org/
[4] https://mujoco.org/
[5] https://dartsim.github.io/
[6] Erez, Tom, Yuval Tassa, and Emanuel Todorov. "Simulation tools for model-based robotics: Comparison of bullet, havok, mujoco, ode and physx." 2015 IEEE international conference on robotics and automation (ICRA). IEEE, 2015.
[7] https://leggedrobotics.github.io/SimBenchmark/
[8] https://cyberbotics.com/
[9] https://www.coppeliarobotics.com/
[10] https://gazebosim.org/
[11] https://www.nvidia.com/en-us/deep-learning-ai/industries/robotics/
[12] https://drake.mit.edu/
[13] Posa, Michael, Scott Kuindersma, and Russ Tedrake. "Optimization and stabilization of trajectories for constrained dynamical systems." 2016 IEEE International Conference on Robotics and Automation (ICRA). IEEE, 2016.
[14] https://www.mathworks.com/products/simulink.html
[15] https://pybullet.org/wordpress/
[16] Mower, Christopher, et al. "ROS-PyBullet Interface: A framework for reliable contact simulation and human-robot interaction." Conference on Robot Learning. PMLR, 2023.
[17] Todorov, Emanuel. "Convex and analytically-invertible dynamics with contacts and constraints: Theory and implementation in mujoco." 2014 IEEE International Conference on Robotics and Automation (ICRA). IEEE, 2014.
本文为授权转载文章,任何人未经原授权方同意,不得复制、转载、摘编等任何方式进行使用,e-works不承担由此而产生的任何法律责任! 如有异议请及时告之,以便进行及时处理。联系方式:editor@e-works.net.cn tel:027-87592219/20/21。