Anar al contingut

Webots

De L'Enciclopèdia, la wikipedia en valencià
Webots

Webots és un software de còdic obert per a simular robots mòvils àmpliament usat en fins educatius. El proyecte Webots va ser iniciat en 1996 pel Dr. Oliver Michel en l'institut federal Suís de Tecnologia EPFL en Lausanne. Una de les seues principals ventages és que permet a l'usuari interactuar en el model durant la simulació.

Webots fa us de ODE (Open Dynamics Engine) per a la detecció de colisions i simulació dinàmica del cos rígit. La biblioteca ODE permet simular la física dels objectes.

El programa Webots permet construir robots a través de la definició geomètrica i dinàmica de les parts que ho componen. Igualment permet especificar colors i textures per a una millor visualisació.

Igualment inclou una cantitat de sensors i actuadors d'us freqüent en robòtica, en els seus respectius models dinàmics.

El control del robot pot ser escrit en C++, Java, Python, Matlab i ROS.

Webots oferix la possibilitat de prendre 'screen shots' en format PNG o JPEG i gravar simulacions en format MP4 (macOS/Linux) o AVI (Windows). Webots guarda els models en un archius .wbt, els quals estan basat en el llenguage VRML. És possible exportar els models de .wbt a VRML o X3D de la mateixa manera que objectes.

Simulació d'un robot

Eixemple de controlador per a Webots

[editar | editar còdic]
#include <webots/robot.h>
#include <webots/differential_wheels.h>
#include <webots/distance_sensor.h>

#definix 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;
}