ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question
0

How to use multiple kinects on the same USB 2.0 bus

asked 2012-04-12 21:12:36 -0600

this post is marked as community wiki

This post is a wiki. Anyone with karma >75 is welcome to improve it.

Hi everybody, I got two questions about kinect driver (OpenNI,freeKinect under Ubuntu or even Kinect SDK under windows, what ever works. Kinect here refers to Kinect for Xbox, not Kinect for windows which is more expensive but support up to 4 kinect on same PC)

Al though I got 3 independent USB 2.0 BUS, when I connect 2 Kinects to my PC, they always goes to the same USB BUS

1 is it possible to shut down Kinect_1 temporarily, to get IR streams from Kinect_2 on the same USB bus? For example, I want to do the 3D 360 degree scan, and I need 3 kinects to work together, but I only need them to work in 3 frames (which lasts about 0.1 second), each gives out 1 frame of point cloud.

2 is it possible to reduce the information that sent from kinect to PC, so that I can use several kinect at the same time without any one of them using up the bandwidth? For example, to do the 3D 360 degree scan, I only need 3 different point clouds from 3 different angles of the same object, but not anything else like RGB stream.

part of my lsusb results(to make sure I really had 3 usb 2.0 bus on my laptop):


Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
edit retag flag offensive close merge delete

4 Answers

Sort by » oldest newest most voted
0

answered 2012-04-17 06:44:59 -0600

As far as I know, this would require modifying some stuff in openni_camera. Perhaps eventually USB3.0 will be supported and we won't have to worry about saturating a single USB bus anymore.

If you do end up modifying the driver to meet your needs in a reusable way, make sure to submit a patch. I'm sure this sort of thing would be useful to others.

edit flag offensive delete link more
0

answered 2013-04-15 23:01:47 -0600

Update to Ubuntu 12.10, in which USB 3.0 is solved... It is, in my opinion and experience, the fastest way to solve your problem.

Let us know about the results.

Bests regards,

Stéphane

edit flag offensive delete link more

Comments

I don't think this will solve the problem if he's only dealing with USB 2.0 root hubs?

Philip gravatar image Philip  ( 2013-04-16 00:32:13 -0600 )edit

For me, it made the difference, even on usb 2.0... But if phillip is right (and I'm sure he is), then maybe both the gestion of usb bandwith and the driver have been changed in 12.10 ?... To be continued...

Stephane.M gravatar image Stephane.M  ( 2013-04-16 00:50:59 -0600 )edit
0

answered 2013-04-16 00:30:41 -0600

this post is marked as community wiki

This post is a wiki. Anyone with karma >75 is welcome to improve it.

To my knowledge, the USB bandwidth allocation is handled between the driver of the respective device and the host OS. If you plug a device in, the driver asks for a certain amount of bandwidth. Based on the currently available bandwidth (total bandwidth minus bandwidth reserved for already connected devices, overhead, ...), the host OS either grants the bandwidth request of the new device or denies it, in which case it won't work.

EDIT: For additional information about bandwidth allocation, see here and here. And a bonus link on Kinect on USB 2.0 and 3.0.

So for solution 1, you'd need to dynamically disconnect one Kinect (unload driver, free bandwidth) in order to connect the next one. Solution 2 won't work without modifying the driver itself.

Regarding your laptop, it's possible that all external USB ports are internally connected to the same root hub.

edit flag offensive delete link more
0

answered 2013-08-11 03:25:54 -0600

Each Kinect needs a separate USB bus dedicated to it. That's not USB ports it actual circuits. I've tried powered USB hubs to see if that helps but it's the bus addressing that's the key. I'm running two Kinects on my macBook Pro (2006). THe only other thing might be to get a good PCI-E USB card running USB 3. That might work on a PC. But it needs separate bus addresses for each camera. Remember you can have a USB hub with a lot of ports on one bus. That doesn't help.

edit flag offensive delete link more

Question Tools

2 followers

Stats

Asked: 2012-04-12 21:12:36 -0600

Seen: 3,865 times

Last updated: Aug 11 '13