仿真是机器人学习和研究过程中最重要的工具之一,是指通过计算机对实际的物理系统进行模拟的技术。机器人仿真基于交互式计算机图形技术和机器人学理论,生成机器人的几何图形,并对其进行三维显示,用来描述机器人及工作环境的动态变化过程本期技术干货,我们邀请到了小米工程师——谢岩,以机器人仿真平台为主要讨论对象,从仿真的必要性到仿真评价指标,结合具体的物理引擎和仿真软件,多层次介绍机器人仿真平台。

一、仿真必要性

为什么需要仿真?这可能是绝大部分初学者的第一个疑问。传统的产品开发流程往往需要经过产品定义—>概念设计—>方案评审—>详细设计—>样机试制—>测试—>方案优化等流程。但是随着产品复杂度的增大,尤其对于机器人这种多自由度复杂系统,直接采用上述流程的弊端越来越大。

首先,当测试发现问题时,需要对方案进行迭代优化,尤其对于硬件设计,加工以及组装的过程耗时费力,中间一旦出现问题,迭代的周期很容易就会拖长。

图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 仿真评价指标

评价指标

指标描述

计算速度

仿真计算效率

计算精度

仿真结果与理论值的接近程度

接触模型

接触模型准确,确保动力学仿真结果与实际相近

编程环境

支持的编程语言

兼容性

支持的操作系统

可扩展性

支持的第三方工具,包括矩阵计算、数值优化、数据分析等

开源

源代码开源程度,API接口开放程度

成本

包括资金花费和时间花费

四、物理引擎介绍

物理引擎有两种常见的类型:高精度物理引擎实时物理引擎

高精度物理引擎需要更多的处理能力来计算非常精确的物理,侧重于精确计算,仿真结果精度高,通常使用在科学研究(计算物理学)和电脑动画电影制作,比如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 五种物理引擎的基本特点

RaiSim

Bullet

ODE

MuJoCo

DART

Initial

release

Unreleased

2006

2001

2015

2012

Author

J. Hwangbo

D. Kang

E. Coumans

R. Smith

E. Todorov

J. Lee et al

License

Proprietary

Zlib

(open-source)

GPL / BSD

(open-source)

Apache

(open-source)

BSD

Main

purpose

Robotics

Game, Graphics

Game, Graphics

Robotics

Robotics

Language

C++

C / C++

C++

C

C++

API

C++

C++ / Python

C

C

C++

Contacts

Hard

Hard/Soft

Hard/Soft

Soft

Hard

Solver

Bisection

MLCP

LCP

Newton / PGS / CG

LCP

Integrator

Semi-implicit Euler

Semi-implicit Euler

Semi-implicit Euler

Semi-implicit Euler / RK4

Semi-implicit Euler

为了更公平地评估各物理引擎的性能,我们引入速度-精度曲线。如下图所示,理想的物理引擎位于右上角,而大多数物理引擎表示为从左到右向下倾斜的曲线。较好的物理引擎曲线位于右上方;因此,曲线1表示的物理引擎优于曲线2表示的物理引擎。

图6 速度-精度曲线

下表描述了基于速度-精度曲线评估的各物理引擎性能结果[7]。

表3 五种物理引擎性能结果

RaiSim

Bullet

ODE

MuJoCo

DART

friction model test

++

+++

-

+

-

single-body elastic collision test

++++

++

+++

-

+

single-body hard contact test

+++

+

++

+

+

single-body energy test

++++

++

+++

-

+

articulated-robot-system speed test for quadrupedal robot

+++++

+++

+

++++

++

articulated-robot-system momentum test

++++

+++

++

+++++ (RK4)

+

+++ (Euler)

  • +: 好的仿真结果,+越多代表性能越好

  • -: 由于模型不准确或异常而无法仿真

从表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.

干货 | 浅谈机器人仿真平台相关推荐

  1. 干货 | 浅谈机器人强化学习--从仿真到真机迁移

    " 对于机器人的运动控制,强化学习是广受关注的方法.本期技术干货,我们邀请到了小米工程师--刘天林,为大家介绍机器人(以足式机器人为主)强化学习中的sim-to-real问题及一些主流方法. ...

  2. 计算机网络仿真技术概述,浅谈计算机网络仿真技术及其研究

    浅谈计算机网络仿真技术及其研究 来源:用户上传 作者: 摘要:在信息化和工业化相互促进的现代化进程中,计算机网络仿真技术将逐步深入到国民经济的各个领域,并将扮演越来越重要的角色.该文正是基于此背景,对 ...

  3. 计算机仿真在机械应用,浅谈计算机仿真在机械的应用.doc

    浅谈计算机仿真在机械的应用 浅谈计算机仿真在机械上的应用 李思宏 (重庆交通大学,重庆402247) 摘要:如今计算机仿真技术在机械上有着广泛的应用,计算机仿真已然成为热门.本文用综述的形式简要介绍了 ...

  4. python股票网格交易法详解_干货 | 浅谈网格交易法

    原标题:干货 | 浅谈网格交易法 网格交易法的基本原理就是把行情的所有日间上下的波动全部囊括,它不会放过任何一次的行情上下波动. 不管市场价格如何上下波动,不外3种形态:上涨,盘整,下跌.由于不同的操 ...

  5. Webots 机器人仿真平台(一) 系统安装

    系统安装 1 Webot介绍 2 Webot安装 2.1 ubuntu环境安装 2.2 Windows环境安装 3 参考资料 1 Webot介绍 Webots是一个开源的三维移动机器人模拟器,它与ga ...

  6. 浅谈企业级物联网平台

    随著越来越多的公司开始涉足物联网相关领域,这也意味着会有很多原来是做互联网项目开发的同学也不得不开始学习物联网的开发,同样的对于项目经理来说,如何确定一个满足业务需求的物联网技术架构则至关重要,笔者根 ...

  7. 浅谈计算机系统仿真,浅谈计算机仿真技术

    介绍了计算机仿真的概念.意义.方法及Simulink仿真的一般步骤,并研究设计了几个仿真实例. 维普资讯 http://doc.xuehai.net 第2卷第 1 2期 20 06年 2月 赤峰学院学 ...

  8. 中鸣循迹机器人_浅谈机器人设计方法

    浅谈机器人设计方法 摘要: 机器人是人类完成智能化中非常重要的工具, 随着时代的发展, 机器 人已经在世界有了一定的发展,甚至很多国家机器人已经运用到实际的生活中 去. 而机器人的设计方法无疑是很多人 ...

  9. Webots 机器人仿真平台(三) 新建环境模型

    新建环境模型 1 新建世界模型 2 添加机器人模型 3 添加机器人控制器 参考资料 这篇博客介绍如何在webot中新建一个世界并在该环境中加入障碍物.机器人等元素,并添加机器人对应的控制器.这可以帮助 ...

最新文章

  1. 黑鹰ASP教程(全部)下载
  2. MAT之GA:利用GA对一元函数进行优化过程,求x∈(0,10)中y的最大值
  3. MySQL Schema设计(三)利用Python操作Schema
  4. CAS权属线粗细修改
  5. linuxHacks中记载的一些小技巧
  6. 【转发】响应式Web设计?怎样进行?
  7. Yuchuan_Linux_C编程之二 GCC编译
  8. 使用Perl进行网页数据抓取[初学者简明版]
  9. ubuntu9.10之grub.cfg详解
  10. Flutter TV应用的开发尝试
  11. Win1903下,如何简单的附加dnf
  12. STM32的Flash地址空间的数据读取
  13. 【seaborn】sns.set() 绘图风格设置
  14. 美工设计怎样可以提高自己设计能力
  15. 大屏可视化低代码开发平台网址
  16. python练习, 打鱼晒网问题
  17. Win10配置pip为豆瓣源,从此装库飞快
  18. 【车间调度】FJSP评价指标
  19. 21.深入浅出:直流电源的组成_单相整流滤波电路——参考《模拟电子技术基础》清华大学华成英主讲
  20. 用python tkinter组件实现扫雷游戏

热门文章

  1. 纯色html背景,css 背景(background)属性、背景图定位
  2. iPhone开发环境
  3. 致青春、致所爱的生活
  4. java和php的全面对比_JAVA 和PHP 比较
  5. 人脸识别技术开发人证比对访客系统
  6. 微信小程序api概述
  7. flink消费kafka时topic partitions 和并行度间的分配源码详解
  8. HDU 6395 灵性优化
  9. 个人和组织高绩效的秘籍:OKR工作法
  10. iTunes只能装C盘吗_安装win10系统时系统盘C盘分区多大空间适合?