Egor V.2 - Robo-Animatronic (11 / 13 paso)

Paso 11: Proceso de escritura y Kinect bibliotecas

En primer lugar tenemos que descargar las librerías de kinect para el procesamiento (búsquela en google) Asegúrese de instalar el punto de seguimiento para kinect biblioteca a la biblioteca de procesamiento. Cuando se puede ejecutar la demo para el seguimiento del punto de Sabe usted que está instalado correctamente en su sistema. También es necesario instalar la biblioteca de bot de chat de Eliza, este viene con un paquete de prueba.

Usted necesitará hacer su propia imagen de fondo para su programa y llame al bg1.jpeg

Usted también necesitará hacer su propia Eliza script he llamado algo así como newscript.txt pero lo llaman lo que desea, o unhash el código de ejemplo de internet, si desea utilizar el original.

También puede comentar un punto de acceso y seguimiento seguimiento de esqueleto modo interactivo con múltiples participantes.

Código de procesamiento:

Import processing.serial.*;

/ * Un pequeño ejemplo usando el clásico "Eliza" del programa.

Eliza fue compilada como una biblioteca de procesamiento, basada en el código fuente de java de Charles Hayden: http://www.chayden.net/eliza/Eliza.html

La secuencia de comandos predeterminado que determina el comportamiento de Eliza se puede cambiar con la función readScript(). Instrucciones para modificar el archivo de secuencia de comandos están disponibles aquí: http://www.chayden.net/eliza/instructions.txt *

max es 67 en barrido

Import codeanticode.eliza.*; Serie myport; maniquí de int = 8; int sendx = 0; Serie myport2; cuello motor int drawskeleton = 0; 1 / 0 int lastsentx =-1; int lastsenty =-1;

int archsenty =-1; int archsentx =-1;

int eyecount = 0; utilizado para el muestreo de movimiento

Eliza eliza; PFont fuente; Cadena elizaResponse, humanResponse; showCursor booleano; lastTime int; PImage bg1a;

int closestValue; int closestX; int closestY; int lastcx; int lastcy;

Float targx; Float targy;

openni simple importar SimpleOpenNI.*;

globx flotador, globy;

flotador oldglobx, oldgloby;

Contexto SimpleOpenNI; [color]

userClr = nueva color [] {color(255,0,0),

color(0,255,0),

color(0,0,255),

color(255,255,0),

color(255,0,255),

color(0,255,255)

}; Com PVector = nuevo PVector();

Com2d PVector = nuevo PVector();

simpleopenni final

void setup() {size(1200, 786);

println(sketchPath);

contexto si = nuevo SimpleOpenNI(this);

if(context.isInit() == false) {//println ("no init SimpleOpenNI, quizás la cámara no está conectada!");

Exit();

retorno;

} / / habilitar depthMap generación context.enableDepth();

habilitar la generación de esqueleto para todas las juntas

context.enableUser();

Background(200,0,0);

final si bg1a=loadImage("bg1.jpg");

println(serial.List());

myport = serie nueva (esto, Serial.list()[5],9600);

myport2 = nueva serie (esto, Serial.list()[???],9600);

Cuando Eliza se inicializa, un script por defecto integrado en el

se carga la biblioteca. Eliza = nuevo Eliza(this);

Un nuevo script se puede cargar a través de la función readScript.

Puede tomar local así como de archivos remotos.

eliza.readScript("scriptnew.txt");

eliza.readScript ("http://chayden.net/eliza/script");

Para volver a la secuencia de comandos predeterminado, utilice esto: / / eliza.readDefaultScript();

Font = loadFont("Rockwell-24.vlw");

textFont(font);

printElizaIntro();

humanResponse = "";

showCursor = true;

lastTime = 0; }

void draw() {while(myport.available() > 0) {int dat=myport.read();

println(""+DAT);

} eyecount ++;

println("EYECOUNT:"+eyecount);

Si (eyecount > = 30) {println("diffx="+abs(closestX-lastcx) + "diffy="+abs(closestX-lastcy));

println (archsenty + ""+ closestY +""+ archsentx +"" + lastsentx);

if(archsenty==-1) archsenty = lastsenty;

if(archsentx==-1) archsentx = lastsentx;

if(ABS(closestY-lastcy) < 30 & & abs(closestX-lastcx) < 30) {/ / archsenty = lastsenty;

archsentx = lastsentx;

para (lop int = 0; lop < 100; lop ++) {println ("iba a CRISPAR de ojo");

myport.Write(201);

lastcx = closestX;

lastcy = closestY;

} else {}

if(ABS(lastsenty-archsenty) > 45 & & abs(lastsentx-archsentx) < 45) {println ("GO BACK TO movimiento estaria");

lastcx = closestX;

lastcy = closestY;

myport.Write(202);

eyecount}} = 0;

} image(bg1a,0,0,width,height);

Background(102);

if(globx!=oldglobx) {sendx=int(abs(globx));

sendx=8+(sendx/8);

oldglobx = globx;

myport.Write(sendx);

} Si (sendx > 9 & & lastsentx! = sendx) {//println ("enviar posiciones de cuello" + sendx);

if(ABS(lastsentx-sendx) > 35) eyecount = 145;

myport.Write(sendx);

DESCOMENTE para seguimiento de personas lastsentx = sendx;

} //println ("cuello y:"+int(globy));

if(Random(10) > 4) {int outy=70+int(globy);

if(OUTY>200) outy = 200;

println("OUTY="+OUTY);

Aquí está la línea enviando el cuello Y coordina if(lastsenty!=outy) {if(abs(lastsenty-outy) > 35) eyecount = 145;

myport.Write(OUTY);

println("OUTY:"+OUTY);

lastsenty = outy;

} }

MANIQUÍ de barrido comienza aquí if(random(10) > 2) {/ / myport.write(dummy);

println("dummy:"+dummy);

dummy ++;

if(dummy>170) maniquí = 9;

myport.Write((70+dummy));

println("neckyyyyyyyy"+(70+dummy));

} //DUMMY BARRIDO TERMINA AQUÍ

Fill(255);

movimiento (111);

texto (elizaResponse, 30, ancho 450, - 40, altura);

Fill(0);

int t = millis();

Si (t - lastTime > 500) {showCursor =! showCursor;

lastTime = t;

} Si (showCursor) texto (humanResponse + '_', 30, ancho 600, - 40, altura);

otro texto (humanResponse, 30, ancho 600, - 40, altura);

simpleopennidrawmethod();

closestpixdrawmethod();

}

void closestpixdrawmethod() {closestValue = 8000;

context.Update();

obtener la matriz de la profundidad de la kinect int [] depthValues = context.depthMap();

para cada fila de la imagen profundidad (int y = 0 y < 480; y ++) {}

mirar cada píxel de la fila (int x = 0; x < 640; x ++) {}

Saque el valor correspondiente de la matriz de profundidad

int i = x + y * 640;

int currentDepthValue = depthValues [i];

Si píxel es el más cercano que hemos visto hasta ahora

Si (currentDepthValue > 0 & & currentDepthValue < closestValue) {}

guardar su valor closestValue = currentDepthValue;

y guardar su posición (coordenadas X e Y)

closestX = x; closestY = y;

}}} float scfac = 67.0 / 640;

globx =(closestX*scfac) *.7;

targy =(closestY*scfac) * 3.2;

Globy=Globy+((targy-Globy)/8);

Globy = targy;

/ / println(globx);

dibujar la imagen de profundidad en la pantalla

Image(Kinect.depthImage(),0,0);

dibuja un círculo rojo sobre ella,

situado en las coordenadas X e Y

nos salvó del píxel más cercano. Fill(255,0,0);

elipse (closestX, closestY, 25, 25);

}

void keyPressed() {si ((key == ENTER) || (Key == Return)) {/ / println(humanResponse); //first análisis de palabras clave

elizaResponse = eliza.processInput(humanResponse); println (">>" + elizaResponse); String [] a = {elizaResponse};

saveStrings("/Users/carlstrathearn/Desktop/test.txt",out);

Delay(10);

println(sketchPath+"/Data/applescriptbridge.app");

Open(sketchPath+"/Data/applescriptbridge.app");

myport.Write(1);

humanResponse = "";

} else if ((key > 31) & & (tecla! = codificado)) {}

Si la clave es alfanumérica, agregar a la cadena

humanResponse = humanResponse + clave;

} else if ((key == BACKSPACE) & & (0 < humanResponse.length())) {char c = humanResponse.charAt(humanResponse.length() - 1);

humanResponse = humanResponse.substring (0, humanResponse.length() - 1); } }

void printElizaIntro() {Hola cadena = "Hola";

elizaResponse = Hola + "" + eliza.processInput(hello);

println (">>" + elizaResponse);

}

void simpleopennidrawmethod() {context.update();

//println ("gx ="+ globx +"GY =" + globy); llamar depthImageMap / / image(context.depthImage(),0,0); image(context.userImage(),0,0) de if(drawskeleton==1); dibujar el esqueleto si es disponible int [] lista de usuarios = context.getUsers(); para (int i = 0; i

Vertex(com2d.x-5,com2d.y);

vértice (com2d.x + 5,com2d.y);

endShape(); Fill(0,255,100);

Text(Integer.ToString(userList[i]),com2d.x,com2d.y);

} } } }

void drawSkeleton (int id) {}

para obtener los datos conjuntos 3d / * PVector jointPos = new PVector(); context.getJointPositionSkeleton(userId,SimpleOpenNI.SKEL_NECK,jointPos);

println(jointPos); */ //

println(SimpleOpenNI.SKEL_HEAD);

if(Random(100) > 97) {PVector jointPos = new PVector(); context.getJointPositionSkeleton(userId,SimpleOpenNI.SKEL_HEAD,jointPos);

println(jointPos.x);

println(jointPos.y);

println(jointPos.z);

globx=jointPos.x;

Globy=jointPos.y;

}

if(drawskeleton==1) {context.drawLimb (ID de usuario, SimpleOpenNI.SKEL_HEAD, SimpleOpenNI.SKEL_NECK), context.drawLimb (ID de usuario, SimpleOpenNI.SKEL_NECK, SimpleOpenNI.SKEL_LEFT_SHOULDER) context.drawLimb (ID de usuario, SimpleOpenNI.SKEL_LEFT_SHOULDER, SimpleOpenNI.SKEL_LEFT_ELBOW); context.drawLimb (ID de usuario, SimpleOpenNI.SKEL_LEFT_ELBOW, SimpleOpenNI.SKEL_LEFT_HAND);

context.drawLimb (ID de usuario, SimpleOpenNI.SKEL_NECK, SimpleOpenNI.SKEL_RIGHT_SHOULDER); context.drawLimb (ID de usuario, SimpleOpenNI.SKEL_RIGHT_SHOULDER, SimpleOpenNI.SKEL_RIGHT_ELBOW); context.drawLimb (ID de usuario, SimpleOpenNI.SKEL_RIGHT_ELBOW, SimpleOpenNI.SKEL_RIGHT_HAND);

context.drawLimb (ID de usuario, SimpleOpenNI.SKEL_LEFT_SHOULDER, SimpleOpenNI.SKEL_TORSO); context.drawLimb (ID de usuario, SimpleOpenNI.SKEL_RIGHT_SHOULDER, SimpleOpenNI.SKEL_TORSO);

context.drawLimb (ID de usuario, SimpleOpenNI.SKEL_TORSO, SimpleOpenNI.SKEL_LEFT_HIP); context.drawLimb (ID de usuario, SimpleOpenNI.SKEL_LEFT_HIP, SimpleOpenNI.SKEL_LEFT_KNEE); context.drawLimb (ID de usuario, SimpleOpenNI.SKEL_LEFT_KNEE, SimpleOpenNI.SKEL_LEFT_FOOT);

context.drawLimb (ID de usuario, SimpleOpenNI.SKEL_TORSO, SimpleOpenNI.SKEL_RIGHT_HIP); context.drawLimb (ID de usuario, SimpleOpenNI.SKEL_RIGHT_HIP, SimpleOpenNI.SKEL_RIGHT_KNEE); context.drawLimb (ID de usuario, SimpleOpenNI.SKEL_RIGHT_KNEE, SimpleOpenNI.SKEL_RIGHT_FOOT); }

}

// ----------------------------------------------------------------- // SimpleOpenNI events

void onNewUser (SimpleOpenNI curContext, int id) {//println ("onNewUser - ID de usuario:" + userId); println ("\tstart seguimiento de esqueleto"); curContext.startTrackingSkeleton(userId); }

void onLostUser (SimpleOpenNI curContext, int id) {//println ("onLostUser - ID de usuario:" + usuario);}

void onVisibleUser (SimpleOpenNI curContext, int id) {///println ("onVisibleUser - ID de usuario:" + usuario);}

Artículos Relacionados

ALDOUS (EMS-30-02) Robo-Animatronic (C.Strathearn MRes Animatronics UoH 'ADA' 2016)

ALDOUS (EMS-30-02) Robo-Animatronic (C.Strathearn MRes Animatronics UoH 'ADA' 2016)

Aldous es un sistema de animatronic que se convirtió en un complemento para mi trabajo teórico M.A (res) (el renacentista de Animatronic personajes en el cine moderno). El proyecto explora emulación animatronic interactivo como una forma de compromis
Egor V.1 Animatronic: básico, autónomo, bajo costo carácter artificial.

Egor V.1 Animatronic: básico, autónomo, bajo costo carácter artificial.

Poco acerca de míHola! soy Carl un animatronic profesional e investigación académica, que actualmente estoy terminando una beca de maestría en desarrollo de sistemas de animatronic en UoH. Esta es una altamente especializada y nicho campo de la anima
Animatronic Fish

Animatronic Fish

Esto es tristemente otra mera foto instructable.  Esto fue construida antes descubrí instructables, y lamentablemente antes empecé a tomar fotos de los pasos en el camino.  Mi amigo Pablo siempre decía em para documentar mis estructuras, retrospectiv
Traje animatronic hierro hombre Mk III

Traje animatronic hierro hombre Mk III

Trajes de Iron Man han sido muy populares últimamente y la pregunta número una que más a menudo me preguntan es "¿Cómo puedo agregar animatronics a mi juego?" Mi amigo Greg quería añadir animatronics a su traje de fibra de vidrio de MkIII por lo
Animatronic DIY (Foxy de cinco noches en de Freddy)

Animatronic DIY (Foxy de cinco noches en de Freddy)

"Hola y Bienvenido Bienvenido a Cove de Pirate" ¿has visto un video juego o personaje de TV que solo te hizo pensar "Oh hombre, me encantaría conocerlos"? Pues ahora puedes con este Instructable! Para dar algunos antecedentes, me he ob
Robo motor

Robo motor

esta motorizada, superficie de pesada carga controlada remota me ayuda a mover pesados proyectos, materiales y maquinaria alrededor de mi tienda.  Haber lanzado mi espalda hacia fuera algunas veces elevación cosas con que probablemente debo han tenid
Consejos de protección de robo de identidad para estudiantes universitarios

Consejos de protección de robo de identidad para estudiantes universitarios

En los últimos años, la mayoría de los consumidores han llegado a darse cuenta de que el robo de identidad está en aumento. Sin embargo, pocos consumidores han considerado cuán vulnerable nuevo colegio los estudiantes pueden ser el robo de identidad.
Último Robo-jardinera (con módulo de anti-derrame ligero y desmontable)

Último Robo-jardinera (con módulo de anti-derrame ligero y desmontable)

(Si te gusta mi proyecto, por favor voten por mí. ¡ Gracias!)Señoras y señores,... te doy mi último Robo-jardinera!"Pero Mario" - dirán - "hemos visto sus plantadores de Robo antes. No está mal y muy ecológico, pero ¿qué nuevo tienes que mo
Disfraz de hombre lobo con Animatronic Simple mueve cola

Disfraz de hombre lobo con Animatronic Simple mueve cola

Mi hijo quería ser un hombre lobo para Halloween de este año. Él escogió una tienda compró la máscara, y luego hicimos el resto del traje, incluyendo un animatronic simple mueve cola!Paso 1: máscaraNos a recogido una máscara de hombre lobo barato en
Robo de Monitoramento

Robo de Monitoramento

Esse é um projeto da Faculdade de Americana (FAM), feito pelos Alunos - (Ariane, Denison, Edléia, Wilson).Agradecemos ao nosso profesor orientador: Wagner T. S.O protótipo de robô controlado por joystick tem una habilidad de se locomover em todas com
Hacer una alarma de robo de Sensor de movimiento Simple. (PIR)

Hacer una alarma de robo de Sensor de movimiento Simple. (PIR)

Se trata de una continuación de mi como a serie de movimiento Sensor de cosas simples. Se presentaron todos Instructables anterior en serie Simple. Y otro paso en la protección contra robo con este sencillo proyecto Ultra solamente 4 cm de longitud.
Cómo mantener tu moto del robo

Cómo mantener tu moto del robo

sólo ha gastar mucho dinero en una bicicleta nueva, o sientes algo sentimentalmente unido a su antiguo batidor, de cualquier manera que usted quiere todo lo hacer puede para mantener en su posesión.Sólo una nota, esto no funcionará en un área de deli
Cómo hacer una mano Animatronic

Cómo hacer una mano Animatronic

En este Instructable mostrará usted cómo hacer una mano Animatronic moderadamente complicada, utilizando el tipo de técnicas utilizadas por los especialistas del animatronics real. El sistema es efectivamente una marioneta complejo, con servos poner
Animatronic Stargate casco

Animatronic Stargate casco

me encanta la película Stargate y primera vez que lo vi supe inmediatamente que quería hacer uno de los cascos de protección super cool de Horus. Yo había bosquejado múltiples diseños en los años y descubrió varios métodos para construir pero rechaza