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

Étape 11 : Les bibliothèques de Script de traitement et Kinect

D’abord il faut télécharger les bibliothèques de kinect à la transformation (chercher sur google) Assurez-vous que vous installez le point de suivi pour kinect bibliothèque dans votre bibliothèque de traitement. Vous pouvez exécuter la démo pour le point de suivi vous savez qu'il est correctement installé sur votre système. Nous avons besoin également d’installer la bibliothèque de bot de tchat Eliza, cela vient avec un paquet de test.

Vous devrez faire votre propre image d’arrière-plan pour votre programme et appelez-le bg1.jpeg

Vous devrez également faire votre propre Eliza script ive appelé quelque chose comme newscript.txt, mais appeler ce que vous voulez, ou unhash l’exemple de code internet si vous souhaitez simplement utiliser l’original.

Vous pouvez aussi commenter point accès et suivi le mode de suivi squelette à interactive avec plusieurs participants.

Code de traitement :

Import processing.serial.* ;

/ * Un petit exemple avec la classique « Eliza » du programme.

Eliza a été compilée en tant que bibliothèque de traitement, basée sur le code source java de Charles Hayden : http://www.chayden.net/eliza/Eliza.html

Le script par défaut qui détermine le comportement d’Eliza peut être modifié avec la fonction readScript(). Intructions pour modifier le fichier de script sont disponibles ici : http://www.chayden.net/eliza/instructions.txt *

/ max est de 67 sur le coupe-bise

Import codeanticode.eliza.* ; Serial myport ; int factice = 8 ; int sendx = 0 ; Série myport2 ; cou moteur int drawskeleton = 0 ; 1 / 0 int lastsentx =-1 ; int lastsenty =-1 ;

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

int eyecount = 0 ; utilisée pour l’échantillonnage de mouvement

Eliza eliza ; PFont polices ; Chaîne elizaResponse, humanResponse ; showCursor booléenne ; lastTime int ; Bg1a Byte ;

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

float targx ; flotteur targy ;

openni simple import SimpleOpenNI.* ;

flotteur globx, globy ;

flotteur oldglobx, oldgloby ;

SimpleOpenNI contexte ; [couleur]

userClr = new 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 = new PVector() ;

PVector com2d = new PVector() ;

fin simpleopenni

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

println(sketchPath) ;

contexte de tr = new SimpleOpenNI(this) ;

if(Context.isInit() == false) {//println ("Can' init SimpleOpenNI, peut-être la caméra n’est pas connectée!") ;

Exit() ;

retour ;

} / / enable depthMap génération context.enableDepth() ;

activez la génération squelette pour tous les joints

context.enableUser() ;

Background(200,0,0) ;

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

println(Serial.List()) ;

myPort = nouvelle série (cela, Serial.list()[5],9600) ;

myport2 = nouvelle série (cela, Serial.list()[???],9600) ;

Lorsque Eliza est initialisée, un script par défaut intégré dans le

bibliothèque est chargée. Eliza = new Eliza(this) ;

Un nouveau script peut être chargé via la fonction readScript.

Il peut prendre local ainsi que des fichiers à distance.

eliza.readScript("scriptnew.txt") ;

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

Pour revenir au script par défaut, utilisez ceci: / / eliza.readDefaultScript() ;

police = 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 ;

pour (lop int = 0; lop < 100 ; lop ++) {println ("irait en contraction oeil") ;

myPort.Write(201) ;

lastcx = closestX ;

lastcy = closestY ;

} else {}

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

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 (« envoi cou positions » + sendx) ;

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

myPort.Write(SendX) ;

Décommentez la ligne suivante pour la suivi des personnes lastsentx = sendx ;

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

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

if(outy>200) outy = 200 ;

println("outy="+outy) ;

ICI est la ligne envoie le cou coordonnées Y if(lastsenty!=outy) {if(abs(lastsenty-outy) > 35) eyecount = 145 ;

myPort.Write(outy) ;

println("outy:"+outy) ;

lastsenty = outy ;

} }

DUMMY SWEEP STARTS HERE if(random(10) > 2) {/ / myport.write(dummy) ;

println("dummy:"+Dummy) ;

mannequin ++ ;

if(dummy>170) mannequin = 9 ;

myPort.Write((70+Dummy)) ;

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

} //DUMMY BALAYAGE SE TERMINE ICI

Fill(255) ;

accident vasculaire cérébral (111) ;

texte (elizaResponse, 30, largeur 450, - 40, hauteur) ;

Fill(0) ;

int t = millis() ;

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

lastTime = t ;

} Si texte (showCursor) (humanResponse + « _ », 30, largeur 600, - 40, hauteur) ;

autre texte (humanResponse, 30, largeur 600, - 40, hauteur) ;

simpleopennidrawmethod() ;

closestpixdrawmethod() ;

}

void closestpixdrawmethod() {closestValue = 8000 ;

Context.Update() ;

obtenir le tableau de profondeur de la kinect int [] depthValues = context.depthMap() ;

pour chaque ligne de l’image de profondeur pour (int y = 0; y < 480; y ++) {}

Regardez chaque pixel dans la ligne correspondant (int x = 0; x < 640; x ++) {}

Tirez la valeur correspondante du tableau de profondeur

int i = x + y * 640 ;

int currentDepthValue = depthValues [i] ;

Si ce pixel est le plus proche de vous, nous avons vu jusqu'à présent

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

vous économisez sa valeur closestValue = currentDepthValue ;

et conserver sa position (coordonnées X et Y)

closestX = x ; closestY = y ;

scfac flotteur}}} = 67,0 / 640 ;

globx =(closestX*scfac) *.7 ;

Targy =(closestY*scfac) * 3.2 ;

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

Globy = targy ;

/ / println(globx) ;

dessiner l’image de la profondeur à l’écran

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

Tracez un cercle rouge dessus,

positionné aux coordonnées X et Y

Nous avons économisé du pixel le plus proche. Fill(255,0,0) ;

ellipse (closestX, closestY, 25, 25) ;

}

void keyPressed() {si ((key == ENTER) || (Key == Return)) {/ / println(humanResponse) ; //first analyse des mots-clés

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

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

Delay(10) ;

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

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

myPort.Write(1) ;

humanResponse = "" ;

} ElseIf ((key > 31) & & (touche! = CODED)) {}

Si la clé est alphanumérique, ajoutez-le à la chaîne

humanResponse = humanResponse + touche ;

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

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

void printElizaIntro() {chaîne Bonjour = « Bonjour. » ;

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

println (">>" + elizaResponse) ;

}

void simpleopennidrawmethod() {context.update() ;

//println (« gx = « + globx + » GY = "+ globy) ; dessiner des depthImageMap / / image(context.depthImage(),0,0) ; if(drawskeleton==1) image(context.userImage(),0,0) ; dessiner le squelette s’il est disponible int [] userList = context.getUsers() ; pour (int i = 0; i

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

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

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

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

} } } }

void drawSkeleton (int userId) {}

pour obtenir les données 3d mixtes / * 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 (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 (nom d’utilisateur, SimpleOpenNI.SKEL_NECK, SimpleOpenNI.SKEL_RIGHT_SHOULDER) ; context.drawLimb (nom d’utilisateur, SimpleOpenNI.SKEL_RIGHT_SHOULDER, SimpleOpenNI.SKEL_RIGHT_ELBOW) ; context.drawLimb (nom d’utilisateur, SimpleOpenNI.SKEL_RIGHT_ELBOW, SimpleOpenNI.SKEL_RIGHT_HAND) ;

context.drawLimb (nom d’utilisateur, SimpleOpenNI.SKEL_LEFT_SHOULDER, SimpleOpenNI.SKEL_TORSO) ; context.drawLimb (nom d’utilisateur, SimpleOpenNI.SKEL_RIGHT_SHOULDER, SimpleOpenNI.SKEL_TORSO) ;

context.drawLimb (nom d’utilisateur, SimpleOpenNI.SKEL_TORSO, SimpleOpenNI.SKEL_LEFT_HIP) ; context.drawLimb (nom d’utilisateur, SimpleOpenNI.SKEL_LEFT_HIP, SimpleOpenNI.SKEL_LEFT_KNEE) ; context.drawLimb (nom d’utilisateur, SimpleOpenNI.SKEL_LEFT_KNEE, SimpleOpenNI.SKEL_LEFT_FOOT) ;

context.drawLimb (nom d’utilisateur, SimpleOpenNI.SKEL_TORSO, SimpleOpenNI.SKEL_RIGHT_HIP) ; context.drawLimb (nom d’utilisateur, SimpleOpenNI.SKEL_RIGHT_HIP, SimpleOpenNI.SKEL_RIGHT_KNEE) ; context.drawLimb (nom d’utilisateur, SimpleOpenNI.SKEL_RIGHT_KNEE, SimpleOpenNI.SKEL_RIGHT_FOOT) ; }

}

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

void onNewUser (SimpleOpenNI curContext, userId int) {//println ("onNewUser - nom d’utilisateur:" + userId) ; println ("\tstart suivi le squelette") ; curContext.startTrackingSkeleton(userId) ; }

void onLostUser (SimpleOpenNI curContext, userId int) {//println ("onLostUser - nom d’utilisateur:" + userId);}

void onVisibleUser (SimpleOpenNI curContext, userId int) {///println ("onVisibleUser - nom d’utilisateur:" + userId);}

Articles Liés

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

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

Aldous est un système d'animatronic développé en complément à mon travail théorique de M.A (res) (The Renaissance of animatronique Characters dans le cinéma moderne). Le projet explore animatronique interactive émulation comme une forme d'inquiétante
Animatronic Egor V.1 : base, autonome, faible coût caractère artificiel.

Animatronic Egor V.1 : base, autonome, faible coût caractère artificiel.

Bit About MESalut!! Je suis Carl praticien animatronique et la recherche universitaire, que je termine actuellement une bourse de maîtrise en développement système animatronic au UoH. Il s'agit d'un très spécialisés et sur le terrain de la niche de l
Animatronic Fish

Animatronic Fish

C'est malheureusement une autre mere photo-instructable.  Il a été construit avant, j'ai découvert instructables, et malheureusement avant j'ai commencé à prendre des photos des étapes sur le chemin.  Mon copain Paul disait toujours em pour documente
Costume de loup garou avec Simple animatronique remue la queue

Costume de loup garou avec Simple animatronique remue la queue

Mon fils voulait être un loup-garou pour Halloween cette année. Il a choisi un masque acheté en magasin, et puis nous avons fait le reste du costume, y compris un simple animatronique remue la queue !Étape 1: masqueNous avons juste pris un masque de
Costume de l’animatronique Iron Man Mk III

Costume de l’animatronique Iron Man Mk III

Costumes de Iron Man ont été extrêmement populaire ces derniers temps et la question numéro une, que je me demande plus souvent est « Comment puis-je ajouter animatronics pour mon costume? » Mon ami Greg voulait ajouter animatronics à sa combinaison
Animatronic bricolage (Foxy de cinq nuits à Freddy)

Animatronic bricolage (Foxy de cinq nuits à Freddy)

«Bonjour et Bienvenue à l'anse du Pirate " avez-vous déjà vu un jeu vidéo ou personnage de TV qui vous a juste fait penser « Oh man, j'aimerais rencontrer » ? Eh bien maintenant vous pouvez avec ce Instructable ! Pour donner des renseignements généra
Robo Mover

Robo Mover

ce motorisé, distance contrôlée lourds porteurs surface m'aide à déplacer les projets lourds, des matériaux et des machines dans ma boutique.  Après avoir jeté mon dos quelques fois levage choses avec que j'aurais probablement eu un coup de main, j'a
Robo-planteur ultime (avec léger et démontable module anti-débordement)

Robo-planteur ultime (avec léger et démontable module anti-débordement)

(Si vous aimez mon projet, s'il vous plaît votez pour moi. Merci!)Mesdames et Messieurs, je vous donne... mon Robo-planteur ultime !« Mais Mario"- vous allez me dire - « nous avons vu votre Robo-jardinières avant. Pas mal et très écologique, mais ce
Robo-jardinières, ré-utilisation indésirable de maison de faire

Robo-jardinières, ré-utilisation indésirable de maison de faire

(mise à jour : départ pour mes nouvelles photos de robo-jardinières:)Fatigué des planteurs simples ou sissy ? Vous voulez plus de pots attitude ? Eh bien, c'est votre jour de chance, car instructable d'aujourd'hui est pour faire des jardinières à l'a
Animatronic Fawkes Phénix

Animatronic Fawkes Phénix

dans le cadre de notre Halloween "Harry Potter" thème cette année, j'ai voulu faire un animatronic Fawkes.  Fawkes est l'un de mes personnages préférés de la série Harry Potter (et mon costume est Dumbledore!)Le mouvement est basé sur deux servo
Robo TK-100 réservoir Chasis Assemblée

Robo TK-100 réservoir Chasis Assemblée

Il s'agit d'une Instructable sur la façon d'assembler le châssis du char de Robo TK-100.Ce châssis sera la base d'un Rover autonome avec un bras attaché à être contrôlé via bluetooth. Un ensemble complet de Instructables, y compris le code pour bient
Animatronic Mini Golf

Animatronic Mini Golf

Explosion de volcans, dinosaures et animatronique tiki gardes ! Ce n'est pas votre jeu classique de mini-golf. Putt le pont en bois dans la bouche du volcan et déclencher une explosion qui vient pourrait rouler votre boule pour un trou-en-un. Ne manq
Animatronic parler conteneur à emporter

Animatronic parler conteneur à emporter

L'animatronique parler conteneur à emporter est un amusant petit jouet qui est bon pour des heures d'amusement. Cette idée leur est venue après avoir pris une classe de cinéma des effets spéciaux quand j'étais au Collège. Alors que dans la classe, j'
Animatron 8.3 : Un contrôleur Animatronic

Animatron 8.3 : Un contrôleur Animatronic

Animatron a commencé comme une feuille de calcul Excel et puis est devenu un programme FreeBasic. Le programme a couru sur mon portable et communiqué à mon pingouin robotique pour contrôler son comportement. La prochaine génération, c'est ce que je v