Webots

De Wikipedia, la enciclopedia libre
Saltar a: navegación, búsqueda
Webots
Desarrollador
Cyberbotics
http://www.cyberbotics.com/
Información general
Última versión estable 7.0.3
4 de diciembre de 2012; hace 1 año (2012-12-04)
Género Simulación de robots
Sistema operativo Multiplataforma
Licencia Propietaria con contribuciones de la comunidad

Webots es un software 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, C++, Java, [Phyhon] y Matlab. Los modelos de robots AIBO, NAO y E-puck pueden también ser programados en URBI con la respectiva licencia.

Webots ofrece la posibilidad de tomar 'screen shots' en formato PNG y grabar simulaciones en formato MPEG o AVI. Webots guarda los modelos en un archivos .wbt, los cuales están basado en el lenguaje VRML. Es posible exportar los modelos de .wbtr a VRML 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;
}