E. V.2 - Robo-Animatronic (11 / 13 stap)

Stap 11: Processing Script en Kinect bibliotheken


Allereerst moeten we de kinect libraries voor verwerking downloaden (opzoeken op google) Zorg ervoor dat u het installatiepunt bijhouden voor kinect bibliotheek in uw bibliotheek van de verwerking. Wanneer kunt u de demo voor punt tracking weet u dat het correct op uw systeem is geïnstalleerd. Ook moeten we de Eliza chat bot bibliotheek installeren, dit komt met een testpakket.

Wilt u uw eigen achtergrondafbeelding voor uw programma maken en noem het bg1.jpeg

U moet ook uw eigen Eliza script ive noemde het zoiets als newscript.txt maken, maar noem het wat je wilt, of unhash van de code van de steekproef van het internet als u gewoon wilt gebruiken van het origineel.

U kunt ook commentaar uit punt volgen en toegang skelet tracking modus naar interactief met meerdere deelnemers.

Verwerking van Code:

importeren van processing.serial.*;

/ * Een beetje voorbeeld met behulp van de klassieke "Eliza" program.

Eliza is opgesteld als een Processing library, gebaseerd op de java-broncode door Charles Hayden: http://www.chayden.net/eliza/Eliza.html

Het standaardscript die Eliza van gedrag bepaalt kan worden veranderd met de readScript() functie. Intructions om de scriptbestand te wijzigen zijn hier beschikbaar: http://www.chayden.net/eliza/instructions.txt *

/ max is 67 op sweep

importeren van codeanticode.eliza.*; Seriële myport; int dummy = 8; int sendx = 0; Seriële myport2; nek motor int drawskeleton = 0; 1 / 0 = int-lastsentx-1; int lastsenty =-1;

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

int eyecount = 0; gebruikt voor de bemonstering van verkeer

Eliza eliza; PFont lettertype; String elizaResponse, humanResponse; Booleaanse showCursor; int lastTime; PImage bg1a;

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

float targx; float targy;

eenvoudige openni importeren SimpleOpenNI.*;

float-globx, globy;

float oldglobx, oldgloby;

SimpleOpenNI context; [kleur]

userClr = nieuwe kleur [] {color(255,0,0),

Color(0,255,0),

Color(0,0,255),

Color(255,255,0),

Color(255,0,255),

Color(0,255,255)

}; PVector com = nieuwe PVector();

PVector com2d = nieuwe PVector();

einde simpleopenni

void setup {size(1200, 786);

println(sketchPath);

si context = nieuwe SimpleOpenNI(this);

if(context.isInit() == false) {//println ("kan niet init SimpleOpenNI, misschien de camera is niet aangesloten!");

Exit();

terugkeer;

} / / enable depthMap generatie context.enableDepth();

skelet generatie voor alle gewrichten inschakelen

context.enableUser();

Background(200,0,0);

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

println(Serial.List());

myport = nieuwe Serial (dit, Serial.list()[5],9600);

myport2 = nieuwe Serial (dit, Serial.list()[???],9600);

Wanneer Eliza wordt geïnitialiseerd, een standaardscript ingebouwd in de

bibliotheek wordt geladen. Eliza = nieuwe Eliza(this);

Een nieuw script kan worden geladen door de readScript functie.

Het kan duren lokale en externe bestanden.

eliza.readScript("scriptnew.txt");

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

Ga terug naar het standaardscript, dit gebruiken: / / eliza.readDefaultScript();

lettertype = 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);

Als (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;

voor (int hangoor = 0; hangoor < 100; hangoor ++) {println ("zou ingaan op oog TWITCHING");

myport.write(201);

lastcx = closestX;

lastcy = closestY;

} else {}

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

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);

} Als (sendx > 9 & & lastsentx! = sendx) {//println ("verzendende posities van de hals" + sendx);

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

myport.write(SendX);

UNCOMMENT voor het bijhouden van de mensen lastsentx = sendx;

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

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

if(outy>200) outy = 200;

println("outy="+outy);

HIER IS de regel verzenden de nek Y-coördinaten if(lastsenty!=outy) {if(abs(lastsenty-outy) > 35) eyecount = 145;

myport.write(outy);

println("OUTY:"+outy);

lastsenty = outy;

} }

DUMMY vegen begint hier if(random(10) > 2) {/ / myport.write(dummy);

println("dummy:"+dummy);

Dummy ++;

if(dummy>170) dummy = 9;

myport.write((70+dummy));

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

} //DUMMY SWEEP EINDIGT HIER

Fill(255);

beroerte (111);

tekst (elizaResponse, 30, 450, breedte - 40, hoogte);

Fill(0);

int t = millis();

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

lastTime = t;

} als tekst (showCursor) (humanResponse + '_', 30, 600, breedte - 40, hoogte);

anders tekst (humanResponse, 30, 600, breedte - 40, hoogte);

simpleopennidrawmethod();

closestpixdrawmethod();

}

VOID closestpixdrawmethod() {closestValue = 8000;

context.update();

de diepte-matrix ophalen met de kinect int [] depthValues = context.depthMap();

voor elke rij in de diepte afbeelding voor (int y = 0; y < 480; y ++) {}

elke pixel in de rij voor kijken (int x = 0 x < 640; x ++) {}

Trek de corresponderende waarde uit de diepte-array

int i = x + y * 640;

int currentDepthValue = depthValues [i];

Als die pixel het dichtst is hebben we gezien tot nu toe

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

Save zijn waarde closestValue = currentDepthValue;

en haar positie (zowel X en Y-coördinaten) opslaan

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);

de diepte-afbeelding op het scherm tekent

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

teken een rode cirkel overheen,

op de X- en Y-coördinaten geplaatst

we gered van de dichtstbijzijnde pixel. Fill(255,0,0);

ellips (closestX, closestY, 25, 25);

}

VOID keyPressed() {als ((key == ENTER) || (Key == Return)) {/ / println(humanResponse); //first zoeken naar trefwoorden

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

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) & & (sleutel! = CODED)) {}

Als de sleutel alfanumerieke, toe te voegen aan de tekenreeks

humanResponse = humanResponse + sleutel;

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

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

VOID printElizaIntro() {String hello = Hello.";

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

println (">>" + elizaResponse);

}

VOID simpleopennidrawmethod() {context.update();

//println ("gx ="+ globx +"GY =" + globy); tekenen van depthImageMap / / image(context.depthImage(),0,0); if(drawskeleton==1) image(context.userImage(),0,0); het skelet trekken als er beschikbare int [] userList = context.getUsers(); for (int i = 0; i

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

hoekpunt (com2d.x + 5,com2d.y);

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

Text(integer.toString(UserList[i]),com2d.x,com2d.y);

} } } }

VOID drawSkeleton (int userId) {}

om de 3D-gezamenlijke gegevens / * PVector jointPos = nieuwe 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 (userId, SimpleOpenNI.SKEL_HEAD, SimpleOpenNI.SKEL_NECK) context.drawLimb (userId, SimpleOpenNI.SKEL_NECK, SimpleOpenNI.SKEL_LEFT_SHOULDER); context.drawLimb (userId, SimpleOpenNI.SKEL_LEFT_SHOULDER, SimpleOpenNI.SKEL_LEFT_ELBOW); context.drawLimb (userId, SimpleOpenNI.SKEL_LEFT_ELBOW, SimpleOpenNI.SKEL_LEFT_HAND);

context.drawLimb (userId, SimpleOpenNI.SKEL_NECK, SimpleOpenNI.SKEL_RIGHT_SHOULDER); context.drawLimb (userId, SimpleOpenNI.SKEL_RIGHT_SHOULDER, SimpleOpenNI.SKEL_RIGHT_ELBOW); context.drawLimb (userId, SimpleOpenNI.SKEL_RIGHT_ELBOW, SimpleOpenNI.SKEL_RIGHT_HAND);

context.drawLimb (userId, SimpleOpenNI.SKEL_LEFT_SHOULDER, SimpleOpenNI.SKEL_TORSO); context.drawLimb (userId, SimpleOpenNI.SKEL_RIGHT_SHOULDER, SimpleOpenNI.SKEL_TORSO);

context.drawLimb (userId, SimpleOpenNI.SKEL_TORSO, SimpleOpenNI.SKEL_LEFT_HIP); context.drawLimb (userId, SimpleOpenNI.SKEL_LEFT_HIP, SimpleOpenNI.SKEL_LEFT_KNEE); context.drawLimb (userId, SimpleOpenNI.SKEL_LEFT_KNEE, SimpleOpenNI.SKEL_LEFT_FOOT);

context.drawLimb (userId, SimpleOpenNI.SKEL_TORSO, SimpleOpenNI.SKEL_RIGHT_HIP); context.drawLimb (userId, SimpleOpenNI.SKEL_RIGHT_HIP, SimpleOpenNI.SKEL_RIGHT_KNEE); context.drawLimb (userId, SimpleOpenNI.SKEL_RIGHT_KNEE, SimpleOpenNI.SKEL_RIGHT_FOOT); }

}

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

VOID onNewUser (SimpleOpenNI curContext, int userId) {//println ("onNewUser - userId:" + userId); println ("\tstart skelet bijhouden"); curContext.startTrackingSkeleton(userId); }

VOID onLostUser (SimpleOpenNI curContext, int userId) {//println ("onLostUser - userId:" + userId);}

VOID onVisibleUser (SimpleOpenNI curContext, int userId) {///println ("onVisibleUser - userId:" + userId);}

Gerelateerde Artikelen

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 is een systeem van de animatronic ontwikkeld in compliment naar mijn MA (res) theoretische werk (The Renaissance van Animatronic tekens in moderne Cinema). Het project verkent interactieve animatronic emulatie als een vorm van griezelige visce
Animatronic Fish

Animatronic Fish

Dit is helaas een andere mere foto-instructable.  Dit werd gebouwd voordat ik ontdekte instructables, en helaas voordat ik begonnen met het nemen van foto's van stappen langs de weg.  Mijn vriend Paul vertelde altijd em voor het documenteren van mijn
Animatronic Iron Man Mk III pak

Animatronic Iron Man Mk III pak

Iron Man kostuums hebben de laatste tijd enorm populair en de nummer een vraag ik ben meestal is "Hoe kan ik animatronics toevoegen aan mijn pak?" Mijn vriend Greg toevoegen van animatronics aan zijn MkIII glasvezel pak wilde dus hij vroeg voor
DIY Animatronic (Foxy vanaf vijf nachten bij Freddy's)

DIY Animatronic (Foxy vanaf vijf nachten bij Freddy's)

"Hallo, en Welkom Welkom op de Pirate's Cove" heb je ooit gezien een video game of TV karakter die je net gemaakt denken "Oh man, ik zou graag ontmoeten hen"? Goed nu kunt u met dit Instructable! Het geven van achtergrondinformatie, he
De Verhuizer van de Robo

De Verhuizer van de Robo

dit gemotoriseerde, externe gecontroleerde zware-belasting-uitvoering oppervlak helpt me zet zware projecten, materialen en machines rond mijn winkel.  Hijs dingen die ik waarschijnlijk had moeten hebben een helpende hand met hebben gegooid mijn rug
Ultieme Robo-Planter (met licht en afneembare anti-spill module)

Ultieme Robo-Planter (met licht en afneembare anti-spill module)

(Als je van mijn project, please vote voor mij. Bedankt!)Dames en heren, ik geef u... mijn uiteindelijke Robo-Planter!"Maar Mario" - zult u zeggen - "We hebben gezien uw Robo-plantenbakken vóór. Niet slecht en zeer ecologisch, maar wat nieu
Weerwolf kostuum met eenvoudige Animatronic kwispelende staart

Weerwolf kostuum met eenvoudige Animatronic kwispelende staart

Mijn zoon wilde worden van een weerwolf voor Halloween dit jaar. Hij pakte een winkel gekocht masker, en vervolgens maakte we de rest van het kostuum, met inbegrip van een eenvoudige animatronic kwispelende staart!Stap 1: maskerWe pakte gewoon een go
Arduino gereguleerde Animatronic Skeleton rockband - lopende

Arduino gereguleerde Animatronic Skeleton rockband - lopende

Voor Halloween dit jaar besloten heb ik om te bouwen van een animatronic skeleton rockband. Het is een work in progress op dit punt, maar ik ben best wel blij met hoe het komt langs. De meeste alles is gemaakt van materialen die ik had op hand (ik be
Animatronic praten Takeout Container

Animatronic praten Takeout Container

De animatronic praten takeout container is een leuk klein speelgoed dat is goed voor uren van vermaak. Dit idee kwam tot stand na een speciale effecten film klasse hebben genomen toen ik op school. Terwijl in de klasse, maakte ik een filmpje van meze
Animatronic Mini Golf

Animatronic Mini Golf

Exploderende vulkanen, dinosaurussen, en animatronic tiki bewakers! Dit is niet uw klassieke spel minigolf. Putt van de houten brug in de mond van de vulkaan en leiden tot een explosie die net misschien rol je bal voor een hole-in-one. Missen door ge
Animatronic Balsa hout Hand

Animatronic Balsa hout Hand

hier is iets ik 3 jaar geleden gebouwd in de zomer. Alles wat het echt doet is geopend en sluit de vingers van de hand, maar het toont ook aan hoe de pezen in een echte menselijke hand werken. Het is echt een heel interessant project is en u kunt beg
Hoe maak je een Animatronic Hand

Hoe maak je een Animatronic Hand

In dit Instructable zal ik je laten zien hoe maak je een matig ingewikkeld Animatronic hand, met behulp van de soorten technieken gebruikt door de werkelijke animatronics specialisten. Het systeem is in feite een complexe marionet, met servo's brenge
Maken van robo-plantenbakken hergebruik van huis ongewenste

Maken van robo-plantenbakken hergebruik van huis ongewenste

(UPDATE: Check out voor mijn nieuwe foto's van de robo-plantenbakken:)Moe van eenvoudige of sissy plantenbakken? Wilt u meer houding bloempotten? Nou, het is uw gelukkige dag, omdat vandaag de instructable is over het maken van plantenbakken met behu
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 professor orientador: Wagner T. S.O protótipo de robô controlado por joystick tem een habilidade de locomover-se em todas al