Webots es un simulador de robot 3D gratuito y de código abierto que se utiliza en la industria, la educación y la investigación.
El proyecto Webots comenzó en 1996, inicialmente desarrollado por el Dr. Olivier Michel en la Escuela Politécnica Federal Suiza ( EPFL ) en Lausana , Suiza y luego a partir de 1998 por Cyberbotics Ltd. como software con licencia propietaria. Desde diciembre de 2018, se publica bajo la licencia libre y de código abierto Apache 2. [1]
Webots incluye una gran colección de modelos de robots, sensores, actuadores y objetos que se pueden modificar libremente. Además, también es posible crear nuevos modelos desde cero o importarlos desde un software CAD 3D. Al diseñar un modelo de robot, el usuario especifica tanto las propiedades gráficas como las físicas de los objetos. Las propiedades gráficas incluyen la forma, las dimensiones, la posición y la orientación, los colores y la textura del objeto. Las propiedades físicas incluyen la masa, el factor de fricción, así como las constantes de amortiguación y resorte . El software incluye dinámica de fluidos simple.
Webots utiliza una bifurcación de ODE ( Open Dynamics Engine ) para detectar colisiones y simular la dinámica de cuerpos rígidos. La biblioteca ODE permite simular con precisión las propiedades físicas de los objetos, como la velocidad, la inercia y la fricción.
Webots incluye un conjunto de sensores y actuadores utilizados frecuentemente en experimentos robóticos, por ejemplo, lidars, radares, sensores de proximidad , sensores de luz, sensores táctiles, GPS , acelerómetros , cámaras, emisores y receptores, servomotores (rotacionales y lineales), sensores de posición y fuerza, LED, pinzas, giroscopios, brújula, IMU, etc.
Los programas del controlador de robot se pueden escribir fuera de Webots en C , C++ , Python , ROS , Java y MATLAB utilizando una API simple.
Webots ofrece la posibilidad de tomar capturas de pantalla y grabar simulaciones. Los mundos de Webots se almacenan en archivos *.wbt multiplataforma cuyo formato se basa en el lenguaje VRML . También se pueden importar y exportar mundos y objetos de Webots en formato VRML. Los usuarios pueden interactuar con una simulación en ejecución moviendo robots y otros objetos con el ratón. Webots también puede transmitir una simulación en navegadores web mediante WebGL .
Desde el 18 de agosto de 2017, el sitio web robotbenchmark.net ofrece acceso gratuito a una serie de pruebas comparativas de robótica basadas en simulaciones de Webots a través de la interfaz web de Webots. Las instancias de Webots se ejecutan en la nube y las vistas 3D se muestran en el navegador del usuario. Desde esta interfaz web, los usuarios pueden programar robots en Python y aprender a controlarlos en un procedimiento paso a paso.
Este es un ejemplo simple de programación de controladores en C/C++ con Webots: un comportamiento trivial de prevención de colisiones. Inicialmente, el robot corre hacia adelante, luego, cuando detecta un obstáculo, gira sobre sí mismo durante un tiempo y luego reanuda el movimiento hacia adelante.
#include <webots/robot.h> #include <webots/motor.h> #include <webots/sensor_de_distancia.h> #define PASO_DE_TIEMPO 64int main () { // inicializar Webots wb_robot_init (); // obtener el identificador y habilitar el sensor de distancia WbDeviceTag ds = wb_robot_get_device ( "ds" ); wb_distance_sensor_enable ( ds , TIME_STEP ); // obtener el identificador e inicializar los motores WbDeviceTag motor_izquierdo = wb_robot_get_device ( "motor_izquierdo" ); WbDeviceTag motor_derecho = wb_robot_get_device ( " motor_derecho " ); wb_motor_set_position ( motor_izquierdo , INFINITO ); wb_motor_set_position ( motor_derecho , INFINITO ); wb_motor_set_velocity ( motor_izquierdo , 0.0 ); wb_motor_set_velocity ( motor_derecho , 0.0 ); // bucle de control while ( 1 ) { // leer sensores double v = wb_distance_sensor_get_value ( ds ); // si se detecta un obstáculo if ( v > 512 ) { // dar la vuelta wb_motor_set_velocity ( motor_izquierdo , -600 ); wb_motor_set_velocity ( motor_derecho , 600 ); } else { // seguir recto wb_motor_set_velocity ( motor_izquierdo , 600 ); wb_motor_set_velocity ( motor_derecho , 600 ); } // ejecutar un paso de simulación wb_robot_step ( TIME_STEP ); } wb_robot_cleanup (); devolver 0 ; }
En la guía del usuario de Webots se proporciona una lista completa y actualizada.