martes, 8 de febrero de 2011

Práctica 1 { parte 4: cuadrado de calibración de movimiento }

En esta parte haremos que el robot recorra un cuadrado de 40cm de lado y dibujemos su trayectoria durante 10 repeticiones para ver como está de calibrado. Para ello haremos uso de la clase TachoPilot.
Haremos un código sencillo basado en travel(40) y rotate (90) así cuatro veces. Con esto estamos indicando al robot que recorra 40 cm y gire 90º. Al hacerlo cuatro veces, conseguiremos que dibuje la trayectoria de un cuadrado.

Aquí vemos un vídeo:



Como observamos en el vídeo el robot no hace la trayectoria correctamente porque va muy deprisa, y patina.
Solucionamos este error reduciendo la velocidad con la función setSpeed(100).

Aquí vemos un vídeo:



Aquí observamos una foto de las trayectorias pintadas por el robot:



Podemos observar varios trazos diferentes, pero todos próximos. Esto nos demuestra que tiene un error mínimo, pero siempre es el mismo.
Como comentamos, no nos pinta un cuadrado perfecto, ya que no hace esquinas de 90º. Esto es debido a que el bolígrafo no esta puesto justo en centro del eje, por falta de espacio.
Las líneas no coinciden, porque al recolocarlo siempre varía la posición inicial, aunque sea unos milímetros


Conclusiones:

Con este pequeño ejemplo práctico nos damos cuenta la dificultad que tiene el creador a la hora de plasmar en el robot la realidad, ya que siempre va a haber un porcentaje de error de fallo, es decir lo que en teoría vemos posible y perfecto nunca se va a conseguir al 100% en la realidad, por diversos factores que lo alteren, en este caso, el rozamiento, inercia...
Además apreciamos que el error es sintomático, es decir, siempre se repite el mismo error de 1-2 centímetros y en los mismos puntos


Aquí os dejamos el código:


import lejos.nxt.Button;
import lejos.nxt.LCD;
import lejos.nxt.Motor;
import lejos.robotics.navigation.*;

public class CuadradoRotate {
    public static void main(String[] args) throws InterruptedException {
      Motor Rizda = Motor.B;
      Motor Rdcha = Motor.C;
      int i;

      TachoPilot viajar = new TachoPilot(5.6f,10.85f,Rizda,Rdcha);

      viajar.setSpeed(100);

      for(i=1;i<=10;i++){
        viajar.travel(40);
        viajar.rotate(90);
        viajar.travel(40);
        viajar.rotate(90);
        viajar.travel(40);
        viajar.rotate(90);
        viajar.travel(40);
        viajar.rotate(90);
        Thread.sleep(5000);
      }
    }
}

No hay comentarios:

Publicar un comentario