This article possibly contains original research .(August 2014) |
A robotics simulator is a simulator used to create an application for a physical robot without depending on the physical machine, thus saving cost and time. In some case, such applications can be transferred onto a physical robot (or rebuilt) without modification.
The term robotics simulator can refer to several different robotics simulation applications. For example, in mobile robotics applications, behavior-based robotics simulators allow users to create simple worlds of rigid objects and light sources and to program robots to interact with these worlds. Behavior-based simulation allows for actions that are more biotic in nature when compared to simulators that are more binary, or computational. Also, behavior-based simulators may learn from mistakes and can demonstrate the anthropomorphic quality of tenacity.
One of the most popular applications for robotics simulators is for 3D modeling and rendering of a robot and its environment. This type of robotics software has a simulator that is a virtual robot, which can emulate the motion of a physical robot in a real work envelope. Some robotics simulators use a physics engine for more realistic motion generation of the robot. The use of a robotics simulator to develop a robotics control program is highly recommended regardless of whether a physical robot is available or not. The simulator allows for robotics programs to be conveniently written and debugged off-line with the final version of the program tested on a physical robot. This applies mainly to industrial robotic applications, since the success of off-line programming depends on how similar the physical environment of a robot is to a simulated environment.
Sensor-based robot actions are much more difficult to simulate and/or to program off-line, since the robot motion depends on instantaneous sensor readings in the real world.
Modern simulators tend to provide the following features:
Among the newest technologies available today for programming are those which use a virtual simulation. Simulations with the use of virtual models of the working environment and the robots themselves can offer advantages to both the company and programmer. By using a simulation, costs are reduced, and robots can be programmed off-line which eliminates any down-time for an assembly line. Robot actions and assembly parts can be visualized in a three-dimensional virtual environment months before prototypes are even produced. Writing code for a simulation is also easier than writing code for a physical robot. While the move toward virtual simulations for programming robots is a step forward in user interface design, many such applications are only in their infancy.
| Software | Developers | Development status | License | 3D rendering engine | Physics engine | 3D modeller | Platforms supported |
|---|---|---|---|---|---|---|---|
| Gazebo | Open Source Robotics Foundation (OSRF) | Active | Apache 2.0 | OGRE | ODE, Bullet, Simbody, DART | Internal | Linux, macOS, Windows |
| RoboDK | RoboDK | Active | Proprietary | OpenGL | Gravity plug-in | Internal | Linux, macOS, Windows, Android, iOS, Debian |
| SimSpark | O. Obst et al. (+26) | Active | GNU GPL (v2) | Internal | ODE | None | Linux, macOS, Windows |
| Webots | Cyberbotics Ltd. | Active | Apache 2.0 | Internal (WREN) | Fork of ODE | Internal | Linux, macOS, Windows |
| OpenRAVE | OpenRAVE Community | Active | GNU LGPL | Coin3D, OpenSceneGraph | ODE, Bullet | Internal | Linux, macOS, Windows |
| CoppeliaSim | Coppelia Robotics | Active | Dual: commercial, GNU GPL | Internal | MuJoCo, Bullet, ODE, Vortex, Newton | Internal | Linux, macOS, Windows |
| ENCY Robot [1] [2] | ENCY Software | Active | Proprietary | – | – | – | Windows [3] |
| Software | Developers | Development status | License | 3D rendering engine | Physics engine | 3D modeller | Platforms supported |
| Software | Main programming language | Formats support | Extensibility | External APIs | Robotics middleware support | Primary user interface | Headless simulation |
|---|---|---|---|---|---|---|---|
| Gazebo | C++ | SDF [4] /URDF, [5] OBJ, STL, COLLADA | Plug-ins (C++) | C++ | ROS, Player, sockets (protobuf messages) | GUI | Yes |
| RoboDK | Python | SLDPRT, SLDASM, STEP, OBJ, STL, 3DS, COLLADA, VRML, Robot Operating System URDF, Rhinoceros 3D, ... | API, [6] Plug-In Interface [7] | Python, C/C++, C#, Matlab, ... | Socket | GUI | Yes |
| SimSpark | C++, Ruby | Ruby Scene Graphs | Mods (C++) | Network (sexpr) | Sockets (sexpr) | GUI, sockets | Unknown |
| Webots | C++ | WBT, VRML, X3D, 3DS, Blender, BVH, COLLADA, FBX, STL, OBJ, URDF | API, PROTOs, plug-ins (C/C++) | C, C++, Python, Java, Matlab, ROS | Sockets, ROS, NaoQI | GUI | Yes [8] |
| OpenRAVE | C++, Python | XML, VRML, OBJ, COLLADA | Plug-ins (C++), API | C/C++, Python, Matlab | Sockets, ROS, YARP | GUI, sockets | Yes |
| CoppeliaSim | C++, Python, Lua | 3DS, Blender, COLLADA, STL, OBJ, URDF, SDF, GLTF, XML | Plug-ins (C/C++), embedded scripts (Python, Lua), remote API (C, C++, Python, Java, MATLAB, Octave), add-ons (Python, Lua) | C, C++, Python, Java, MATLAB, Octave, ROS, ROS 2.0 | Sockets, ROS, ROS 2.0, ZeroMQ | GUI | Yes |
| Software | Main programming language | Formats support | Extensibility | External APIs | Robotic middleware support | Primary user interface | Headless simulation |
| Software | Mailing list | API documentation | Public forum, help system | User manual | Issue tracker | Wiki | Chat |
|---|---|---|---|---|---|---|---|
| Gazebo | Yes [9] | Yes [10] | Yes [11] | Yes [12] | Yes [13] | No | |
| RoboDK | Yes [14] | Yes [15] | Yes [16] | Yes [17] | Yes [18] | No | Unknown |
| SimSpark | Yes [19] | Yes [20] | No | Yes [21] | Yes [22] | Yes [23] | Unknown |
| Webots | No | Yes [24] | Yes [25] | Yes [26] | Yes [27] | Yes [28] | Yes [29] |
| OpenRAVE | Yes [30] | Yes [31] | Yes [32] | Yes [33] | Yes [32] | Yes [34] | Unknown |
| CoppeliaSim | No | Yes [35] | Yes [36] | Yes [37] | Yes [38] | Unknown | No |
| Software | Mailing list | API documentation | Public forum, help system | User manual | Issue tracker | Wiki |
| Software | Static code checker | Style checker | Test system(s) | Test function coverage | Test branch coverage | Lines of code | Lines of comments | Continuous integration |
|---|---|---|---|---|---|---|---|---|
| Gazebo | cppcheck [39] | cpplint [39] | gtest and qtest [39] | 77.0% [39] | 53.3% [39] | 320k [39] | 106k [39] | Jenkins [39] |
| RoboDK | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown |
| SimSpark | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown |
| Webots | cppcheck [40] | clang-format [41] | unit tests [42] | 100% of API functions [43] | master, [44] develop [45] | ~200k | ~50k | GitHub Actions |
| OpenRAVE | Unknown | Unknown | Python nose | Unknown | Unknown | Unknown | Unknown | Jenkins [46] |
| CoppeliaSim | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown |
| Software | Static code checker | Style checker | Test system(s) | Test function coverage | Test branch coverage | Lines of code | Lines of comments | Continuous integration |
| Software | CAD to motion | Dynamic collision avoidance | Relative end effectors | Off-line programming | Real-time streaming control of hardware |
|---|---|---|---|---|---|
| Gazebo | Unknown | Yes | Yes | Yes | Yes |
| RoboDK | Yes | Yes | Yes | Yes | Yes |
| SimSpark | Unknown | No | Unknown | No | No |
| Webots | Unknown | Yes | Yes | Yes | Yes |
| OpenRAVE | Unknown | No | Unknown | No | No |
| CoppeliaSim | Unknown | Yes | Yes | Yes | Yes |
| Software | CAD to motion | Dynamic collision avoidance | Relative end effectors | Off-line programming | Real-time streaming control |
| Software | UGV (ground mobile robot) | UAV (aerial robots) | AUV (underwater robots) | Robotic arms | Robotic hands (grasping simulation) | Humanoid robots | Human avatars | Full list |
|---|---|---|---|---|---|---|---|---|
| Gazebo | Yes [47] | Yes [48] | Yes [49] | Yes [50] | Yes [51] | Yes [52] | Yes [53] | |
| RoboDK | No | No | No | Yes [54] | No | No | No | Yes [54] |
| SimSpark | Yes | No | No | Maybe | Maybe | Yes | No | |
| Webots | Yes | Yes | Yes [55] | Yes | Yes | Yes [56] | Yes | Yes [57] |
| OpenRAVE | Yes | Unknown | Unknown | Yes | Yes | Yes | Yes | |
| CoppeliaSim | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes [58] |
| Software | UGV (ground mobile robot) | UAV (aerial robots) | AUV (underwater robots) | Robotic arms | Robotic hands (grasping simulation) | Humanoid robots | Human avatars | Full list |
| Software | Generic kinematic chains | Force-controlled motion | Full list | Circular kinematic chains | Kinematically redundant chains | Bifurcated kinematic chains |
|---|---|---|---|---|---|---|
| Gazebo | Yes | Yes | Yes | Yes | Yes | |
| RoboDK | Unknown | Unknown | Unknown | Unknown | Unknown | |
| SimSpark | Yes | No | SimSpark effectors | Unknown | Unknown | Unknown |
| Webots | Yes | Yes | Webots actuators | Yes | Yes | Yes |
| OpenRAVE | Yes | Yes | Joints,Extra Actuators | Yes [59] | Yes | Yes [60] |
| CoppeliaSim | Yes | Yes | Yes | Yes | Yes | |
| Software | Generic kinematic chains | Force-controlled motion | Full list | Circular kinematic chains | Kinematically redundant chains | Bifurcated kinematic chains |
| Software | Odometry | IMU | Collision | GPS | Monocular cameras | Stereo cameras | Depth cameras | Omnidirectional cameras | 2D laser scanners | 3D laser scanners | Full list |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Gazebo | Yes | Yes | Yes [61] | Yes | Yes [62] | Yes | Yes | Yes | Yes [63] | Yes [63] | |
| RoboDK | Unknown | Unknown | Unknown | Unknown | Unknown | Yes | Yes | Yes | Yes | Yes | |
| SimSpark | Yes | Yes | Yes [64] | Partial [65] | Yes | Partial | Unknown | Unknown | No | No | SimSpark perceptors |
| Webots | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Webots sensors |
| OpenRAVE | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Unknown | Yes | Yes | |
| CoppeliaSim | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | |
| Software | Odometry | IMU | Collision | GPS | Monocular cameras | Stereo cameras | Depth cameras | Omnidirectional cameras | 2D laser scanners | 3D laser scanners | Full list |