嗨伙计们,罗伯特祥又来和大家见面了!

 

最近,很多小伙伴私信我,问我到底应该使用哪款仿真器来仿真,所以笔者临时决定结合自己的使用经历写篇科普文跟大家一起来分析对比一下GazeboWebotsV-REP这几款常用的机器人仿真软件。

 

首先是Gazebo,相信熟悉ROS的朋友无人不知Gazebo,它是属于ROS生态的一款开源仿真器,功能很强大,正因为其开源特性被广泛使用;再者是Webots,这是笔者接触的第一款机器人仿真软件,刚接触时它还是一款商用软件,同样功能强大,传感器丰富,好在2018年官方将其开源,但如果想获取技术支持,这仍属于付费业务;最后是V-REP,现已改名为CoppeliaSim(下文统称V-REP),属于商用软件,但教育版免费。

注意:这里有一个误区,很多刚接触ROS的小伙伴,误以为Gazebo就是ros的一部分,虽然这么说也不完全错,但它是一个独立的机器人仿真软件,就算没有ROS,我们也完全可以用它实现机器人的仿真。

 

对于任何一款仿真软件而言,如果没有物理引擎,也仅仅是个三维显示工具而已,而且物理引擎是仿真数据的缔造者,物理引擎的好坏甚至会直接影响仿真精度,因此我们先来看下这几款软件的物理引擎。

1. 物理引擎

先来看下这几款软件所支持的物理引擎:

 

▶  Gazebo:支持ODE、Bullet、Simbody和DART,其默认引擎为ODE

▶  Webots:基于改进的ODE

▶  V-REP:支持Bullet 2.78、Bullet2.83、ODE、Vortex和Newton,默认引擎为Bullet 2.78

 

物理引擎大致可分为两种:一种是以游戏为中心的物理引擎,侧重于实时近似,占用计算资源少,本文介绍的基本都属于这种类型;另一种是用于科学仿真的物理引擎,侧重于精确计算,仿真结果精度高,当然也需要更多的计算资源,比如ADAMS、ANSYS等。

 

大概了解一下这几款软件中的物理引擎:

▶  ODE:开源物理引擎,全称Open Dynamics Engine,它是一款模拟刚体动力学的基于C/C++高性能库,功能稳定,常被用于计算机游戏和虚拟现实等技术上;

▶  Bullet:开源物理引擎,世界三大物理模拟引擎之一,由C++编写,与ODE相同,被广泛应用与游戏开发、电影制作中;

▶  Simbody:开源物理引擎,由C++编写,为多体动力学模拟的高性能库;

▶  DART:开源物理引擎,全称Dynamic Animation and Robotics Toolkit,以准确性和稳定性著称;

▶  Newton:开源物理引擎,精确的3D物理库,用于物理环境的实时仿真;

▶  Vortex:商业物理引擎,由CM-Labs开发,计算精度上可以说是上面介绍这几个物理引擎中的佼佼者,由于这是一款商业物理引擎,因此教育版的V-REP只能用来仿真20秒的过程,对于一些力控算法的验证倒也够用。

 

事实上有了这些开源库,我们完全可以搭建属于自己的仿真模拟器。就机器人仿真而言,我们的目的是快速的验证自己的算法是否有效,以上这些引擎,大多数情况下都能满足我们的需求,笔者个人认为稍微了解即可。

但需要注意:各物理引擎的工作原理有所差异,使用Bullet和ODE引擎时接触边界也会进行碰撞计算,这会使得接触边界设置不当时导致力传感的数据不正常!!!

2. 平台支持及界面操作评价

2.1 支持的平台

▶  Gazebo:完美支持Linux、MacOS,Windows需使用源码自行构建

▶  Webots:Windows、MacOS、Linux全平台支持

▶  V-REP:Windows、MacOS、Linux全平台支持

 

2.2 界面及操作评价

 

1.Gazebo操作界面

 

2.V-REP操作界面

 

3.Webots操作界面

 

三者界面类似,Webots与两者最大的不同在于右面版集成了程序编辑器,上面板而言Gazebo较两者更为丰富,但V-REP可直接在上面板配置仿真引擎,这是Gazebo所没有的。从界面舒适度来看,笔者更倾向于Gazebo。

注意:Gazebo的右面版,默认处于隐藏状态,如果不注意可能都发现不了,右面板可设置关节的位置、速度和力矩等参数,在调试和验证模型关节旋向等问题时很方便。

 

视角操作:

▶  Gazebo:鼠标左键→平移视角、滚轮→缩放视角、按下滚轮→旋转视角、鼠标右键→菜单

▶  V-REP:鼠标左键→平移视角、滚轮→缩放视角(但方向与二者相反)、按下滚轮→旋转视角、鼠标右键→菜单选项

▶  Webots:鼠标左键→旋转视角、滚轮→缩放视角、按下滚轮→难用的旋转视角、鼠标右键→平移视角

 

由此可见,Gazebo同V-REP的操作方式更类似,但V-REP的右键菜单却不能从场景区选中对象进行编辑操作,而对于Webots来说,接触过其他仿真或绘图软件的小伙伴上手Webots时可能会感到很不习惯,但熟悉以后便是神器在手。

 

参数修改:

▶  Gazebo:修改参数后必须按下回车键,否则修改无效

▶  Webots、V-REP:参数修改完单击空白处即可自动保存

 

目标物体选择:

▶  V-REP:在场景区中选择目标物体时,只能选择整体目标,以移动小车为例,如果想选择某个轮子并修改其参数,V-REP只能在模型树上选择并修改,这增加了操作的不便;

▶  Gazebo:在场景区单击目标物体会选中,再次单击一下模型树会展开,并自动调出参数编辑选项;

▶  Webots:在场景区单击即可选择机器人中的某个特征,且场景树会展开到所选择的关节,这便于我们修改模型的参数,尤其是对于一个庞大且零部件众多的模型来说;

 

个人感觉V-REP的操作习惯是三者当中最差的一个,但这不影响它是一款优秀的仿真软件,我们继续往下看。

3. 建模习惯与编程接口

3.1 环境及机器人建模

 

1)环境建模

▶  Gazebo:环境文件为*.world,由XML来描述,官方提供了一些模型库,模型使用*.sdf描述,本质还是XML文件;

▶  V-REP:环境文件为*.ttt,软件集成了很多场景文件,可直接拖入场景区;

▶  Webots:环境文件为*.wbt,由VRML描述,软件同样集成了很多场景文件供用户选择;

 

Gazebo的building editor绝对是神器,可以快速帮我们实现建筑物的结构建模,这是V-REP和Webots所不具备的!

 

2)机器人建模

▶  Gazebo:机器人可在场景树下建模,但我们更习惯直接由XML来建模,常使用urdfxacro描述,同样的,传感器的配置也在这些XML描述文件中完成。对于机器人关节的控制模式,需要通过在描述文件中配置插件来完成;

▶  V-REP:机器人由*.ttm文件描述,可由*.obj*.dxf*.ply*stl*.dae等格式直接导入,同时还支持导入SDFURDF文件(有BUG,某些情况下导入不成功),笔者认为最大的福利自安于集成了很多机械臂和一些常见移动机器人,并且可直接修改模型的控制模式;

▶  Webots:单独的机器人模型格式为*.wbo,机器人建模方式有3种,可由*.VRML格式导入,也可由urdf2webots功能包进行转换,缺点是需要配置python环境,对于新手来说不友好。集成了多款人形机器人和移动机器人,以及几款机械臂。关节的控制模式可由配置关节电机的API参数完成;

 

V-REP集成了多种Gripper,这对搞机械臂抓取的小伙伴简直是天大的福利,而Webots在Gripper上就显得比较鸡肋了,官方只提供了一个ROBOTIQ的3F Gripper。

 

4.V-REP手爪

 

3)传感器

▶  Gazebo:传感器同样可以在描述文件中配置插件*.so完成,当然也可以自己编程实现某些传感功能;

▶  V-REP:传感器相对丰富,对于机械臂仿真而言,V-REP中的六轴力传感器简直是福利;

5.V-REP传感器

 

▶  Webots:传感器类型相当丰富,有多种传感器可供用户选择,美中不足的是官方给定的力传感器只支持三轴力的检测而不支持三轴力矩的检测;

6.webots传感器

 

笔者个人认为,Gazebo对于新手用户不太友好,而V-REP、Webots的图形化操作更容易上手,当然后两者的高质量体验,其商业属性也是很大一部分原因。

 

3.2 编程接口

 

▶ Gazebo:最最常用的是通过gazebo_ros_controlROS建立通信,通信过程已经被封装好了,我们只需要配置文件就可以实现,而当单独使用时可使用C++编写控制器插件来完成机器人的动作控制;Gazebo的数据输出是通过topic来实现的,与MATLAB联合仿真时可利用ROS Toolbox来实现,其本质还是通过ROS框架作为中介来完成的;与ROS联合仿真时,Gazebo当然是最佳选择,与ROS嵌合如此之深,大概就是新手的误区来源吧~
▶ Webots:支持C/C++JavaPythonMATLABROS以及TCP/IP完成控制器编程,不同的编程语言需要查阅不同的API,函数命名接近但风格不同,ROS通信是通过调用ROS API,然后将所使用的语言对应的控制器代码封装成ROS topic的形式来完成,自定义ROS控制器时建议使用Python,使用C/C++需要自行构建MakeFile文件,这对于新手而言绝对是个糟糕的选择;R2020版本已经大大简化了ROS的使用过程,当然也可借MATLAB为中介,通过ROS Toolbox来实现,这就显得过于繁琐了。如果与Simulink联合仿真,以笔者个人的使用经验来看,建议通过To WorkspaceFrom Workspace模块来实现,既简单又实用。
▶ V-REP:支持C/C++PythonJavaMatlabOctaveROS,默认使用Lua脚本语言,最大的特点在于,不管使用哪种编程语言,其函数名称几乎一模一样,这大大降低了用户的上手难度,也便于控制器的各种编程语言的转换。它的实现思路是通过Socket来完成的,其中V-REP作为服务器,控制器程序相当于客户端,且访问模式有阻塞式、非阻塞式等四种操作模式,使用时还需仔细弄明白。当然,也可以通过共享内存的方法实现与Simulink的联合仿真。

 

综上,Webots和V-REP编程更加自由,且两者编程思路相同:①获取设备句柄 ②调用控制设备的API;而Gazebo反而由于需要设置各种launch文件、加载各种参数,一不小心终端就是一片爆红,导致新手上手难度大。

Webots由于刚开源不久,本身处于版本快速迭代期,时常有些小BUG,所以目前来看稳定性是三者中最差的一款仿真器,但仍不影响我对它的评价:移动机器人的地表最强仿真软件!。

4. 上手难度及使用指南

以笔者的经验而言,三款软件的上手难度大体如下:

Webots  <=  V-REP  <  Gazebo

如果是没有编程经验,或者编程底子差的小伙伴,笔者建议使用MATLAB编程,这会让你省去很多麻烦,结合Peter Corke教授的Robotics Toolbox岂不如虎添翼?

 

当然你不能止步于此,还需要学习其他编程语言才可真正应用在实际的机器人控制上(虽然MATLAB也可以)。

 

瑞雷博士有句话说的特别好,我们学习一款软件,应该学习方法,而不是软件本身,因为软件永远在更新~

 

那么如何快速上手一款仿真软件?笔者建议:

① 先大体浏览一遍官方提供的入门操作,熟悉操作界面;

② 然后针对使用目的,学习相应的Demo,不懂的地方查阅帮助文档;

③ 最后的进阶阶段,要熟悉软件安装包的文件级,这有助于我们解决一些软件BUG的问题以及自定义插件或纹理的实现。

5. 关于不同类型机器人的仿真

▶ 移动机器人仿真:Webots是笔者见过的最强移动机器人仿真软件,没有之一;

▶ 机械臂仿真:Gazebo是神器,上手难度大;Webots可实现一些简单的抓取,如果需要精度高点的动力学仿真,笔者建议食用V-REP;此外还有一些其他的仿真软件,诸如Simscape Multibody、Adams等软件,前者可以快速搭建Simulink仿真模型,后者一般机械臂的设计厂商使用较多;

▶ 结合机器学习的仿真:理论上来讲,任何一款仿真软件都能实现,只不过需要自己整合控制器和机器学习相关API罢了;目前最常用的有PyBullet、MuJoCo等,前者开源,后者商用;

▶ 水下机器人:Webots只需要添加一个Fluid节点即可实现流体环境的添加;

 

7.水下机器人

 

▶ 自动驾驶:Gazebo、Webots相对于V-REP更合适,不妨也可以了解一下CARLA;

▶ 软体机器人:2016年笔者参加Webots讲座时得知Webots可以实现,笔者不才不知具体应该如何实现;目前来看没有专用仿真器可以较容易的实现软体机器人的仿真,最新研究成果为加利福尼亚大学洛杉矶分校(UCLA)和卡内基梅隆大学基于离散弹性棒(DER)算法开发的一款物理引擎,具体内容请参见论文《Dynamic simulation of articulated softrobots》。由于笔者研究领域与此无关,故不再深究

▶ 其他

注意:

① 关于PyBullet、CARLA、MuJoCo等软件,笔者并无实操经验,读者还需自行验证~

② 本文不涉及三款软件的高阶玩法,三款软件均具有较大的使用自由度,即完全可自行编程实现某些想要的传感器等功能。

结语

机器人学博大精深,机器人领域的划分程度也非常之详细,每个领域可能都有属于自己的最好用的仿真器。但再好的仿真器,对我们来说也仅仅是个工具而已,适合我们需求,能快速实现验证目的才是王道!

 

当然,也不要陷入一个工具使用的深究,这是新手常犯的错误,一味的追求新鲜却忘记了自己学习/使用仿真器的目的!这也是笔者曾经陷入的坑,切记切记!

 

最后一句话,适合的才是最好的!

 

本文也是基于笔者的学习和使用经验总结的,主观性较强,如果有哪些不当之处或者不明白的地方,欢迎评论区留言交流~

 

读万卷书也要行万里路,我是罗伯特祥,下次见!


参考文献:

  • http://ode.org/
  • https://simtk.org/projects/simbody
  • http://dartsim.github.io/
  • http://gazebosim.org/
  • https://www.coppeliarobotics.com/
  • https://www.cyberbotics.com/
  • https://pybullet.org/wordpress/
  • http://carla.org/
  • 文章Comparative Analysis Between Gazebo and V-REP Robotic Simulators及各软件帮助文档