locked
How to save Skeleton Tracking Data of OpenNI RRS feed

  • Question

  • I am doing a school project which is this http://workshop.alea.net/8/quick-and-cheap-robot-kinect I can already track the Skeleton with my Kinect (for Xbox)  and I am using the OpenNI SDK and not the Microsoft Kinect for Windows SDK. I wanted to know how can I save the Skeleton Data and then transform that data into the commands for the Robosapien? I used the code in the Processing IDE that I got from http://learning.codasign.com/index.php?title=Skeleton_Tracking_with_the_Kinect which is this:
    import SimpleOpenNI.*;

    SimpleOpenNI  context;

    void setup()
    {
      // instantiate a new context
      context = new SimpleOpenNI(this);

      // enable depthMap generation
      context.enableDepth();

      // enable skeleton generation for all joints
      context.enableUser(SimpleOpenNI.SKEL_PROFILE_ALL);

      background(200,0,0);
      stroke(0,0,255);
      strokeWeight(3);
      smooth();

      // create a window the size of the depth information
      size(context.depthWidth(), context.depthHeight());
    }

    void draw()
    {
      // update the camera
      context.update();

      // draw depth image
      image(context.depthImage(),0,0);

      // for all users from 1 to 10
      int i;
      for (i=1; i<=10; i++)
      {
        // check if the skeleton is being tracked
        if(context.isTrackingSkeleton(i))
        {
          drawSkeleton(i);  // draw the skeleton
        }
      }
    }

    // draw the skeleton with the selected joints
    void drawSkeleton(int userId)
    { 
      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); 
    }

    // Event-based Methods

    // when a person ('user') enters the field of view
    void onNewUser(int userId)
    {
      println("New User Detected - userId: " + userId);

    // start pose detection
      context.startPoseDetection("Psi",userId);
    }

    // when a person ('user') leaves the field of view
    void onLostUser(int userId)
    {
      println("User Lost - userId: " + userId);
    }

    // when a user begins a pose
    void onStartPose(String pose,int userId)
    {
      println("Start of Pose Detected  - userId: " + userId + ", pose: " + pose);

      // stop pose detection
      context.stopPoseDetection(userId);

      // start attempting to calibrate the skeleton
      context.requestCalibrationSkeleton(userId, true);
    }

    // when calibration begins
    void onStartCalibration(int userId)
    {
      println("Beginning Calibration - userId: " + userId);
    }

    // when calibaration ends - successfully or unsucessfully
    void onEndCalibration(int userId, boolean successfull)
    {
      println("Calibration of userId: " + userId + ", successfull: " + successfull);

      if (successfull)
      {
        println("  User calibrated !!!");

        // begin skeleton tracking
        context.startTrackingSkeleton(userId);
      }
      else
      {
        println("  Failed to calibrate user !!!");

        // Start pose detection
        context.startPoseDetection("Psi",userId);
      }
    }
    Mostrar conteúdo cortado
    Eu estou fazendo um projeto da escola que é esse http://workshop.alea.net/8/quick-and-cheap-robot-kinect já posso acompanhar o meu esqueleto com Kinect (para Xbox) e eu estou usando o SDK OpenNI e não o Kinect da Microsoft para o Windows SDK. Eu queria saber como posso salvar os dados do esqueleto e depois transformar esses dados em comandos para o Robosapien? Eu usei o código no IDE Processamento de que eu tenho de http://learning.codasign.com/index.php?title=Skeleton_Tracking_with_the_Kinect que é esta:
    importar SimpleOpenNI *.;

    Contexto SimpleOpenNI;

    void setup ()
    {
    / / Instanciar um novo contexto
    contexto = new SimpleOpenNI (this);

    / / Permitir a geração depthMap
    . contexto enableDepth ();

    / / Ativar a geração de esqueleto para todas as articulações
    . contexto enableUser (SimpleOpenNI. SKEL_PROFILE_ALL);

    fundo (200, 0, 0);
    acidente vascular cerebral (0, 0, 255);
    strokeWeight (3);
    alisar ();

    / / Criar uma janela do tamanho da informação de profundidade
    tamanho (. context. depthWidth (), o contexto depthHeight ());
    }

    anular draw ()
    {
    / / Atualiza a câmera
    . contexto atualizar ();

    / / Desenha imagem de profundidade
    imagem (context. depthImage (), 0, 0);

    / / Para todos os usuários 1-10
    int i;
    for (i = 1; i <= 10; i + +)
    {
    / / Verificar se o esqueleto está sendo monitorado
    if (isTrackingSkeleton context. (i))
    {
    drawSkeleton (i) / / desenhar o esqueleto
    }
    }
    }

    / / Desenha o esqueleto com as articulações selecionados
    drawSkeleton void (userId int)
    {
    . contexto drawLimb (userId, SimpleOpenNI SKEL_HEAD, SimpleOpenNI SKEL_NECK..);

    . contexto drawLimb (userId, SimpleOpenNI SKEL_NECK, SimpleOpenNI SKEL_LEFT_SHOULDER..);
    . contexto drawLimb (userId, SimpleOpenNI SKEL_LEFT_SHOULDER, SimpleOpenNI SKEL_LEFT_ELBOW..);
    . contexto drawLimb (userId, SimpleOpenNI SKEL_LEFT_ELBOW, SimpleOpenNI SKEL_LEFT_HAND..);

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

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

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

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

    / / Evento métodos baseados

    / / Quando uma pessoa ('user') entra no campo de visão
    vazio onNewUser (userId int)
    {
    println ("Novo Usuário Detectado - userId:" userId +);

    / / Iniciar representar detecção
    startPoseDetection contexto ("Psi", userId).;
    }

    / / Quando uma pessoa ('user') deixa o campo de visão
    vazio onLostUser (userId int)
    {
    println ("Usuário Lost - userId:" userId +);
    }

    / / Quando o usuário começa a pose
    onStartPose vazio (String pose, userId int)
    {
    println ("Início de Pose Detectado - userId:" + userId + ", pose:" + pose);

    / / Parar de posar de detecção
    stopPoseDetection contexto (userId).;

    / / Iniciar a tentativa para calibrar o esqueleto
    requestCalibrationSkeleton contexto (userId, true).;
    }

    / / Quando começa a calibração
    onStartCalibration void (userId int)
    {
    println ("Calibração começo - userId:" userId +);
    }

    / / Quando calibaration termina - com sucesso ou unsucessfully
    onEndCalibration void (userId int, boolean com sucesso)
    {
    println ("Calibração de userId:" + userId + ", com sucesso:" + com sucesso);

    if (bem sucedida)
    {
    println ("Usuário calibrado!");

    / / Iniciar o acompanhamento esqueleto
    startTrackingSkeleton contexto (userId).;
    }
    outro
    {
    println ("Falha ao calibrar usuário!");

    / / Começa representar detecção
    startPoseDetection contexto ("Psi", userId).;
    }
    }
     

    Dylan8slb

    Tuesday, April 2, 2013 2:48 PM

All replies

  • This forum is for questions about the Microsoft Kinect for Windows SDK. You'll likely need to go elsewhere for OpenNI support.


    John | Kinect for Windows development team

    Tuesday, April 2, 2013 6:36 PM