#### Howdy, Stranger!

We are about to switch to a new forum software. Until then we have removed the registration on this forum.

# How to get the x position of the Average Point Tracking so as to control servos on an arduino ?

edited October 2015 in Kinect

Hello Guys, I am wondering how can i get the x position of the average point tracking on openkinect lib so as to control servos on a arduino. I am using processing 3, i didn't find any tuto about it, and i'm a novice at it. Here's the code // Daniel Shiffman // Tracking the average location beyond a given depth threshold // Thanks to Dan O'Sullivan

``````// https://github.com/shiffman/OpenKinect-for-Processing
// http://shiffman.net/p5/kinect/

import org.openkinect.freenect.*;
import org.openkinect.processing.*;

// The kinect stuff is happening in another class
KinectTracker tracker;
Kinect kinect;

void setup() {
size(640, 520);
kinect = new Kinect(this);
tracker = new KinectTracker();
}

void draw() {
background(255);

// Run the tracking analysis
tracker.track();
// Show the image
tracker.display();

// Let's draw the raw location
PVector v1 = tracker.getPos();
fill(50, 100, 250, 200);
noStroke();
ellipse(v1.x, v1.y, 20, 20);

// Let's draw the "lerped" location
PVector v2 = tracker.getLerpedPos();
fill(100, 250, 50, 200);
noStroke();
ellipse(v2.x, v2.y, 20, 20);

// Display some info
int t = tracker.getThreshold();
fill(0);
text("threshold: " + t + "    " +  "framerate: " + int(frameRate) + "    " +
"UP increase threshold, DOWN decrease threshold", 10, 500);
}

// Adjust the threshold with key presses
void keyPressed() {
int t = tracker.getThreshold();
if (key == CODED) {
if (keyCode == UP) {
t+=5;
tracker.setThreshold(t);
} else if (keyCode == DOWN) {
t-=5;
tracker.setThreshold(t);
}
}
}
``````

In a second time i definitely need your help to link processing and arduino. Cheers guys !

Tagged:

• You miss the most important file, is the one called KinectTracker.

` // Daniel Shiffman // Tracking the average location beyond a given depth threshold // Thanks to Dan O'Sullivan

class KinectTracker {

// Depth threshold int threshold = 745;

// Raw location PVector loc;

// Interpolated location PVector lerpedLoc;

// Depth data int[] depth;

// What we'll show the user PImage display;

KinectTracker() { // This is an awkard use of a global variable here // But doing it this way for simplicity kinect.initDepth(); //kinect.enableMirror(true); // Make a blank image display = createImage(kinect.width, kinect.height, RGB); // Set up the vectors loc = new PVector(0, 0); lerpedLoc = new PVector(0, 0); }

void track() { // Get the raw depth as array of integers depth = kinect.getRawDepth();

``````// Being overly cautious here
if (depth == null) return;

float sumX = 0;
float sumY = 0;
float count = 0;

for (int x = 0; x < kinect.width; x++) {
for (int y = 0; y < kinect.height; y++) {

int offset =  x + y*kinect.width;
// Grabbing the raw depth
int rawDepth = depth[offset];

// Testing against threshold
if (rawDepth < threshold) {
sumX += x;
sumY += y;
count++;
}
}
}
// As long as we found something
if (count != 0) {
loc = new PVector(sumX/count, sumY/count);
}

// Interpolating the location, doing it arbitrarily for now
lerpedLoc.x = PApplet.lerp(lerpedLoc.x, loc.x, 0.3f);
lerpedLoc.y = PApplet.lerp(lerpedLoc.y, loc.y, 0.3f);
``````

}

PVector getLerpedPos() { return lerpedLoc; }

PVector getPos() { return loc; }

void display() { PImage img = kinect.getDepthImage();

``````// Being overly cautious here
if (depth == null || img == null) return;

// Going to rewrite the depth image to show which pixels are in threshold
// A lot of this is redundant, but this is just for demonstration purposes
for (int x = 0; x < kinect.width; x++) {
for (int y = 0; y < kinect.height; y++) {

int offset = x + y * kinect.width;
// Raw depth
int rawDepth = depth[offset];
int pix = x + y * display.width;
if (rawDepth < threshold) {
display.pixels[pix] = color(150, 50, 50);
} else {
display.pixels[pix] = img.pixels[offset];
}
}
}
display.updatePixels();

// Draw the image
image(display, 0, 0);
``````

}

int getThreshold() { return threshold; }

void setThreshold(int t) { threshold = t; } }`

Here is the most important part.