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

| ODE, Bullet, Simbody, DART

| 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

| Coin3D, OpenSceneGraph

| ODE, Bullet

| 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

| XML, VRML, OBJ, COLLADA

| 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 ==

class="wikitable sortable" style="font-size: 80%; text-align: center; width: auto;"
Software

! Mailing list

! API documentation

! Public forum, help system

! User manual

! Issue tracker

! Wiki

! Chat

{{Rh}} | Gazebo

| {{Yes}}{{Cite web|url=https://community.gazebosim.org|title=Gazebo Community|access-date=2019-04-27|language=en}}

| {{Yes}}{{Cite web|url=http://gazebosim.org/api.html|title=Gazebo API|access-date=2019-04-27|work=Gazebo Community|language=en}}

| {{Yes}}{{Cite web|url=http://answers.gazebosim.org|title=Gazebo Answers|access-date=2019-04-27|work=Gazebo Community|language=en}}

| {{Yes}}{{Cite web|url=http://gazebosim.org/tutorials|title=Gazebo Tutorials|access-date=2019-04-27|work=Gazebo Community|language=en}}

| {{Yes}}{{Cite web|url=http://bitbucket.org/osrf/gazebo/issues|title=Gazebo Issue Tracker|access-date=2019-04-27|work=Gazebo Community|language=en}}

| {{No}}

{{Rh}} | RoboDK

| {{Yes}}[https://robodk.com/subscribe RoboDK mailing list]

| {{Yes}}[https://robodk.com/doc/en/PythonAPI/intro.html RoboDK API Documentation]

| {{Yes}}[https://robodk.com/forum/ RoboDK Forum]

| {{Yes}}[https://robodk.com/doc/en/ RoboDK Documentation]

| {{Yes}}[https://robodk.com/forum/Forum-RoboDK-bugs RoboDK Bug tracker]

| {{No}}

| {{Unk}}

{{Rh}} | SimSpark

| {{Yes}}[http://sourceforge.net/p/simspark/mailman/ SimSpark mailing lists]

| {{Yes}}{{Cite web |url=http://simspark.sourceforge.net/wiki/index.php/Network_Protocol |title=SimSpark client protocols |access-date=2015-04-08 |archive-date=2016-02-25 |archive-url=https://web.archive.org/web/20160225172352/http://simspark.sourceforge.net/wiki/index.php/Network_Protocol |url-status=dead }}

| {{No}}

| {{Yes}}{{Cite web |url=http://simspark.sourceforge.net/wiki/index.php/Users_Manual |title=SimSpark user manual (Wiki) |access-date=2015-04-08 |archive-date=2015-02-25 |archive-url=https://web.archive.org/web/20150225121132/http://simspark.sourceforge.net/wiki/index.php/Users_Manual |url-status=dead }}

| {{Yes}}[http://sourceforge.net/p/simspark/bugs/ SimSpark Tracker]

| {{Yes}}[http://simspark.sourceforge.net/wiki/ SimSpark Wiki]{{Dead link|date=July 2024 |bot=InternetArchiveBot |fix-attempted=yes }}

| {{Unk}}

{{Rh}} | Webots

| {{No}}

| {{Yes}}[https://cyberbotics.com/reference Webots Reference Manual]

| {{Yes}}{{cite web |url=https://github.com/cyberbotics/webots/discussions |title=Discussions · cyberbotics/Webots |website=GitHub }}

| {{Yes}}[https://cyberbotics.com/guide Webots User Guide]

| {{Yes}}[https://github.com/omichel/webots/issues Webots issues on GitHub]

| {{Yes}}[https://github.com/omichel/webots/wiki Webots technical wiki on GitHub]

| {{Yes}}[https://discordapp.com/invite/nTWbN9m Webots Discord channel]

{{Rh}} | OpenRAVE

| {{Yes}}[https://lists.sourceforge.net/lists/listinfo/openrave-users OpenRAVE mailing list]

| {{Yes}}[http://openrave.org/docs/latest_stable/coreapihtml/index.html OpenRAVE API]

| {{Yes}}[https://github.com/rdiankov/openrave/issues OpenRAVE Issue Tracker]

| {{Yes}}[http://www.openrave.org/docs/latest_stable/ OpenRAVE User Guide]

| {{Yes}}

| {{Yes}}[http://openrave.programmingvision.com/wiki/index.php/Main_Page OpenRAVE Wiki]

| {{Unk}}

{{Rh}} | CoppeliaSim

| {{No}}

| {{Yes}}[https://www.coppeliarobotics.com/helpFiles/en/apiOverview.htm CoppeliaSim API]

| {{Yes}}[https://forum.coppeliarobotics.com Coppelia Robotics Forum]

| {{Yes}}[https://coppeliarobotics.com/helpFiles/ CoppeliaSim User Manual]

| {{Yes}}[https://forum.coppeliarobotics.com/viewforum.php?f=5 Coppelia Robotics bug reports]

| {{Unk}}

| {{No}}

class="sortbottom"

! Software

! Mailing list

! API documentation

! Public forum, help system

! User manual

! Issue tracker

! Wiki

== 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

| cppcheck{{Cite web|url=http://gazebosim.org/statistics|title=Gazebo|access-date=2019-04-27|work=gazebosim.org|last=OSRF}}

| cpplint

| gtest and qtest

| 77.0%

| 53.3%

| 320k

| 106k

| Jenkins

{{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}}

| Python nose

| {{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

| {{Yes}}{{Cite web|url=http://gazebosim.org/tutorials?cat=guided_b&tut=guided_b3|title=Gazebo : Tutorial : Beginner: Model Editor|access-date=2019-04-27|work=gazebosim.org|last=OSRF}}

| {{Yes}}{{Cite web|url=http://gazebosim.org/tutorials?tut=aerodynamics&cat=physics|title=Gazebo : Tutorial : Aerodynamics|access-date=2019-04-27|work=gazebosim.org|last=OSRF}}

| {{Yes}}{{Cite web|url=http://gazebosim.org/tutorials?tut=hydrodynamics&cat=physics|title=Gazebo : Tutorial : Hydrodynamics|access-date=2019-04-27|work=gazebosim.org|last=OSRF}}

| {{Yes}}{{Cite web|url=http://gazebosim.org/ariac|title=Gazebo : ARIAC|access-date=2019-04-27|work=gazebosim.org|last=OSRF}}

| {{Yes}}{{Cite web|url=http://gazebosim.org/haptix|title=Gazebo : HAPTIX|access-date=2019-04-27|work=gazebosim.org|last=OSRF}}

| {{Yes}}{{Cite web|url=http://robohub.org/darpas-legacy-open-source-simulation-for-robotics-development-and-testing/|title=DARPA's legacy: Open source simulation for robotics development and testing|access-date=2019-04-27|work=Robohub.org|language=en-US}}

| {{Yes}}{{Cite web|url=http://gazebosim.org/tutorials?tut=actor&cat=build_robot|title=Gazebo : Tutorial : Make an animated model (actor)|access-date=2019-04-27|work=gazebosim.org|last=OSRF}}

|

{{Rh}} | RoboDK

| {{No}}

| {{No}}

| {{No}}

| {{Yes}}[https://robodk.com/library RoboDK robot library]

| {{No}}

| {{No}}

| {{No}}

| {{Yes}}

{{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}}[http://openrave.programmingvision.com/wiki/index.php/Format:XML#Closed-chains_and_Mimic_Joints OpenRAVE Closed chains]

| {{Yes}}

| {{Yes}}[http://openrave.programmingvision.com/wiki/index.php/Format:XML#Dual-arm_example OpenRAVE Dual-arm example]

{{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}}{{Cite web|url=http://gazebosim.org/tutorials?tut=contact_sensor&cat=sensors|title=Gazebo : Tutorial : Contact Sensor|access-date=2019-04-27|work=gazebosim.org|last=OSRF}}

| {{Yes}}

| {{Yes}}{{Cite web|url=http://gazebosim.org/tutorials?tut=camera_distortion&cat=sensors|title=Gazebo : Tutorial : Camera Distortion|access-date=2019-04-27|work=gazebosim.org|last=OSRF}}

| {{Yes}}

| {{Yes}}

| {{Yes}}

| {{Yes}}{{Cite web|url=http://gazebosim.org/tutorials?tut=guided_i1|title=Gazebo : Tutorial : Intermediate: Velodyne|access-date=2019-04-27|work=gazebosim.org|last=OSRF}}

| {{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

References

{{Reflist|3}}

{{Robotics}}