Robotics simulator#Simulators
{{short description|Simulator to create applications for physical robots}}
{{original research|date=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.
[[Robologix robotics simulator|thumb|right]]
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.
Features
Modern simulators tend to provide the following features:
- Fast robot prototyping:
- Using the own simulator as creation tool
- Using external tools
- Physics engines for realistic movements: Most simulators use Bullet, ODE or PhysX.
- Realistic 3d rendering: Standard 3d modeling tools or third-party tools can be used to build the environments.
- Dynamic robot bodies with scripting: C, C++, Perl, Python, Java, URBI, and MATLAB languages used by Webots; C++ used by Gazebo.
Simulators
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.
= General information =
class="wikitable sortable" style="font-size: 80%; text-align: center; width: auto;" |
Software
! Developers ! Development status ! License ! 3D rendering engine ! Physics engine ! 3D modeller ! Platforms supported |
---|
{{Rh}} class="table-rh" |Gazebo
| Open Source Robotics Foundation (OSRF) | Active | {{free|Apache 2.0}} | OGRE | Internal | Linux, macOS, Windows |
{{Rh}} class="table-rh" |RoboDK
| RoboDK | Active | {{Proprietary}} | OpenGL | Gravity plug-in | Internal | Linux, macOS, Windows, Android, iOS, Debian |
{{Rh}} | SimSpark
| O. Obst et al. (+26) | Active | GNU GPL (v2) | Internal | ODE | None | Linux, macOS, Windows |
{{Rh}} class="table-rh" |Webots
| Cyberbotics Ltd. | Active | {{free|Apache 2.0}} | Internal (WREN) | Fork of ODE | Internal | Linux, macOS, Windows |
{{Rh}} class="table-rh" |OpenRAVE
| OpenRAVE Community | Active | GNU LGPL | Internal | Linux, macOS, Windows |
{{Rh}} class="table-rh" |CoppeliaSim
| Coppelia Robotics | Active | Dual: commercial, GNU GPL | Internal | MuJoCo, Bullet, ODE, Vortex, Newton | Internal | Linux, macOS, Windows |
class="sortbottom"
! Software ! Developers ! Development status ! License ! 3D rendering engine ! Physics engine ! 3D modeller ! Platforms supported |
= Technical information =
class="wikitable sortable" style="font-size: 80%; text-align: center; width: auto;" |
Software
! Main programming language ! Formats support ! Extensibility ! External APIs ! Robotics middleware support ! Primary user interface ! Headless simulation |
---|
{{Rh}} | Gazebo
| C++ | SDF{{Cite web|url=http://sdformat.org|title=SDF|access-date=2019-04-27|work=sdformat.org|last=OSRF}}/URDF,{{Cite web|url=http://wiki.ros.org/urdf|title=urdf - ROS Wiki|access-date=2017-10-06|work=wiki.ros.org}} OBJ, STL, COLLADA | Plug-ins (C++) | C++ | ROS, Player, sockets (protobuf messages) | GUI | {{Yes}} |
{{Rh}} | RoboDK
| Python | SLDPRT, SLDASM, STEP, OBJ, STL, 3DS, COLLADA, VRML, Robot Operating System URDF, Rhinoceros 3D, ... | API,{{Cite web|url=https://github.com/RoboDK/RoboDK-API|title=RoboDK API|website=GitHub |date=22 October 2021}} Plug-In Interface{{Cite web|url=https://github.com/RoboDK/Plug-In-Interface|title=RoboDK Plug-In Interface| website=GitHub |date=16 October 2021}} | Python, C/C++, C#, Matlab, ... | Socket | GUI | {{Yes}} |
{{Rh}} | SimSpark
| C++, Ruby | Ruby Scene Graphs | Mods (C++) | Network (sexpr) | Sockets (sexpr) | GUI, sockets | {{Unk}} |
{{Rh}} class="table-rh" | 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}}However, requires a connection on an X server for 3D rendering |
{{Rh}} | OpenRAVE
| C++, Python | Plug-ins (C++), API | C/C++, Python, Matlab | Sockets, ROS, YARP | GUI, sockets | {{Yes}} |
{{Rh}} class="table-rh" | 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}} |
class="sortbottom"
! Software ! Main programming language ! Formats support ! Extensibility ! External APIs ! Robotic middleware support ! Primary user interface ! Headless simulation |
= Infrastructure =
== Support ==
== Code quality ==
class="wikitable sortable" style="font-size: 80%; text-align: center; width: auto;" |
Software
! Static code checker ! Style checker ! Test system(s) ! Test function coverage ! Test branch coverage ! Lines of code ! Lines of comments ! Continuous integration |
---|
{{Rh}} | Gazebo |
{{Rh}} | RoboDK
| {{Unk}} | {{Unk}} | {{Unk}} | {{Unk}} | {{Unk}} | {{Unk}} | {{Unk}} | {{Unk}} |
{{Rh}} | SimSpark
| {{Unk}} | {{Unk}} | {{Unk}} | {{Unk}} | {{Unk}} | {{Unk}} | {{Unk}} | {{Unk}} |
{{Rh}} | Webots
| cppcheck[https://github.com/omichel/webots/blob/develop/tests/sources/test_cppcheck.py CppCheck] | clang-format[https://github.com/omichel/webots/blob/develop/tests/sources/test_clang_format.py Clang Format] | unit tests[https://github.com/omichel/webots/tree/develop/tests Unit tests] | 100% of API functions[https://github.com/omichel/webots/tree/develop/tests/api API tests] | master,[https://github.com/omichel/webots/tree/master Webots master] develop[https://github.com/omichel/webots/tree/develop Webots develop] | ~200k | ~50k | GitHub Actions |
{{Rh}} | OpenRAVE
| {{Unk}} | {{Unk}} | {{Unk}} | {{Unk}} | {{Unk}} | {{Unk}} | Jenkins[http://openrave.org/docs/latest_stable/devel/testing/ Source] |
{{Rh}} | CoppeliaSim
| {{Unk}} | {{Unk}} | {{Unk}} | {{Unk}} | {{Unk}} | {{Unk}} | {{Unk}} | {{Unk}} |
class="sortbottom"
! Software ! Static code checker ! Style checker ! Test system(s) ! Test function coverage ! Test branch coverage ! Lines of code ! Lines of comments ! Continuous integration |
= Features =
class="wikitable sortable" style="font-size: 80%; text-align: center; width: auto;" |
Software
! CAD to motion ! Dynamic collision avoidance ! Relative end effectors ! Off-line programming ! Real-time streaming control of hardware |
---|
{{Rh}} | Gazebo
| {{Unk}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} |
{{Rh}} class="table-rh" | RoboDK
| {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} |
{{Rh}} | SimSpark
| {{Unk}} | {{No}} | {{Unk}} | {{No}} | {{No}} |
{{Rh}} | Webots
| {{Unk}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} |
{{Rh}} | OpenRAVE
| {{Unk}} | {{No}} | {{Unk}} | {{No}} | {{No}} |
{{Rh}} | CoppeliaSim
| {{Unk}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} |
Software
! CAD to motion ! Dynamic collision avoidance ! Relative end effectors ! Off-line programming ! Real-time streaming control |
== Robot families ==
class="wikitable sortable" style="font-size: 80%; text-align: center; width: auto;" |
Software
! UGV (ground mobile robot) ! UAV (aerial robots) ! AUV (underwater robots) ! Robotic arms ! Robotic hands (grasping simulation) ! Humanoid robots ! Human avatars ! Full list |
---|
{{Rh}} | Gazebo
| |
{{Rh}} | RoboDK
| {{No}} | {{No}} | {{No}} | {{Yes}}[https://robodk.com/library RoboDK robot library] | {{No}} | {{No}} | {{No}} |
{{Rh}} | SimSpark
| {{Yes}} | {{No}} | {{No}} | {{Maybe}} | {{Maybe}} | {{Yes}} | {{No}} | |
{{Rh}} | Webots
| {{Yes}} | {{Yes}} | {{Yes}}including Salamander robot | {{Yes}} | {{Yes}} | {{Yes}}including Nao, DARwIn-OP, Fujitsu HOAP2, Kondo KHR-2HV, KHR-3, etc. | {{Yes}} | {{yes}}[https://www.cyberbotics.com/doc/guide/robots Webots robot models] |
{{Rh}} | OpenRAVE
| {{Yes}} | {{Unk}} | {{Unk}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} |
{{Rh}} | CoppeliaSim
| {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}}[https://www.coppeliarobotics.com/helpFiles/en/coppeliaSimFeatures.htm CoppeliaSim main features] |
class="sortbottom"
! Software ! UGV (ground mobile robot) ! UAV (aerial robots) ! AUV (underwater robots) ! Robotic arms ! Robotic hands (grasping simulation) ! Humanoid robots ! Human avatars ! Full list |
== Supported actuators ==
class="wikitable sortable" style="font-size: 80%; text-align: center; width: auto;" |
Software
! Generic kinematic chains ! Force-controlled motion ! Full list ! Circular kinematic chains ! Kinematically redundant chains ! Bifurcated kinematic chains |
---|
{{Rh}} | Gazebo
| {{Yes}} | {{Yes}} | | {{Yes}} | {{Yes}} | {{Yes}} |
{{Rh}} | RoboDK
| {{Unk}} | {{Unk}} | | {{Unk}} | {{Unk}} | {{Unk}} |
{{Rh}} | SimSpark
| {{Yes}} | {{No}} | [http://simspark.sourceforge.net/wiki/index.php/Effectors SimSpark effectors] | {{Unk}} | {{Unk}} | {{Unk}} |
{{Rh}} | Webots
| {{Yes}} | {{Yes}} | [https://www.cyberbotics.com/doc/guide/actuators Webots actuators] | {{Yes}} | {{Yes}} | {{Yes}} |
{{Rh}} | OpenRAVE
| {{Yes}} | {{Yes}} | [http://openrave.org/docs/latest_stable/coreapihtml/classOpenRAVE_1_1KinBody.html#acdd35b8f16c73235d677fecb11b40247 Joints],[https://sourceforge.net/projects/opengrasp/files/OpenRAVE%20Plugins/actuators/ Extra Actuators] | {{Yes}} |
{{Rh}} | CoppeliaSim
| {{Yes}} | {{Yes}} | | {{Yes}} | {{Yes}} | {{Yes}} |
class="sortbottom"
! Software ! Generic kinematic chains ! Force-controlled motion ! Full list ! Circular kinematic chains ! Kinematically redundant chains ! Bifurcated kinematic chains |
== Supported sensors ==
class="wikitable sortable" style="font-size: 80%; text-align: center; width: auto;" |
Software
! Odometry ! IMU ! Collision ! GPS ! Monocular cameras ! Stereo cameras ! Depth cameras ! Omnidirectional cameras ! 2D laser scanners ! 3D laser scanners ! Full list |
---|
{{Rh}} | Gazebo
| {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | |
{{Rh}} | RoboDK
| {{Unk}} | {{Unk}} | {{Unk}} | {{Unk}} | {{Unk}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | |
{{Rh}} | SimSpark
| {{Yes}} | {{Yes}} | {{Yes}}Collision detection uses a simplified model | {{Partial}}Possible, no model for noise | {{Yes}} | {{Partial}} | {{Unk}} | {{Unk}} | {{No}} | {{No}} | [http://simspark.sourceforge.net/wiki/index.php/Perceptors SimSpark perceptors] |
{{Rh}} | Webots
| {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | [https://www.cyberbotics.com/doc/guide/sensors Webots sensors] |
{{Rh}} | OpenRAVE
| {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Unk}} | {{Yes}} | {{Yes}} |
{{Rh}} | CoppeliaSim
| {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} |
class="sortbottom"
! Software ! Odometry ! IMU ! Collision ! GPS ! Monocular cameras ! Stereo cameras ! Depth cameras ! Omnidirectional cameras ! 2D laser scanners ! 3D laser scanners ! Full list |