Mercurial > hg > movesynth
changeset 38:718f93c14ba9
changed ports on tim's grid mapper to work with joe - now using 12346 to send to joe and receive on 12345, added stoppped person in the of patch
author | Andrew N Robertson <andrew.robertson@eecs.qmul.ac.uk> |
---|---|
date | Fri, 25 Feb 2011 17:34:52 +0000 |
parents | 9840e732a586 |
children | 7286e5d455a7 |
files | README of/testApp.cpp of/testApp.h tim_grid_mapper/grid_mapper.py |
diffstat | 4 files changed, 97 insertions(+), 20 deletions(-) [+] |
line wrap: on
line diff
--- a/README Fri Feb 25 17:33:00 2011 +0000 +++ b/README Fri Feb 25 17:34:52 2011 +0000 @@ -7,3 +7,11 @@ # if you quit the interpreter without stopping, # need to find and kill the process + + + +import grid_mapper +grid_mapper.joe = etc +grid_mapper.start() + +
--- a/of/testApp.cpp Fri Feb 25 17:33:00 2011 +0000 +++ b/of/testApp.cpp Fri Feb 25 17:34:52 2011 +0000 @@ -21,13 +21,21 @@ // ofEnableAlphaBlending(); ofSetLineWidth(12); + anubis.loadImage("images/anubis-wall-mask.gif"); franklinBook.loadFont("frabk.ttf", 32); sender.setup( HOST, PORT ); + stopSender.setup( HOST, STOPPORT ); + maxTorsoValues[0] = 0; + maxTorsoValues[1] = 0; + maxTorsoValues[2] = 0; + double timeNow = ofGetElapsedTimeMillis(); + for (int user = 0;user < NUMBER_OF_USERS;user++) + lastRecordedTime[user] = timeNow; } //-------------------------------------------------------------- @@ -36,6 +44,7 @@ // update the open ni context and user tracker context.update(); user.update(); + } @@ -45,15 +54,33 @@ ofxTrackedUser* tracked = user.getTrackedUser(userID); - - if (fabs(torso[userID][0] - tracked->left_upper_torso.end.x) + fabs(torso[userID][1] - tracked->left_upper_torso.end.y) > 0.1 && tracked->left_upper_torso.end.x > 0) { - userPresent[userID] = true; + double timeNow = ofGetElapsedTimeMillis(); + + + + + if ((fabs(torso[userID][0] - tracked->left_upper_torso.end.x) + fabs(torso[userID][1] - tracked->left_upper_torso.end.y) > 0.1 && tracked->left_upper_torso.end.x > 0 )){ + //printf("tracking time %d and last recorded %d\n", timeNow, lastRecordedTime[userID]); + userPresent[userID] = true; + lastRecordedTime[userID] = timeNow ; torso[userID][0] = tracked->left_upper_torso.end.x; torso[userID][1] = tracked->left_upper_torso.end.y; torso[userID][2] = tracked->left_upper_torso.end.z; - }else - { + + checkTorsoMaxima(userID); + + //recent track, low distance but do nothing yet + } + else if(userPresent[userID] && (timeNow - lastRecordedTime[userID]) > 500 ){ + //not recent track => stopped userPresent[userID] = false; + printf("user %i has STOPPED!\n", userID); + torso[userID][0] = tracked->left_upper_torso.end.x; + torso[userID][1] = tracked->left_upper_torso.end.y; + torso[userID][2] = tracked->left_upper_torso.end.z; + + sendStopMessageForUser(userID); + } ofSetColor(0x00FF00); outputString = "HeadX : "; @@ -62,18 +89,35 @@ } +void testApp::checkTorsoMaxima(int id){ + for (int h = 0; h < 3;h++){ + if (torso[id][h] > maxTorsoValues[h]) + maxTorsoValues[h] = torso[id][h]; + } +} + void testApp::sendDataViaOSC(int userID){ ofxOscMessage m; m.setAddress( "/person" ); m.addIntArg( userID ); - m.addFloatArg( torso[userID][0] ); - m.addFloatArg( torso[userID][1] ); - m.addFloatArg( torso[userID][2] ); + m.addFloatArg( torso[userID][0]/maxTorsoValues[0] ); + m.addFloatArg( torso[userID][1] /maxTorsoValues[1]); + m.addFloatArg( torso[userID][2] /maxTorsoValues[2]); sender.sendMessage( m ); } +void testApp::sendStopMessageForUser(int userID){ + ofxOscMessage m; + m.setAddress( "/stoppedperson" ); + m.addIntArg( userID ); + m.addFloatArg( torso[userID][0]/maxTorsoValues[0] ); + m.addFloatArg( torso[userID][1] /maxTorsoValues[1]); + m.addFloatArg( torso[userID][2] /maxTorsoValues[2]); + stopSender.sendMessage( m ); +} + //-------------------------------------------------------------- void testApp::draw(){ ofBackground(238,238,224); @@ -96,6 +140,7 @@ for(int i = 0; i < user.getNumTrackedUsers(); ++i) { ofxTrackedUser* tracked = user.getTrackedUser(i); if(tracked != NULL) { + //andrews code @@ -136,14 +181,16 @@ } //end andrew - + info << i << " neck pos: " << tracked->left_lower_arm.end.x << " " << tracked->left_lower_arm.end.y << " " << tracked->neck.begin.z << endl; + if (tracked->neck.begin.x != 0) + ofSetColor(139,0,0,100); ofNoFill(); float w = ofGetWidth(); @@ -155,7 +202,7 @@ // ofBezier(tracked->neck.begin.x,tracked->neck.begin.y,tracked->neck.end.x,tracked->neck.end.y,tracked->right_lower_leg.begin.x,tracked->right_lower_leg.begin.y,tracked->right_lower_leg.end.x,/*tracked->right_lower_leg.end.y*/ h); //acid smiley - ofFill(); + /* ofFill(); ofSetColor(255,255,100); ofCircle(tracked->neck.begin.x,tracked->neck.begin.y,30); ofSetColor(0); @@ -165,9 +212,26 @@ ofSetColor(0); ofCircle(tracked->neck.begin.x+10.0f,tracked->neck.begin.y,6); ofCircle(tracked->neck.begin.x-10.0f,tracked->neck.begin.y,6); - + */ // anubis.draw(tracked->neck.begin.x,tracked->neck.begin.y); + + +ofBezier(tracked->neck.begin.x,tracked->neck.begin.y,tracked->neck.end.x,tracked->neck.end.y,tracked->left_lower_arm.begin.x,tracked->left_lower_arm.begin.y,tracked->left_lower_arm.end.x,/*tracked->left_lower_arm.end.y*/ w); +ofBezier(tracked->neck.begin.x,tracked->neck.begin.y,tracked->neck.end.x,tracked->neck.end.y,tracked->right_lower_arm.begin.x,tracked->right_lower_arm.begin.y,tracked->right_lower_arm.end.x,/*tracked->right_lower_arm.end.y*/ w); +ofBezier(tracked->neck.begin.x,tracked->neck.begin.y,tracked->neck.end.x,tracked->neck.end.y,tracked->left_lower_leg.begin.x,tracked->left_lower_leg.begin.y,tracked->left_lower_leg.end.x,/*tracked->left_lower_leg.end.y*/ h); +ofBezier(tracked->neck.begin.x,tracked->neck.begin.y,tracked->neck.end.x,tracked->neck.end.y,tracked->right_lower_leg.begin.x,tracked->right_lower_leg.begin.y,tracked->right_lower_leg.end.x,/*tracked->right_lower_leg.end.y*/ h); +ofFill(); +ofSetColor(255,255,100); + ofCircle(tracked->neck.begin.x,tracked->neck.begin.y,30); +ofSetColor(0); +ofCircle(tracked->neck.begin.x,tracked->neck.begin.y,35); +ofSetColor(255,255,100); + ofCircle(tracked->neck.begin.x,tracked->neck.begin.y,30); + ofSetColor(0); +ofCircle(tracked->neck.begin.x+10.0f,tracked->neck.begin.y,6); +ofCircle(tracked->neck.begin.x-10.0f,tracked->neck.begin.y,6); + } }
--- a/of/testApp.h Fri Feb 25 17:33:00 2011 +0000 +++ b/of/testApp.h Fri Feb 25 17:34:52 2011 +0000 @@ -7,9 +7,10 @@ #include "ofMain.h" #include "ofxOpenNI.h" #include "ofxOsc.h" - +#define NUMBER_OF_USERS 6 #define HOST "localhost" -#define PORT 12346 +#define PORT 12344 +#define STOPPORT 12343 class testApp : public ofBaseApp{ @@ -33,17 +34,21 @@ ofxUserGenerator user; ofxImageGenerator image; //ofImage Davy; + void sendStopMessageForUser(int userID); ofImage anubis; bool drawIt; + + float maxTorsoValues[3]; + void checkTorsoMaxima(int id); - + double lastRecordedTime[6];//x,y,and z of the head float torso[6][3];//x,y,and z of the head bool userPresent[6]; ofTrueTypeFont franklinBook; string outputString; - ofxOscSender sender; + ofxOscSender sender, stopSender; }; #endif
--- a/tim_grid_mapper/grid_mapper.py Fri Feb 25 17:33:00 2011 +0000 +++ b/tim_grid_mapper/grid_mapper.py Fri Feb 25 17:34:52 2011 +0000 @@ -18,9 +18,9 @@ # make noise). #### OSC OPTIONS - THESE NEED TO BE SET MANUALLY #### -my_port = 12344 # to receive OSC messages -joe = ('localhost', 12345) -ableton = ('localhost', 12346) +my_port = 12344 # to receive OSC messages from kinect +#joe = ('localhost', 12346)#changed by andrew - python sending to joe +ableton = ('localhost', 12345)#changed by andrew - max receiving from Joe ### Constants for grid mapping: # The range of values that the input coordinates and output values may take: @@ -93,7 +93,7 @@ message = OSCMessage(address) message.extend(data) client.sendto(message, ableton) - print('\n==OSC Output "%s" to Ableton %s:==\n %s' % (address, ableton, data)) +# print('\n==OSC Output "%s" to Ableton %s:==\n %s' % (address, ableton, data)) @@ -121,7 +121,7 @@ `data` should be in form [person_id, x, y, z] ''' pitch, velocity, channel, cc1, cc2 = grid_map(*data) - + channel = channel + 1 cc1, cc2 = int(round(cc1)), int(round(cc2)) if cc1 != last_value_sent[(channel, 1)]: send_to_ableton([channel, 1, cc1], '/cc')