# 物理引擎与机器人仿真

为什么要机器人仿真? (opens new window) 研究机器人仿真和物理引擎是为了能在安全的仿真环境下,对机器人算法进行验证或训练,在搭建机器人系统时,可以在仿真环境下跑通流程,也可以针对一些特殊的应用场景自行定义相应物理传感器来满足业务需求或者搭建自己的仿真器。

目前存在非常多的机器人仿真工具,本文只研究其中一些主要的工具,比较完整的介绍和对比信息可以参见以下博客或论文:不同机器人仿真框架的基本对比信息 (opens new window)A Review of Physics Simulators for Robotic Applications (opens new window)

对物理引擎与仿真软件之间的联系以及一些相对底层的知识可以参考该文章:物理引擎 (opens new window)

  • 目前有名的物理引擎有:
    Havok, PhysX, Bullet, ODE等。
  • 主流的机器人仿真软件有:
    Gazebo, Webots, V-rep, PyBullet等。
  • 主流的游戏引擎:
    Unity, Unreal

# 一、机器人仿真软件

以下表格包含三个机器人仿真软件的基本情况:

名称 使用物理引擎 特点
Gazebo ODE、Bullet、Simbody、DART ROS团队创建并维护,与ROS接口良好;包含建筑结构建模功能,整体较为成熟;缺点是学习和使用成本较高。
Webots 改进的ODE 2018年才开源,用户较少,但界面更易于使用,有很强的商用品质;集成了多款机器人、机械臂模型,传感器类型丰富;易于学习和使用。
V-REP ODE、Bullet、Vortex、Newton 集成有多组机械臂抓取模型,界面易于使用,和Webots有很多相似的地方。

上表参考:到底该用哪款神器来仿真我的机器人? (opens new window),该文通过环境与机器人建模、传感器、编程接口、使用难度等多个角度对不同仿真软件进行了分析,在做软件选择时可以反复查看,其中的结论(注意该结论带有作者一定的主观色彩,仅供参考):

  • 移动机器人仿真:Webots是相对较好的移动机器人仿真软件;
  • 机械臂仿真:Gazebo是最理想的工具,但上手难度大;Webots能实现简单的抓取,如果需要精度高的动力学仿真,可以使用V-REP;此外还有其他的仿真软件,如Simscape Multibody、Adams等,前者可快速搭建Simulink仿真模型,后者通常机械臂的设计厂商使用更多;
  • 结合机器学习:理论上来讲,任何一款仿真软件都能实现,只不过需要自己整合控制器和机器学习相关API罢了;目前最常用的有PyBullet、MuJoCo等,前者开源,后者商用;
  • 水下机器人:Webots只需要添加一个Fluid节点即可实现流体环境的添加;
  • 自动驾驶:Gazebo、Webots相对于V-REP更合适,也可以了解一下CARLA。

建议:从学习和DIY的角度来说推荐使用Gazebo;从应用的角度来说推荐Webots,毕竟最终的目的还是实现机器人的落地。

除了专用机器人仿真软件 (opens new window),针对于无人驾驶类的应用可以研究AirSim,Carla等,这类软件一般采用的结构是:使用游戏引擎搭建仿真环境以达到逼真的图像类感知效果,独立开发或使用第三方动力学仿真模型来模拟车辆的运动。如果想研究traffic flow,可以了解SUMO。

# 二、机器人仿真应用场景

目前还缺乏功能完备性的机器人仿真工具,但是不同的工具都有适宜的应用场景,以下表格信息整理自论文:A Review of Physics Simulators for Robotic Applications (opens new window)

  • 论文引用 image
  • 基本对比 image
  • 地面移动机器人 image
  • 机器人操纵 image
  • 医用机器人 image
  • 水下机器人 image
  • 飞行机器人 image
  • 软体机器人 image
  • 机器人学习 image

最后,围绕强化学习这部分,MuJoCo的作者在这篇论文中做过精准的性能对比:Comparing Popular Simulation Environments in the Scope of Robotics and Reinforcement Learning (opens new window)

# 三、游戏引擎

比较热门的3D游戏引擎是Unity和Unreal,目前前者跨平台能力更强,很多手游都是Unity制作的,后者是比较老牌的游戏引擎,很多PC端3A游戏由其制作。很多方面上两者在相互借鉴与拉平,两者的选择取决于笔者的喜好。学术上认识一些研究人员在研究机器视觉的时候会使用Unreal来给机器人做训练,Unity与Unreal的对比分析见:游戏引擎Unity&Unreal对比分析 (opens new window)

# Unity的特点:

  • 支持3D内容创作,是目前3D手机游戏的主要开发工具。如:王者荣耀
  • 3D建模功能强大
  • 内部集成了PhysX物理引擎(该引擎目前由Nvidia维护,免费使用,带GPU加速功能)
  • 由于U3D 与PhysX深度结合且U3D不开源,因此在U3D内无法修改PhysX

# Unity围绕机器人仿真方面的增强:

  • U3D软件在2021年3月3日发布了Object Pose Estimation 示例项目,将U3D用于训练机器人,做工业领域应用;
  • 推出了开源程序包URDF Importer用于将URDF格式的机器人模型导入U3D;
  • 推出了支持ROS的版本;
  • 其中的ROS-TCP-Connector用于降低ROS节点与U3D之间信息传输时延;
  • 推出了计算机视觉工具 Perception SDK,可用来创建合成的带标记的训练数据,可用来训练深度学习模型。
  • 关注一些能集成进Unity的工具如:Airsim(微软)、Raisim、LGSVL、Isaac Sim(Nvidia)等。

# 四、补充

增加内容:综合性较强的仿真工具Nvidia的Omniverse,可以持续关注。