# Simulador de robótica

Um simulador de robótica é utilizado para criar aplicações embarcadas para um robô sem depender de uma máquina física, economizando tempo e custo. Em alguns casos, estas aplicações podem ser transferidas para o robô real (ou recompiladas) sem modificações.
O termo simulador de robótica pode se referir a diferentes aplicações de simulação na robótica. Por exemplo, na robótica móvel, simuladores de robótica baseada em comportamento permitem que os usuários criem mundos simples que contêm objetos rígidos e fontes de luz; e programem robôs para interagir com esses mundos.
Uma das aplicações mais populares para simuladores de robótica é a modelagem 3D e a renderização de um robô e seu ambiente. Este tipo de software de robótica simula um robô virtual, que é capaz de imitar os movimentos de um robô físico. Alguns simuladores de robótica usam um motor de física para gerar movimentos mais realistas para o robô.
O uso de um simulador de robótica para o desenvolvimento de um programa para controlar robôs é altamente recomendado, independentemente de o robô físico estar disponível ou não. O simulador permite que programas sejam convenientemente escritos e depurados off-line, e o software seja testado em robôs reais apenas depois de estarem mais "maduros". Isso é especialmente conveniente para a programação off-line, como é comum na robótica industrial, que se caracteriza por ambientes bem definidos e que são facilmente simulados. Também é possível simular aplicações robóticas que dependem de dados coletados em tempo real por sensores. Neste caso, o simulador é responsável por gerar dados similares aos que sensores físicos gerariam no mundo real.

## Recursos

Simuladores modernos tendem a oferecer os seguintes recursos:
* Prototipagem rápida de robôs:
** Usando o próprio simulador como ferramenta de criação (Virtual Robot Experimentation Platform, Webots, R-Station, Marilou, 4DV-Sim, Gazebo);
** Usando ferramentas externas.
* Motor de física para movimentos realistas: Muitos simuladores usam ODE (Gazebo, LpzRobots, Marilou, Webots) ou PhysX (Microsoft Robotics Studio, 4DV-Sim).
* Renderização 3D realista: Ferramentas de modelagem 3D podem ser utilizadas para construir os ambientes.
* Uma interface para a programação de corpos dinâmicos.

## Comparação de simuladores
### Informações gerais

| Software | Desenvolvedores | Status de desenvolvimento | Licença | Motor de renderização 3D | Motor de física | Modelador 3D | Plataformas suportadas |
| Actin | Energid Technologies | Ativo | Proprietário | OpenGL | Proprietário | Proprietário | Windows, macOS, Linux, VxWorks, RTOS-32 |
| ARS | RAL | Ativo | BSD | VTK | ODE | Nenhum | Linux, macOS, Windows |
| Gazebo | Open Source Robotics Foundation(OSRF) | Ativo | Apache 2.0 | OGRE | ODE/Bullet/Simbody/DART | Interno | Linux, macOS, Windows |
| MORSE | Academic community | Ativo | BSD | Blender game engine | Bullet | Blender | Linux, BSD*, macOS |
| OpenHRP | AIST | Ativo | Eclipse | Java3D | ODE/Interno | Interno | Linux, Windows |
| RoboDK | RoboDK | Ativo | Proprietário | OpenGL | Nenhum | Interno | Linux, macOS, Windows, Android |
| SimSpark | O. Obst et al. (+26) | Ativo | GNU GPL (v2) | Interno | ODE | Nenhum | Linux, macOS, Windows |
| V-Rep | Coppelia Robotics | Ativo | Proprietário/GNU GPL | Interno | ODE/Bullet/Vortex | Interno | Linux, macOS, Windows |
| Webots | Cyberbotics | Ativo | Proprietário | OGRE | versão customizada do ODE | Interno | Linux, macOS, Windows |
| 4DV-Sim | 4D Virtualiz | Ativo | Proprietário | OGRE | PhysX | Interno | Linux |
| Software | Desenvolvedores | Status de desenvolvimento | Licença | Motor de renderização 3D | Motor de física | Modelador 3D | Plataformas suportadas |

### Informações técnicas

| Software | Principal linguagem de programação | Formatos suportados | Extensabilidade | APIs externas | Suporte para middleware de robótica | Interface de usuário primária | Simulação headless |
| Actin | C++ | SLDPRT, SLDASM, STEP, OBJ, STL, 3DS, Collada, VRML, URDF, XML, ECD, ECP, ECW, ECX, ECZ, | Plugins (C++), API | Desconhecido | Nenhum | GUI | Sim (ActinRT) |
| ARS | Python | Desconhecido | Python | Desconhecido | Nenhum | Desconhecido | Desconhecido |
| Gazebo | C++ | SDF/URDF | Plugins (C++) | C++ | ROS, Player, Sockets (mensagens protobuf) | GUI | Sim |
| MORSE | Python | Desconhecido | Python | Python | Sockets, YARP, ROS, Pocolibs, MOOS | Linha de comando | Sim |
| OpenHRP | C++ | VRML | Plugins (C++), API | C/C++, Python, Java | OpenRTM-aist | GUI | Desconhecido |
| RoboDK | Python | STEP, IGES, STL, WRML | Plugins (C++), API | C/C++, Python, Matlab | Socket | GUI | Desconhecido |
| SimSpark | C++, Ruby | Ruby Scene Graphs | Mods (C++) | Network (sexpr) | Sockets (sexpr) | GUI, Sockets | Desconhecido |
| V-Rep | LUA | OBJ, STL, DXF, 3DS, Collada, URDF | API, Add-ons, Plugins | C/C++, Python, Java, Urbi, Matlab/Octave | Sockets, ROS | GUI | Sim |
| Webots | C++ | WBT, VRML'97 | Plugins (C++), API | C/C++, Python, Java, Matlab | ROS, URBI, NaoQI | GUI | Sim |
| 4DV-Sim | C++ | 3DS, OBJ, Mesh | Plugins (C++), API | FMI/FMU, Matlab | ROS, Sockets, Plug & Play interfaces | GUI | Sim |
| Software | Principal linguagem de programação | Formatos suportados | Extensabilidade | APIs externas | Suporte para middleware de robótica | Interface de usuário primária | Simulação headless |

### Infra-estrutura
#### Suporte

| Software | Lista de e-mail | Documentação da API | Fórum público/Sistema de ajuda | Manual do usuário | Seguimento de incidentes | Wiki |
| Actin | Não | Sim | Não | Sim | Sim (Interno) | Não |
| ARS | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido |
| Gazebo | Sim | Sim | Sim | Sim | Sim | Sim |
| MORSE | Sim | Desconhecido | Não | Sim | Sim | Não |
| OpenHRP | Sim | Sim | Não | Sim | Sim | Não |
| RoboDK | Sim | Sim | Não | Sim | Não | Não |
| SimSpark | Sim | Sim | Não | Sim | Sim | Sim |
| V-Rep | Não | Sim | Sim | Sim | Desconhecido | Não |
| Webots | Não | Sim | Sim | Sim | Sim | Sim |
| 4DV-Sim | Sim | Não | Sim | Sim | Sim | Não |
| Software | Lista de e-mail | Documentação da API | Fórum público/Sistema de ajuda | Manual do usuário | Seguimento de incidentes | Wiki |

#### Qualidade do código

| Software | Checagem de código estática | Checagem de estilo | Sistema de testes | Cobertura de funções em testes | Cobertura de galhos em testes | Linhas de código | Linhas de comentários | Integração contínua |
| Actin | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Jenkins |
| ARS | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido |
| Gazebo | cppcheck | cpplint | gtest e qtest | 52.9% | 44.5% | 298k | 99k | Jenkins |
| MORSE | Desconhecido | pylint | Python unittests | Desconhecido | Desconhecido | 31.4k | 9.0k | Jenkins, Travis |
| OpenHRP | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido |
| RoboDK | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido |
| SimSpark | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido |
| V-Rep | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido |
| Webots | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido |
| 4DV-Sim | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido |
| Software | Checagem de código estática | Checagem de estilo | Sistema de testes | Cobertura de funções em testes | Cobertura de galhos em testes | Linhas de código | Linhas de comentários | Integração contínua |

### Recursos

| Software | CAD para movimento | Prevenção de colisão dinâmica | Extremo do membro relativo | Programação off-line | Controle em tempo real |
| Actin | Sim | Sim | Sim | Sim | Sim |
| ARS | Desconhecido | Não | Desconhecido | Não | Não |
| Gazebo | Desconhecido | Não | Desconhecido | Não | Não |
| MORSE | Desconhecido | Não | Desconhecido | Não | Não |
| OpenHRP | Desconhecido | Não | Desconhecido | Não | Não |
| RoboDK | Desconhecido | Não | Desconhecido | Sim | Não |
| SimSpark | Desconhecido | Não | Desconhecido | Não | Não |
| V-Rep | Desconhecido | Não | Desconhecido | Não | Não |
| Webots | Desconhecido | Não | Desconhecido | Não | Não |
| 4DV-Sim | Desconhecido | Não | Desconhecido | Não | Não |
| Software | CAD para movimento | Prevenção de colisão dinâmica | Extremo do membro relativo | Programação off-line | Controle em tempo real |

#### Famílias de robôs

| Software | VTNT (veículo terrestre não tripulado) | VANT (veículo aéreo não tripulado) | AUV (robôs submarinos) | Robôs industriais | Mãos robóticas (simulação de manipulação) | Robôs humanóides | Avatares humanos |
| Actin | Sim | Sim | Sim | Sim | Sim | Sim | Sim |
| ARS | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido |
| Gazebo | Sim | Sim | Sim | Sim | Sim | Sim | Sim |
| MORSE | Sim | Sim | Parcial | Parcial | Não | Não | Sim |
| OpenHRP | Sim | Não | Não | Sim | Sim | Sim | Sim |
| RoboDK | Não | Não | Não | Sim | Não | Não | Não |
| SimSpark | Sim | Não | Não | Talvez | Talvez | Sim | Não |
| V-Rep | Sim | Sim | Não | Sim | Sim | Sim | Sim |
| Webots | Sim | Sim | Sim | Sim | Sim | Sim | Sim |
| 4DV-Sim | Sim | Sim | Não | Sim | Talvez | Não | Sim |
| Software | VTNT (veículo terrestre não tripulado) | VANT (veículo aéreo não tripulado) | AUV (robôs submarinos) | Robôs industriais | Mãos robóticas (simulação de manipulação) | Robôs humanóides | Avatares humanos |

#### Atuadores suportados

| Software | Cadeias cinemáticas genéricas | Movimento controlado por força | Lista completa | Cadeias cinemáticas circulares | Cadeias cinemáticas redundantes | Cadeias cinemáticas bifurcadas |
| Actin | Sim | Sim | Motion Constraints | Sim | Sim | Sim |
| ARS | Desconhecido | Desconhecido | | Desconhecido | Desconhecido | Desconhecido |
| Gazebo | Sim | Sim | | Sim | Sim | Sim |
| MORSE | Sim | Sim | atuadores MORSE | Desconhecido | Desconhecido | Desconhecido |
| OpenHRP | Sim | Sim | | Desconhecido | Desconhecido | Desconhecido |
| RoboDK | Desconhecido | Desconhecido | | Desconhecido | Desconhecido | Desconhecido |
| SimSpark | Sim | Não | atuadores SimSpark | Desconhecido | Desconhecido | Desconhecido |
| V-Rep | Sim | Sim | | Desconhecido | Desconhecido | Desconhecido |
| Webots | Sim | Sim | | Desconhecido | Desconhecido | Desconhecido |
| 4DV-Sim | Sim | Sim | | Desconhecido | Desconhecido | Desconhecido |
| Software | Cadeias cinemáticas genéricas | Movimento controlado por força | Lista completa | Cadeias cinemáticas circulares | Cadeias cinemáticas redundantes | Cadeias cinemáticas bifurcadas |

#### Sensores suportados

| Software | Odometria | Unidade de Medida Inercial | Colisão | GPS | Câmera monocular | Câmera estereoscópica | Câmera de profundidade | Câmera omnidirecional | Laser scanner 2D | Laser scanner 3D | Lista completa |
| Actin | Sim | Sim | Sim | Desconhecido | Sim | Sim | Sim | Sim | Sim | Sim | |
| ARS | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido | |
| Gazebo | Sim | Sim | Sim | Sim | Sim | Sim | Sim | Desconhecido | Sim | Sim | |
| MORSE | Sim | Sim | Sim | Sim | Sim | Desconhecido | Sim | Desconhecido | Sim | Sim | sensores MORSE |
| OpenHRP | Desconhecido | Sim | Sim | Desconhecido | Sim | Desconhecido | Sim | Desconhecido | Sim | Sim | sensores OpenHRP |
| RoboDK | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido | Desconhecido | |
| SimSpark | Sim | Sim | Sim | Parcial | Sim | Parcial | Desconhecido | Desconhecido | Não | Não | perceptores SimSpark |
| V-Rep | Desconhecido | Sim | Sim | Sim | Sim | Desconhecido | Sim | Desconhecido | Sim | Sim | |
| Webots | Sim | Sim | Sim | Sim | Sim | Sim | Sim | Desconhecido | Sim | Sim | |
| 4DV-Sim | Sim | Sim | Sim | Sim | Sim | Sim | Sim | Sim | Sim | Sim | |
| Software | Odometria | Unidade de Medida Inercial | Colisão | GPS | Câmera monocular | Câmera estereoscópica | Câmera de profundidade | Câmera omnidirecional | Laser scanner 2D | Laser scanner 3D | Lista completa |

### Outros simuladores
#### Simuladores de código aberto

* Breve: simulador de múltiplos agentes em mundos 3D em Python.
* EZPhysics: combinação de renderização Ogre3D e física ODE, GUI expõe todas as informações does objetos do ODE, controle remoto opcionalmente através de Matlab/Simulink.
* Simulador Khepera: um simulador de código aberto para Windows, para simular o robô Khepera antes do Webots.
* Klamp't: um simulador introduzido em 2013, especializado em contato estável entre malhas de triângulos. Suporta locomoção de patas e manipulação.
* LpzRobots: um simulador de física de robôs em 3D desenvolvido na Universidade de Leipzig.
* MiniBloq: este software para programação de robôs para o Arduino tem um novo simulador.
* Moby: uma biblioteca de dinâmica de corpos rígidos escrita em C++.
* OpenSim: Simulador de robôs articulados e com rodas, com uma ampla gama de características. Seu desenvolvimento foi interrompido em 2006.
* Robotics Toolbox para o MATLAB: é um software livre que fornece funcionalidade para representar pose (transformações homogêneas, ângulos Euler e RPY, quaterniões), braços robóticos (para a cinemática inversa, direta, dinâmica, simulação e animação) e robôs móveis (controle, localização, planejamento e animação).
* ARTE: uma ferramenta de robótica para educação (ARTE em inglês) é um software livre educacional baseado em Matlab. Ele fornece funções para representar posições e orientações. Assim, inclui funções para simular braços robóticos (cinemática direta/inversa, dinâmica, planejamento de caminho, etc.). A ferramenta inclui um grande conjunto de modelos 3D de robôs que podem ser visualizados e simulados dentro de uma célula robótica.
* Simbad 3d: Simulador de robôs baseado em Java.
* SimRobot: um pacote de software de simulador de robôs desenvolvido na Universidade de Bremen e no Centro alemão de Pesquisa de Inteligência Artificial.
* Fase: simulador 2.5D, muitas vezes usado com o Player para formar o sistema Player/Stage. Parte do Projeto Player.
* STDR: simulador simples, flexível e escalável 2D de múltiplos robôs para uso dentro de Sistema Operacional de Robôs.
* UCHILSIM: um simulador baseado em física para os Robôs AIBO, introduzido na RoboCup 2004.
* UWSim: um simulador de robótica submarina para pesquisa e desenvolvimento, que incorpora simulação de sensores, dinâmica e física.

#### Simuladores de código fechado e proprietários

* AnyKode Marilou.
* ORCA-Sim: um simulador de robôs 3D que usa o motor de física Newton Game Dynamics (Windows).