Rosanswers logo

I am doing a school project which is a Kinect Robosapien project for the Robosapien to do my movements in front of the Kinect (google quick cheap robosapien 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 which is this:

import SimpleOpenNI.*;
SimpleOpenNI  context;
void setup()
  // instantiate a new context
  context = new SimpleOpenNI(this);
  // enable depthMap generation 
  // enable skeleton generation for all joints
  // create a window the size of the depth information
  size(context.depthWidth(), context.depthHeight()); 
void draw()
  // update the camera
  // draw depth image

  // for all users from 1 to 10
  int i;
  for (i=1; i<=10; i++)
    // check if the skeleton is being tracked
      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
// 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

  // 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
    println(" Failed to calibrate user !!!");
    // Start pose detection

Originally posted by Dylan8slb on ROS Answers with karma: 1 on 2013-04-13

Post score: 0


1 Answer 1


Rosanswers logo

I wonder, if you are actually using ROS? If yes, please state the distribution (e.g. Groovy) and system (e.g. Linux 64bit) you are using. If no, start using it! :-) My suggestion: start with the tutorials.

In any case, I can recommend you have a look at the OpenNI tracker. It uses the information from the Kinect and outputs transforms/poses for the various body parts (i.e. torso, head, hands etc.). If you want to store this data, you can use rosbag to do so.

PS: In case you have no interest in ROS at all, I recommend you use other sites for help, e.g. Stack Overflow. You probably get better help there, since this Q&A here is targeted at ROS-specific issues.

Originally posted by bit-pirate with karma: 2062 on 2013-04-14

This answer was ACCEPTED on the original site

Post score: 3


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.