Processing! Kinect send is position x in x seconds

205 views Asked by At

I need a litle help here. I have a kinect working with processing using SimpleOpenNi library, and i just want the kinect send the position of a skeleton only 2 in 2 seconds for example. And if the position is the same as sent before don't do the action, is that possible? Thank You

1

There are 1 answers

1
Luca Davanzo On BEST ANSWER

Yes, you have to set a delay between a "send" and another.

In thread where you're reading values:

while(..) {
  Thread.sleep(2000); /* delay 2000ms => 2s */
  /* read value */
  /* if not the first iteration, save value in temp array */
  /* else check for each bone:  oldPos - epsilon < newPos < oldPos + epsilon */
}

To check if the previous positions is the same, you have to save skeleton positions in a temp var and check if new values is the same, maybe with a certaing neighborhood.

Unfortunately there is no other solution because on configuration file you can set only two kind of FPS (here there's a discussion about):

  • For color image
    FPS = 15 @ 1280x1024
    FPS = 30 @ 640x480

  • For depth FPS = 30 @ 640x480

In tag MapOutputMode of your configuration file:

<OpenNI>
  <Licenses>
    <License vendor="PrimeSense" key="0KOIk2JeIBYClPWVnMoRKn5cdY4="/>
  </Licenses>
  <Log writeToConsole="false" writeToFile="false">
    <LogLevel value="3"/>
    <Masks>
      <Mask name="ALL" on="true"/>
    </Masks>
    <Dumps></Dumps>
  </Log>
  <ProductionNodes>
    <Node type="Depth" name="Depth1">
      <Configuration>
        <MapOutputMode xRes="640" yRes="480" FPS="30" />
        <Mirror on="false"/>
      </Configuration>
    </Node>
    <Node type="User"/>
    <Node type="Gesture"/>
    <Node type="Hands"/>
  </ProductionNodes>
</OpenNI>