void OniTrackApp::setup() { bRemoting = FALSE; XnStatus rc = context.InitFromXmlFile(SAMPLE_XML_FILE); if (rc != XN_STATUS_OK) { printf("Couldn't initialize: %s\n", xnGetStatusString(rc)); shutdown(); } pSessionGenerator = new XnVSessionManager(); rc = ((XnVSessionManager*)pSessionGenerator)->Initialize(&context, "Click", "RaiseHand"); if (rc != XN_STATUS_OK) { printf("Session Manager couldn't initialize: %s\n", xnGetStatusString(rc)); delete pSessionGenerator; shutdown(); } context.StartGeneratingAll(); pSessionGenerator->RegisterSession(NULL, &SessionStart, &SessionEnd, &SessionProgress); wc.RegisterWave(NULL, OnWaveCB); wc.RegisterPointUpdate(NULL, OnPointUpdate); pSessionGenerator->AddListener(&wc); printf("Please perform focus gesture to start session\n"); printf("Hit any key to exit\n"); }
// this sample can run either as a regular sample, or as a client for multi-process (remote mode) int main(int argc, char** argv) { //ros::Subscriber subcommand = rosnode.subscribe("/camera/rgb/image_color", 10, cameracallback); /*ros::Subscriber subcommand = rosnode.subscribe("/camera/depth_registered/image_raw", 10, cameracallback); printf("subscribe get\n"); */ xn::Context context; xn::ScriptNode scriptNode; XnVSessionGenerator* pSessionGenerator; XnBool bRemoting = FALSE; ros::init(argc, argv, "detect_people", ros::init_options::NoSigintHandler); ros::NodeHandle rosnode = ros::NodeHandle(); if (argc > 1) { // remote mode context.Init(); printf("Running in 'Remoting' mode (Section name: %s)\n", argv[1]); bRemoting = TRUE; // Create multi-process client pSessionGenerator = new XnVMultiProcessFlowClient(argv[1]); XnStatus rc = ((XnVMultiProcessFlowClient*)pSessionGenerator)->Initialize(); if (rc != XN_STATUS_OK) { printf("Initialize failed: %s\n", xnGetStatusString(rc)); delete pSessionGenerator; return 1; } } else { // Local mode // Create context const char *fn = NULL; if (fileExists(SAMPLE_XML_FILE)) fn = SAMPLE_XML_FILE; else if (fileExists(SAMPLE_XML_FILE_LOCAL)) fn = SAMPLE_XML_FILE_LOCAL; else { printf("Could not find '%s' nor '%s'. Aborting.\n" , SAMPLE_XML_FILE, SAMPLE_XML_FILE_LOCAL); return XN_STATUS_ERROR; } XnStatus rc = context.InitFromXmlFile(fn, scriptNode); if (rc != XN_STATUS_OK) { printf("Couldn't initialize: %s\n", xnGetStatusString(rc)); return 1; } // Create the Session Manager pSessionGenerator = new XnVSessionManager(); rc = ((XnVSessionManager*)pSessionGenerator)->Initialize(&context, "Click", "RaiseHand"); if (rc != XN_STATUS_OK) { printf("Session Manager couldn't initialize: %s\n", xnGetStatusString(rc)); delete pSessionGenerator; return 1; } // Initialization done. Start generating context.StartGeneratingAll(); } // Register session callbacks pSessionGenerator->RegisterSession(NULL, &SessionStart, &SessionEnd, &SessionProgress); // init & register wave control XnVWaveDetector wc; wc.RegisterWave(NULL, OnWaveCB); wc.RegisterPointUpdate(NULL, OnPointUpdate); pSessionGenerator->AddListener(&wc); printf("Please perform focus gesture to start session\n"); printf("Hit any key to exit\n"); // Main loop while (!xnOSWasKeyboardHit()) { if (bRemoting) { ((XnVMultiProcessFlowClient*)pSessionGenerator)->ReadState(); } else { context.WaitAnyUpdateAll(); ((XnVSessionManager*)pSessionGenerator)->Update(&context); } } delete pSessionGenerator; return 0; }
// this sample can run either as a regular sample, or as a client for multi-process (remote mode) int main(int argc, char** argv) { xn::Context context; xn::ScriptNode scriptNode; XnVSessionGenerator* pSessionGenerator; XnBool bRemoting = FALSE; if (argc > 1) { // remote mode context.Init(); printf("Running in 'Remoting' mode (Section name: %s)\n", argv[1]); bRemoting = TRUE; // Create multi-process client pSessionGenerator = new XnVMultiProcessFlowClient(argv[1]); XnStatus rc = ((XnVMultiProcessFlowClient*)pSessionGenerator)->Initialize(); if (rc != XN_STATUS_OK) { printf("Initialize failed: %s\n", xnGetStatusString(rc)); delete pSessionGenerator; return 1; } } else { const char *fn = NULL; if (fileExists(SAMPLE_XML_FILE)) fn = SAMPLE_XML_FILE; else if (fileExists(SAMPLE_XML_FILE_LOCAL)) fn = SAMPLE_XML_FILE_LOCAL; else { printf("Could not find '%s' nor '%s'. Aborting.\n" , SAMPLE_XML_FILE, SAMPLE_XML_FILE_LOCAL); return XN_STATUS_ERROR; } XnStatus rc = context.InitFromXmlFile(fn, scriptNode); if (rc != XN_STATUS_OK) { printf("Couldn't initialize: %s\n", xnGetStatusString(rc)); return 1; } // Create the Session Manager pSessionGenerator = new XnVSessionManager(); rc = ((XnVSessionManager*)pSessionGenerator)->Initialize(&context, "Click", "RaiseHand"); if (rc != XN_STATUS_OK) { printf("Session Manager couldn't initialize: %s\n", xnGetStatusString(rc)); delete pSessionGenerator; return 1; } // Initialization done. Start generating context.StartGeneratingAll(); } // Register session callbacks pSessionGenerator->RegisterSession(NULL, &SessionStart, &SessionEnd, &SessionProgress); // init & register wave control XnVWaveDetector wc; wc.RegisterWave(NULL, OnWaveCB); wc.RegisterPointUpdate(NULL, OnPointUpdate); pSessionGenerator->AddListener(&wc); printf("Please perform focus gesture to start session\n"); printf("Hit any key to exit\n"); //We initialize our ROS nodes and publishers here ros::init(argc, argv, "pointcontrol", ros::init_options::NoSigintHandler); ros::NodeHandle rosnode = ros::NodeHandle(); /* ros::Publisher pub = rosnode.advertise<jimmy::pointerpos>("point_location", 10); //publisher for hand XYZ positions jimmy::pointerpos msg; ros::Publisher pub_gestures = rosnode.advertise<jimmy::gestures>("detected_gestures", 10); //publisher for gesture booleans jimmy::gestures msg_gestures; */ ros::Publisher pub_single_servo = rosnode.advertise<std_msgs::Int16>("single_servo", 10); //publisher for gesture booleans std_msgs::Int16 msg_single_servo; // Main loop while (!xnOSWasKeyboardHit()) { if (bRemoting) { ((XnVMultiProcessFlowClient*)pSessionGenerator)->ReadState(); } else { context.WaitAnyUpdateAll(); ((XnVSessionManager*)pSessionGenerator)->Update(&context); //fill out the custom message fields with the placeholders we've previously defined /* msg.positionx = xpos; msg.positiony = ypos; msg.positionz = zpos; pub.publish(msg); msg_gestures.wave = wave; msg_gestures.hello = sess_start; msg_gestures.goodbye = sess_end; pub_gestures.publish(msg_gestures); */ if(wave){ int num = 1; msg_single_servo.data = num; pub_single_servo.publish(msg_single_servo); } //set gesture booleans back to false for re-initialization again wave = false; sess_start = false; sess_end = false; ros::spinOnce(); } } delete pSessionGenerator; return 0; }