Webots
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.
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;
}