Category Archives: leap motion

VibraGlove V3 – no more serial port

vibraglovev3

Thanks to the Intel Galileo board, I can remove the wired part of the system. No more serial port, no more special buffering functions, a huge load off the implementation.

Whats different

The Galileo board now sits on the same network as the client pc. It runs an simple web server at port 80. It reads requests from an incoming client connection. The client PC, connected to the Leap Motion, continuously polls the Galileo board by sending a GET request with the calculated PWM values. The Galileo board received the request, parses out the PWM values and send that data to the assigned PWM pins that control the feedback to each finger.

I also put in a lot of special feedback functions. Instead of simple strength values, i can now code it to accept specif patters of vibration.

There is no More Serial driver, so the NodeJS app i wrote that accepts GET requests and translates them into serial data is no more.

Super sampling Leap Motion tracking data

With the sample size set to 50, motion is super fluid…but ridiculously laggy :)

Here is a really hacky function i put together to test out the lag i was experiencing with the Z axis, but i thought i would apply it to all the currently tracked fingers.

There are 3 public variables:

previosFrame

Has all the data from the leap motion controller

rawFrameData

Is a FILO Stack of finger data from each previous frame

stableFrameData

Is an array of [x,y,z] data for each finger. This is used as the stabilized tracking data instead of fingers[xx].stabilizedTipPosition[x,y,z]

By setting the

numberOfSamples

Variable you can set the super sampling size. 5-8 is pretty smooth. 10-20 is laggy but very smooth. 50 is ridiculously fun! as demonstrated in the video.

function stabilize()
{ 
 if(previousFrame.hands.length)
 {
 var numberOfSamples = 8;
 if(rawFrameData.length<numberOfSamples)
 {
 rawFrameData.push( previousFrame.hands[0].fingers );
 }
 else
 {
 rawFrameData.splice(0,1);
 rawFrameData.push( previousFrame.hands[0].fingers );
 }
 stableFrameData = [[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]];
 for(rawFrameCnt=0; rawFrameCnt<rawFrameData.length; rawFrameCnt++)
 {
 stableFrameData[0][0]+=rawFrameData[rawFrameCnt][0].tipPosition[0];
 stableFrameData[0][1]+=rawFrameData[rawFrameCnt][0].tipPosition[1];
 stableFrameData[0][2]+=rawFrameData[rawFrameCnt][0].tipPosition[2];
 stableFrameData[1][0]+=rawFrameData[rawFrameCnt][1].tipPosition[0];
 stableFrameData[1][1]+=rawFrameData[rawFrameCnt][1].tipPosition[1];
 stableFrameData[1][2]+=rawFrameData[rawFrameCnt][1].tipPosition[2];
 stableFrameData[2][0]+=rawFrameData[rawFrameCnt][2].tipPosition[0];
 stableFrameData[2][1]+=rawFrameData[rawFrameCnt][2].tipPosition[1];
 stableFrameData[2][2]+=rawFrameData[rawFrameCnt][2].tipPosition[2];
 stableFrameData[3][0]+=rawFrameData[rawFrameCnt][3].tipPosition[0];
 stableFrameData[3][1]+=rawFrameData[rawFrameCnt][3].tipPosition[1];
 stableFrameData[3][2]+=rawFrameData[rawFrameCnt][3].tipPosition[2];
 stableFrameData[4][0]+=rawFrameData[rawFrameCnt][4].tipPosition[0];
 stableFrameData[4][1]+=rawFrameData[rawFrameCnt][4].tipPosition[1];
 stableFrameData[4][2]+=rawFrameData[rawFrameCnt][4].tipPosition[2];
 }
 for(rawFrameCnt=0; rawFrameCnt<stableFrameData.length; rawFrameCnt++)
 {
 stableFrameData[rawFrameCnt][0]=stableFrameData[rawFrameCnt][0]/rawFrameData.length;
 stableFrameData[rawFrameCnt][1]=stableFrameData[rawFrameCnt][1]/rawFrameData.length;
 stableFrameData[rawFrameCnt][2]=stableFrameData[rawFrameCnt][2]/rawFrameData.length;
 }
 }
}

Leap Motion – Z Axis Issues UPDATED

Reading the Stabilized Z position of the fingers and hands is very lagy. Watch the video..May be an issue with the current SDK.

ztrackingfaulst

 

For some reason the Stabilized Z data is very slow to calculate. If you watch the video and note the Stabilized Z vs just the RAW Z data its miles behind.

In fact I think this issue has been ongoing, as most of the stuff i have tried to code with the Z axis, I have always ran into issues lag issues! Looking back i have abandoned heaps of ideas because of this, as i though it was just my bad coding! Lets hope this is a bug!

UPDATE: This is actually a feature not a bug!

 

 

May have to abandon dual hand interaction

I spent a few hours trying to get smooth operation of some kind using both hands on the leap motion. However i was not able to get reliable results. My left hand would get tired of holding still and move off spot. I decided to at least focus on the detailed control and manipulation with 1 hand and have the left hand use the keyboard.  For example. . In the video above, I’m using the keys:

A = Width S = Height D = Depth F = Location

If one is being held down, i can use the right hand to select the object by hovering over it and adjust its values by moving the thumb and index finger together or further apart.

Real-time shape manipulation with Leap Motion

X coordinates of Index-Thumb control the width, Y coordinates of Index-Thumb control the height and the Ring Finger+Middle finger X control the depth. I need to test the large version of this on a machine that’s not 5 years old.. I’m running into serious performance issues when rendering more than 10 SVGs but that is totally expected.

X & Y done for SVG still working on Z

hypnowowThis is a small example of the SVG code im working on. The screen has 2 sets of bands that center in the middle. Left and Right are controlled via the Y coordinates of each finger and the Top and Bottom are controlled by the X coordinate. I am working on manipulating the centre of all the polygons to simulate the Z coordinates….Here is a short video example:

The video is tad laggy, because my current dev machine is an old Thinkpad…cause i like it. Ill do a few other videos on a new machine later on

 

VibraGlove + “Pew” = Awesome

I’m testing out some stuff, and have created this nifty little app. When you touch a blob it grows(and at the same time makes a charge-up sound).  The finger you touch with, has its PWM value increased up to maximum until the finger has been touching the blob for a set timeout. Then the blob is deleted, a pew sound is played, and 2 new blobs are created at random spots close to where the original was. If you hold all 5 fingers over a set of blobs or one large blob, it/they are deleted and Pew..pew…..pew……pew echo is played…

Internet Explorer – CSS and Audio Failure

iefailsThe new IE is pretty good, how ever it still fails at rendering rounded CSS borders and playing WAVs…WAVS!!! Camon Microsoft!

I have added some sound effects into this Demo. When you touch a floating blob you get a  and when one of the blobs disappears you get a . And yes I made the sound effects myself!