Ir al contenido

Webots

De Wikipedia, la enciclopedia libre
Webots
Información general
Tipo de programa Simulación de robots
Desarrollador Cyberbotics
Lanzamiento inicial 1996
Licencia Apache 2
Información técnica
Programado en C++
Versiones
Última versión estable R2023a ( 29 de noviembre de 2022 (2 años y 22 días))
Enlaces

Webots es un software de código abierto para simular robots móviles ampliamente usado con fines educativos. El proyecto Webots fue iniciado en 1996 por el Dr. Oliver Michel en el instituto federal Suizo de Tecnología EPFL en Lausanne. Una de sus principales ventajas es que permite al usuario interactuar con el modelo durante la simulación.

Webots hace uso de ODE (Open Dynamics Engine) para la detección de colisiones y simulación dinámica del cuerpo rígido. La biblioteca ODE permite simular la física de los objetos.

El programa Webots permite construir robots a través de la definición geométrica y dinámica de las partes que lo componen. Igualmente permite especificar colores y texturas para una mejor visualización.

Igualmente incluye una cantidad de sensores y actuadores de uso frecuente en robótica, con sus respectivos modelos dinámicos.

El control del robot puede ser escrito en C++, Java, Python, Matlab y ROS.

Webots ofrece la posibilidad de tomar 'screen shots' en formato PNG o JPEG y grabar simulaciones en formato MP4 (macOS/Linux) o AVI (Windows). Webots guarda los modelos en un archivos .wbt, los cuales están basado en el lenguaje VRML. Es posible exportar los modelos de .wbt a VRML o X3D al igual que objetos.

Simulación de un robot

Ejemplo de controlador para Webots

[editar]
#include <webots/robot.h>
#include <webots/differential_wheels.h>
#include <webots/distance_sensor.h>

#define TIME_STEP 64

int main() {
  // initialize Webots
  wb_robot_init();

  // get handle and enable distance sensor
  WbDeviceTag ds = wb_robot_get_device("ds");
  wb_distance_sensor_enable(ds, TIME_STEP);

  // control loop
  while (1) {
    // read sensors
    double v = wb_distance_sensor_get_value(ds);

    // if obstacle detected
    if (v > 512) {
      // turn around
      wb_differential_wheels_set_speed(-600, 600);
    }
    else {
      // go straight
      wb_differential_wheels_set_speed(600, 600);
    }
        
    // run a simulation step
    wb_robot_step(TIME_STEP);
  }

  return 0;
}