Buscar en Google

lunes, 10 de noviembre de 2008

WILLY-1: Comunicando nuestro programa con el robot casero, mediante un puerto USB conectado al puerto serie del controlador de servos.

Y nos tuvimos que poner algo técnicos...

Para la comunicación serie en java estoy utilizando la librería gnu.io.* que tiene la clase RXTXPort. Esta clase nos da todas las herramientas necesarias para hacer dicha conexión. Un detalle que hay que tener en cuenta es que es necesario que le digamos a dicha librería que el puerto /dev/ttyUSB0 es un puerto serie.

Primero importamos la libreria.

import gnu.io.*;

Como variables globales de la clase definimos:

InputStream entrada = null;
OutputStream salida;
RXTXPort puertoSerie = null;
int timeout = 10;

Este fragmento de código muestra la conexión con el puerto USB que usa el programa.

private void inicializaPuerto(){

// Nuestro Puerto
String dispositivo2 = "/dev/ttyUSB0";

try{
puertoSerie = new RXTXPort( dispositivo2 );
puertoSerie.setSerialPortParams( 19200,RXTXPort.DATABITS_8, RXTXPort.STOPBITS_1,RXTXPort.PARITY_NONE );
puertoSerie.setFlowControlMode( RXTXPort.FLOWCONTROL_NONE );
puertoSerie.enableReceiveThreshold( 1 );
puertoSerie.enableReceiveTimeout( timeout );
//System.out.println( "Dispositivo Serie abierto" );
salida = puertoSerie.getOutputStream();
entrada = puertoSerie.getInputStream();
}catch(Exception e){
this.textArea1.setText("No puedo abrir el puerto.");
}
}

Para iniciar los servos y enviar los comandos uso estas sencillas funciones. Tened en cuenta que el formato del comando a enviar es el del controlador de servos que uso (SUPER CONTROLADOR DE SERVOS S310175, www.superrobotica.com - voy a tener que pedir comisión por tanta publicidad :P). Como podeis ver, en la inicialización de los servos recorre un bucle del 1 al 8, ya que este controlador permite hasta 8 servos (en realidad se pueden usar hasta 8 controladores de este tipo como si fueran uno solo, lo que nos darias hasta un maximo de 64 servos - pero mejor nos conformamos con 8... que ya esta bien). Estas son las funciones:

public void iniciaServos(){
int i=0;
for(i=1;i<9;i++){>1"+i+"w",(byte)1);
enviaComando(">1"+i+"a",(byte)128);
}
}

public void enviaComando(String myCommand, byte data){
char[] arr = myCommand.toCharArray();
try{
salida.write(arr[0]);
salida.write(arr[1]);
salida.write(arr[2]);
salida.write(arr[3]);
salida.write((byte)data);
//Thread.sleep(1000);
}catch(Exception e){
//...
}
}

Añadiendo un control de tipo Slide para cada servo podemos hacer lo siguiente:

private void slideServo(int modulo, int servo, int posicion){
int miValor = (posicion*254)/100 +1;//.getValue();
//String cadena = new Character((char)miValor).toString();
String miComando = ">"+modulo+""+servo+"a";
this.textArea1.setText(miComando + " - " + miValor);
enviaComando(miComando,(byte)miValor);

}

//Este es el evento de arrastrar el raton en el Slide1
//por lo que necesitamos una de estas por cada servo.
private void jSlider1MouseDragged(java.awt.event.MouseEvent evt) {
// Cambio de valor en Servo 1
slideServo(1,1,jSlider1.getValue());
}


Los slide ofrecen valores de 1 a 100, y los servos de 1 a 255, por eso se hace la pequeña operación para obtener el valor (no os asusteis que solo es una regla de tres simple).

Bueno, después si tengo un rato os pongo más cosillas, a ver si esta semana lo puedo tener armado al completo para subiros un video de como va funcionando el elemento.

Ya sabeis, se agradecen los comentarios.

WILLY-1: Haciendo las paces con la segueta

Bueno, pues este finde me he puesto manos a la obra a sacar las piezas que necesito para ensamblar las distintas partes de Willy-1. Primero recorté una para que sirviera de apoyo al tilt/pan de la camara y para el controlador de servos. Después saqué otras para adaptar la cámara al soporte y varias más para las orugas (aún me faltan justo las piezas que soportarán los ejes de las ruedas).

De momento os pongo ya algunas fotillos que, aunque desenfocadas, dan una ideilla de por donde va la cosa (es decir, muuuuy poco avanzada). Tambien tenéis una captura del programita para el control de los servos que he hecho en Java (con el fantastico NetBeans de fondo :P).


El juego de orugas de goma (de www.superrobotica.com)

jueves, 6 de noviembre de 2008

WILLY-1: Comenzamos nuestro primer minirobot

Robots caseros



Llevaba tiempo queriendo iniciarme en esto de la robotica y por fin he comenzado mi primer robot casero. El proyecto se llama Willy-1 y es bastante simplecito, la verdad.

En principio se tratará de un modulo de tracción por orugas (cada oruga será controlada por un servo independiente, con lo que mato dos pájaros de un tiro, el desplazamiento adelante y atrás (ambos servos girando hacia el mismo sentido), y los giros (un servo con sentido opuesto al otro). Sobre éste se montará un segundo bloque que incluye un circuito de control de servos (abajo os pongo mas detalles de los materiales que se van a usar), un montaje tilt/pan de cámara con dos servomotores (lleva el circuito de una quickcam de logitech que he desarmado). Como tengo además dos microservos, los montaré en la parte delantera para colocarle en un futuro un sensor (no tengo muy claro aún si usaré uno térmico, por infrarrojos o por ultrasonidos). También llevará un hub usb donde conectaremos el controlador de servos (con un cable conversor DB9-USB) y la webcam.

Hasta aquí la parte hardware de esta "vergüencilla de los robots caseros", que se complementa con el uso de un PC como controlador principal del sistema (la idea es, una vez programado, colocarle un nanoPC, un microPC, o un EEPC lo mas pequeñito posible). El SO elegido por múltiples razones es Linux, concretamente la distribución Debian.

La parte software la he empezado a programar en Java. La verdad es que hace dos dias que he descubierto el Net Beans y estoy encantao (aunque a veces se le vaya la pinza cuando mueves algún componente en la vista grafica del programa). He instalado las librerias comm y rxtx para java. El primer programita ya lo tengo medio listo y sirve tan solo para calibrar los servos. En cuanto lo termine (espero que sea antes del fin de semana) lo subiré para que podáis echarle un ojillo.

En fin, que me lio a escribir y esto al final es un tostón. En cuanto tenga las piezas del primer modulo recortadas os subiré fotos y los esquemas usados (aunque parezca medieval estoy usando un poco de chapón para estas piezas y la verdad es que siempre fui lentillo con la segueta).

Un abrazo a tod@s!!!
Henry

Noticias tecnológicas