Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

USB Extenders / Extensions #427

Closed
wes-b opened this issue Jun 20, 2019 · 30 comments
Closed

USB Extenders / Extensions #427

wes-b opened this issue Jun 20, 2019 · 30 comments
Assignees
Labels
Bug Something isn't working

Comments

@wes-b
Copy link
Contributor

wes-b commented Jun 20, 2019

USB Extenders are a nice tool for connecting multiple devices to 1 PC or to extend the distance between the host PC and the Azure Kinect.

While USB technology is implemented everywhere and generally easy to use, it can also come with its own quirks when trying to connect a lot of devices or trying to use a cable length that is longer than the USB specification intended it to be used for. In the case of the Azure Kinect it internally has USB 2.0 and USB 3.0 hubs. The 7 MIC array is attached to the USB 2.0 hub while both the color camera and depth camera are connected to the USB 3.0 hub. To complicate matters USB 2.0 has response time requirements that make extenders harder to use as they have to find ways to minimize the response delays while trying to add greater cable lengths. As a result it is difficult to extend the cable length of a USB device.

The plan is to update this topic as more information about extenders becomes available.

Failure Class 1 – Container ID changes

One class of failures is that some USB Extenders implement a USB hub within their cable. When the hub firmware reports the hub port is not user connectable, it allows the Windows USB stack to treat children connected to it as hard wired to the hub and implies the port cannot be detached from the hub. When this happens Windows assigns the hubs Container ID to all children because it thinks they are 1 monolithic device. The Windows platform needs these container ID’s to match the container ID’s embedded in the device descriptor so that when a depth camera is opened, the color camera on the same device can also be opened.

This can be confirmed with the USBView tool (downloadable from Microsoft) where the hub port has the property is Is Port User Connectable: no.

The error pattern generated from Azure Kinect logs would look like this if you are hitting this problem

[error] [t=0] ..\..\src\color\mfcamerareader.cpp (###): RuntimeClassInitialize(). Failed to find color camera in open camera: 0xc00d36d5
[error] [t=0] ..\..\src\color\color.cpp (##): SUCCEEDED( Microsoft::WRL::MakeAndInitialize<CMFCameraReader>(&color->m_spCameraReader, (GUID *)container_id)) returned failure in color_create()
[error] [t=0] ..\..\src\sdk\k4a.c (###): color_create( device->tick_handle, container_id, serial_number, color_capture_ready, handle, &device->color) returned failure in k4a_device_open()

To work around this issue, the SDK can be recompiled to use the first color camera it finds regardless of the container ID. The drawback to this solution is that the SDK will only support 1 Azure Kinect at a time. Look at the function FindEdenColorCamera in mfcamerareader.cpp.

@wes-b wes-b added Bug Something isn't working Triage Needed The Issue still needs to be reviewed by Azure Kinect team members. labels Jun 20, 2019
@wes-b wes-b closed this as completed Jun 20, 2019
@wes-b wes-b removed the Triage Needed The Issue still needs to be reviewed by Azure Kinect team members. label Jun 20, 2019
@wes-b wes-b self-assigned this Jun 20, 2019
@tim-depthkit
Copy link

I'd like to use active USB extenders like the Icron Spectra 3001-15 or Icron Spectra 3022. It appears that these extenders do not preserve the container ID as you describe, which is evident by several missing devices when looking at the Azure Kinect in the connection ID view in Device Manager.

I've not yet tried the suggested work-around to modify the SDK, but I'll post here with test results after doing so.

If it works, it would be nice if the SDK allowed the user to choose which method is used to connect to the USB device: either using the first color camera found, or by container ID. This would allow for the most flexibility in deployments of the device where it is not feasible to have the host computer close to the sensor.

@valentinptc
Copy link

Have you found some updates for making active USB extension cables work for multiple cameras? Or have you found an active extension cable that does not implement an USB hub?

@wes-b
Copy link
Contributor Author

wes-b commented Jul 11, 2019

I have not, but I am hoping we hear about more from the community. Our testing is limited to what I can borrow and far from complete.

@valentinptc
Copy link

valentinptc commented Jul 11, 2019

We tested a couple of cables today and found a 10 Meters/32.8 Feet active extension cable that worked:
https://www.amazon.com/gp/product/B00DMFFL2W/

I hope that helps you guys as well.

@tylergibson
Copy link

@valentinptc I am using these cables as well, they work great for data. But I can't seem to get the Kinect to use them for power. I use the original AC adapter with a USB A to 5.5mm barrel adapter to supply input power to the active cable, and have a USB power meter connected to output - Confirmed polarity is correct and current draw is correct.

But when I connect it to the Kinect using the USB A to C cable, it only draws the base amperage and I get the flashing amber light (even though there is PLENTY of power available to it). Is this a handshake issue for power delivery? Any resolution here?

@wes-b
Copy link
Contributor Author

wes-b commented Aug 20, 2019

The spec for USB A to C is not sufficient to power the Kinect alone and the reason for the supplemental power via the barrel connector. To power without a barrel connector you must use USB C to C.

@RoseFlunder
Copy link

We are also searching for some longer (at least 4m) USB C to C cables to connect multiple kinects to a single PC. My university will order one of these for testing:
https://www.amazon.de/Tether-Tools-TetherPro-USB-Datenkabel-gerader/dp/B079WWSR5G/

I could confirm its working after it gets delivered.

@taeinkwon
Copy link

Hi, Do you know any compatible USB A-C cables for Kinect? Maybe more than 5 m? I tested with "[Baseus 3A Artistic Striped Series (A - C, 5m)" cable but my computer can not recognize the device when I use this cable. I also use the original power supply cable with this one. Are their any constraints for the cable?

@UnaNancyOwen
Copy link
Contributor

By the way, I want a spare cable for supply sub-power.
Do you know product specification of this connector?

@wes-b
Copy link
Contributor Author

wes-b commented Sep 9, 2019

By the way, I want a spare cable for supply sub-power.
Do you know product specification of this connector?

Here you go: #745

@alan-newnex
Copy link

Check this A to C active cable out, https://www.ntcdistributing.com/usb-3-1/active-extension-cable/firenex-ulink-c-active-cable-a-m-to-c-m-8-m-and-16-m/
It's tested to extend Azure Kinect up to 16m.
https://www.newnex.com/technology-azure-kinect-extension.php

@tylergibson
Copy link

@alan-newnex - Does this cable also carry power, or just data? In my testing no A-C cable can carry enough amperage, only C-C can delivery the required power.

I am currently using https://www.amazon.com/Cable-Matters-Active-Extension-Female/dp/B00DMFFL2W/ref=sr_1_3?keywords=cable+matters+usb+extender+powered&qid=1570839947&sr=8-3

These from Cable Matters, and using an AC extension cord to the 5vdc power supply with a DC splitter to power the extension cable (using yet another plug adapter) and the Kinect (with a plug adapter from Aliexpress). Not pretty at all, but very inexpensive (total cost of about 60 dollars per camera) gets me a bit over 10m of distance per camera.

@yuemasy
Copy link

yuemasy commented Dec 3, 2019

@alan-newnex - Does this cable also carry power, or just data? In my testing no A-C cable can carry enough amperage, only C-C can delivery the required power.
I am currently using https://www.amazon.com/Cable-Matters-Active-Extension-Female/dp/B00DMFFL2W/ref=sr_1_3?keywords=cable+matters+usb+extender+powered&qid=1570839947&sr=8-3
These from Cable Matters, and using an AC extension cord to the 5vdc power supply with a DC splitter to power the extension cable (using yet another plug adapter) and the Kinect (with a plug adapter from Aliexpress). Not pretty at all, but very inexpensive (total cost of about 60 dollars per camera) gets me a bit over 10m of distance per camera.

@tylergibson, thanks for providing this solution. it's very attractive. I would like to double check that Kinect will be connected to the cable's type A female, and the cable need an extra power supply. Kinect will use its original plug adapter to supply power for itself. So I need to buy the cable and another power adapter, right? Thank you very much.

@tylergibson
Copy link

@yuemasy yep correct

@ibrachahine
Copy link

My team and I have bought a USBC(M)-USBA(M) passive cable of 4.6 meters and a USBA(F)-USBA(M) extender and the combination works perfectly even for 30fps.

USBC(M)-USBA(M) used:
https://www.bol.com/nl/p/tether-tools-cuc3215-org-usb-kabel-4-6-m-3-2-gen-1-usb-a-usb-c-oranje/9200000086904005/?bltgh=m89teua-f2dL9aDNvhBNOA.1_4.6.ProductTitle

USBA(F)-USBA(M) used:
https://www.bol.com/nl/p/tether-tools-cu3017-usb-kabel-5-m-3-2-gen-1-usb-a-oranje/9200000039912899/?bltgh=m89teua-f2dL9aDNvhBNOA.1_4.10.ProductTitle

In europe, it is harder to find reliable cables of high quality compared to the US. You have to be lucky.

N.B. Microsoft does not yet support extenders for Kinect.

@reneschulte
Copy link
Contributor

What is the Kinect team using? No need for an approved of official cable recommendation, just want to know what works and what does not.

@alan-newnex
Copy link

@alan-newnex - Does this cable also carry power, or just data? In my testing no A-C cable can carry enough amperage, only C-C can delivery the required power.

I am currently using https://www.amazon.com/Cable-Matters-Active-Extension-Female/dp/B00DMFFL2W/ref=sr_1_3?keywords=cable+matters+usb+extender+powered&qid=1570839947&sr=8-3

These from Cable Matters, and using an AC extension cord to the 5vdc power supply with a DC splitter to power the extension cable (using yet another plug adapter) and the Kinect (with a plug adapter from Aliexpress). Not pretty at all, but very inexpensive (total cost of about 60 dollars per camera) gets me a bit over 10m of distance per camera.

The Newnex cable https://www.amazon.com/dp/B0113Q0V4E is bus powered, so there is no need for any external power source to drive the repeater circuit.

@alan-newnex
Copy link

alan-newnex commented Dec 20, 2019

Newnex has also released a 10m (33 ft.) active cable that supports USB Power Delivery for Kinect Azure. https://www.ntcdistributing.com/usb-repeater/active-cable/usb-c-to-usb-c-active-cable-for-azure-kinect-with-pd-10m/
With this cable, a user only needs one cable from a USB-C host to the Kinect, it doesn't need extra USB power input, which is extremely desired when a user is trying to extend the Kinect.

@tylergibson
Copy link

@alan-newnex that's awesome! The price is unfortunately a bit prohibitive for me as a hobbyist, but looks like a super solid commercial solution :)

@BoumaMenno
Copy link

@ibrachahine I'm also looking for a solution for this from the netherlands. Did you try to connect multiple camera's and did that work? And you did you into any other problems in the meantime?

@metervara
Copy link

We used these cables on a project with two kinects:
https://www.bhphotovideo.com/c/product/1545201-REG/vaddio_440_1005_051_usb_3_0_active_optical.html

They're expensive but work great. These do not power the kinects though, so we still use the dedicated power supply.

@SaraHackett13
Copy link

Does this mean that USB 3.0 hubs cannot be used to support multiple Azure Kinect devices? I plan to use a USB 3.0 hub to connect each camera to a single PC. But I will power each camera with the power cable/adapter that comes with the Kinect. Is this feasible?

@tim-depthkit
Copy link

You may run into USB bandwidth issues if running multiple Azure Kinects from a single USB3.0 hub, as the hub will need to share bandwidth amongst all connected devices. Ideally each Azure Kinect would have a dedicated full speed USB 3.0 connection (5 Gbps). We've had success with the this PCIe card that provides 4 full speed ports by utilizing two controllers.

@Chris45215
Copy link

Cable length has always been a challenge when I have used the devices - though sometimes it's the power cable's length that is the bigger issue. We find that the sensors work best when mounted above head height. But the power cable is only 5 feet long - so we have always needed power extension cables. We don't want to put strain on the power cable or connection within the sensor, so we usually end up with something taped to a wall or tripod. That's far from ideal.

If Microsoft releases a subsequent version of the sensors, a longer power cable would be very welcome. Also, a power brick that doesn't cover multiple outlets would be a major improvement too. The current power brick covers 2 outlets by itself, and the cable sticking out further means that it actually covers 3 outlets along a power strip. Please at least have the cable stick straight out (like Apple arranges it with all their chargers), rather than up or downwards, so the unit only takes the space of 2 plugs.

It may seem like a small issue, but it becomes a significant hindrance when setting up numerous sensors.

@gdosu
Copy link

gdosu commented Dec 2, 2020

To work around this issue, the SDK can be recompiled to use the first color camera it finds regardless of the container ID.

May I take some advice on this part? I just copied git and trying to change value so any little tips would be appreciate.

@greatwallet
Copy link

greatwallet commented Mar 8, 2021

We are also searching for some longer (at least 4m) USB C to C cables to connect multiple kinects to a single PC. My university will order one of these for testing:
https://www.amazon.de/Tether-Tools-TetherPro-USB-Datenkabel-gerader/dp/B079WWSR5G/

I could confirm its working after it gets delivered.

Have you got any results?

@greatwallet
Copy link

Newnex has also released a 10m (33 ft.) active cable that supports USB Power Delivery for Kinect Azure. https://www.ntcdistributing.com/usb-repeater/active-cable/usb-c-to-usb-c-active-cable-for-azure-kinect-with-pd-10m/
With this cable, a user only needs one cable from a USB-C host to the Kinect, it doesn't need extra USB power input, which is extremely desired when a user is trying to extend the Kinect.

I don't have any USB-C port on my host, so does an usb-A to usb-C converter work in this case?

@alan-newnex
Copy link

Newnex has also released a 10m (33 ft.) active cable that supports USB Power Delivery for Kinect Azure. https://www.ntcdistributing.com/usb-repeater/active-cable/usb-c-to-usb-c-active-cable-for-azure-kinect-with-pd-10m/
With this cable, a user only needs one cable from a USB-C host to the Kinect, it doesn't need extra USB power input, which is extremely desired when a user is trying to extend the Kinect.

I don't have any USB-C port on my host, so does an usb-A to usb-C converter work in this case?

Unfortunately no, only a native USB-C port will be able to support PD feature. It will keep the data transfer, but you will still need to connect the USB power adapter for the power.

@greatwallet
Copy link

Newnex has also released a 10m (33 ft.) active cable that supports USB Power Delivery for Kinect Azure. https://www.ntcdistributing.com/usb-repeater/active-cable/usb-c-to-usb-c-active-cable-for-azure-kinect-with-pd-10m/
With this cable, a user only needs one cable from a USB-C host to the Kinect, it doesn't need extra USB power input, which is extremely desired when a user is trying to extend the Kinect.

I don't have any USB-C port on my host, so does an usb-A to usb-C converter work in this case?

Unfortunately no, only a native USB-C port will be able to support PD feature. It will keep the data transfer, but you will still need to connect the USB power adapter for the power.

Does this cable support thunderbolt 3 port? If it does, will it be okay if the laptop remain uncharged when connecting the camera via this cable?

@noorfatma
Copy link

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Bug Something isn't working
Projects
None yet
Development

No branches or pull requests