Interfaz Gráfica de Usuario para brazo robot

Ésta es una interfaz gráfica para comandar un brazo robot de 3 grados de libertad.

El código me parece interesante, porque simula la configuración que adopta el brazo, además de poder variar el punto de vista de la cámara.

Presionando la tecla c, se puede mover el punto de vista con el ratón.

1 – mueve el servo 1, correspondiente a la base, 2 el hombro y 3 el codo.

Éste programa lo escribí alrededor del 2012, pero en algún cambio de PC lo perdí. Hace unos días, buscando código de Processing, lo encontré en la página de la Universidad de Santiago de Chile, lo cual me alegró por recuperarlo y también porque les pareció útil. Además me ha hecho reflexionar sobre la manera en que se propaga el trabajo y la información que compartimos en Internet.

Código fuente de processing

/* built with Studio Sketchpad:
*   http://sketchpad.cc
*
* observe the evolution of this sketch:
*   http://studio.sketchpad.cc/sp/pad/view/ro.8O3MN6cqJv7/rev.4
*
* authors:
*   Lisandro Lanfranco

* license:
*   creative commons attribution-share alike 3.0 license.
*   http://creativecommons.org/licenses/by-sa/3.0/
*/
/*
Programa que controla un brazo robotico
Version 0.16
Escrito por Lisandro Lanfranco.
Presione ‘c’ para posicionar la camara.
Presione ‘1’ para mover el servo 1, ‘2’ para el servo 2 y ‘3’ para el 3.
Presione ‘s’ para guardar la posición actual, ‘x’ para salir.
*/

class Robot{
int camaraX=0, camaraY=0;                        //Variables que controlan la vista de camara.
int altoCaja, anchoCaja, largoCaja;              //Dimensiones de la caja en mm.
int aSeg1, lSeg1;                                //ancho y largo de segmento 1.
int aSeg2, lSeg2;                                //ancho y largo de segmento 2.
int limIni, limFin;                              //Limites de giro de servo.
int servo1, servo2, servo3;                      //Variables que almacenan el ángulo de los servos.

int [] movimientos1 = new int[0];                //Listado de movimientos.
int [] movimientos2 = new int[0];
int [] movimientos3 = new int[0];

//Constructor
Robot(int tempAltoCaja, int tempAnchoCaja, int tempLargoCaja, int tempASeg1, int tempLSeg1, int tempASeg2, int tempLSeg2, int tempLimIni, int tempLimFin){
altoCaja = tempAltoCaja;
anchoCaja = tempAnchoCaja;
largoCaja = tempLargoCaja;
aSeg1 = tempASeg1;
lSeg1 = tempLSeg1;
aSeg2 = tempASeg2;
lSeg2 = tempLSeg2;
limIni = tempLimIni;
limFin = tempLimFin;
}

//Imprime el angulo de los servos
void angulo(){
//Imprime ángulo de servos.
text(“servo1 = “, 550, 400);
text(servo1, 600, 400);
text(“servo2 = “, 550, 420);
text(servo2, 600, 420);
text(“servo3 = “, 550, 440);
text(servo3, 600, 440);
}

//Dibuja el brazo robotico
void dibujar(){
pushMatrix();

translate(width/2, height/2);
rotateX(radians(camaraY * (-1)));
rotateY(radians(camaraX));
fill(#FAE100);
//Dibuja la base.
box(anchoCaja, altoCaja, largoCaja);

//Dibuja el segmento 1
translate(0, 40, 40);
rotateY(radians(servo1-90));
rotateZ(radians(servo2-90));
fill(#FEFEFE);
rect(-aSeg1/2, 0, aSeg1, lSeg1);

//Dibuja el segmento 2
translate(0, lSeg1, 0);
rotateZ(radians(servo3-90));
fill(#FEFEFE);
rect(-aSeg2/2, 0, aSeg2, lSeg2);
popMatrix();
}

/*
//Función que va creando el listado de movimientos
void guardar(){
movimientos1 = append(movimientos1, servo1);
movimientos2 = append(movimientos2, servo2);
movimientos3 = append(movimientos3, servo3);
}

//Guarda los movimientos definidos por el usuario y cierra el programa.
void salir() {
String[] movimientos = new String[movimientos1.length];
for (int i = 0; i < movimientos1.length; i++) {
movimientos[i] = movimientos1[i] + “\t” + movimientos2[i] + “\t” + movimientos3[i];
}
saveStrings(“movimientos.txt”, movimientos);
exit(); // Stop the program
}
*/
}

//Declaración del objeto que representa el brazo
Robot brazo;

void setup(){
size(640, 480, P3D);
textSize(15);
textAlign(CENTER);

//Creamos el objeto y pasamos las dimensiones
brazo = new Robot(40, 100, 150, 20, 100, 15, 70, 0, 180);
}

void draw(){
background(100);                                      //Borra la pantalla.
lights();

//Imprime angulos
brazo.angulo();

smooth();

//Detecta si el usuario quiere mover la camara
if (key == ‘c’ || key == ‘C’) {
brazo.camaraX = mouseX;
brazo.camaraY = mouseY;
}

//Detecta si el usuario quiere modificar el servo 1
if (key == ‘1’){
brazo.servo1 = int(map(mouseX, 0, width, 0, 180));  //Mapea el ancho de la pantalla a valores en grados.
}

//Detecta si el usuario quiere modificar el servo 2
if (key == ‘2’){
brazo.servo2 = int(map(mouseX, 0, width, 0, 180));  //Mapea el ancho de la pantalla a valores en grados.
}

//Detecta si el usuario quiere modificar el servo 3
if (key == ‘3’){
brazo.servo3 = int(map(mouseX, 0, width, 0, 180));  //Mapea el ancho de la pantalla a valores en grados.
}
/*
//Detecta si el usuario quiere salir.
if (key == ‘x’ || key == ‘X’){
brazo.salir();
}
*/

brazo.dibujar();
}

/*
//Detecta si el usuario quiere guardar la posición.
void keyPressed(){
if (key == ‘s’ || key == ‘S’){
brazo.guardar();
}
}
*/

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *