2

I have two kinect sensors that are connected on different USB controllers. If I enable the skeleton stream on both of them, I get an exception when I call the start method on the second sensor:

This API has returned an exception from an HRESULT: 0x830100AA

The stack trace:

   at Microsoft.Kinect.KinectExceptionHelper.CheckHr(Int32 hr)
   at Microsoft.Kinect.NuiSensor.NuiInitialize(UInt32 dwFlags)
   at Microsoft.Kinect.KinectSensor.Initialize(SensorOptions options)
   at Microsoft.Kinect.KinectSensor.Start()

Why I'm not able to have skeletal tracking from both kinects?

P.S. I'm using Kinect for Windows SDK 1.5

Thanks!

VladN
  • 729
  • 1
  • 10
  • 29

2 Answers2

5

Just to clarify:

  • Tracking works from both Kinects. (tested with Microsoft SDK 1.6)
  • What you need to do is to connect the Kinects on a seperate USB Bus.

Also have a look at some of the examples in the SDK. In the 1.6 SDK there is an example called "Kinect Explorer" for managed code, which shows how to handle multiple Kinects safely.

Handling multiple Skeletons is not an easy task (if you want to detect if a user from kinect 1 ist the same user in kinect 2) you need to write your own logic.

rasmus
  • 66
  • 1
  • 2
2

If you are using multiple Kinect sensors, skeleton tracking works only on the first device that you Initialize (with the RuntimeOption for skeletal tracking). To switch the device being used to track, uninitialize the old one and initialize the new one.

Atul Verma
  • 2,012
  • 15
  • 8
  • 1
    Your idea is time consuming ... I know this because I've already tried it :) But my problem is why is not possible to have skeleton tracking for both sensors, under the same process? If I run separate processes for each kinect, the skeleton tracking works like a charm... – VladN Jun 20 '12 at 07:40
  • @Hubrus could you tell me how to make each of the two sensors runs on a different process please? – Tak Aug 13 '12 at 06:31
  • Simple. Create a project that starts one kinect (based on a parameter like the index of the kinect device in the list of kinect devices) and just use Process.Start for each kinect. Ex: `foreach (KinectDevice kDevice in kinectSensors){ ProcessStartInfo kinectProcess = new ProcessStartInfo(); kinectProcess.CreateNoWindow = true; kinectProcess.Arguments = kDevice.getUniqueId.ToString(); kinectProcess.FileName = "path_to_exe_file"; kinectProcesses.Add(Process.Start(kinectProcess)); }` – VladN Aug 21 '12 at 08:05