Now using 3D sensing technologies for my research activities, I’ve worked so far with well-known Microsoft Kinect and Asus Xtion cameras, both offering comparable technical characteristics, the latter being substantially more practical to use due to its limited size, but the former being definitely more USB 3.0-friendly, which is now a requirement for most recent computers without USB 2.0 ports. Anyway, although these sensors show decent performance for rather general applications, their depth sensing abilities are quite limited both in terms of resolution and range.
Looking fopr alternative depth sensors, I recently came across time-of-flight cameras from Belgian company SoftKinetic, and especially the DepthSense 325 designed for close-range observation, see for instance their YouTube video for a short (simplistic) technical comparison with Microsoft Kinect, also skip the part starting at 3:00 where they demonstrate their $1500 proprietary software. The camera itself is rather affordable, though, so the main question was more whether it would be technically be able to use it or not, fortunately an SDK for Linux has been made available mid-2013 and regularly updated since then, so I decided to give it a try!
Having received it just a few days after ordering it online, I quickly ran a few tests on my personal computer, which went fine. On another hand, the computer in question is running an old version of Ubuntu (which is actually a “good” thing as the SDK isn’t supporting recent releases, as reported by many users on SoftKinetic’s forum) and offers USB 2.0 ports (same remark). However, what I was more interested in knowing was whether the camera would be compatible my daily work computer’s Arch Linux and USB 3.0-only ports. Long story short, it eventually was, but getting everything to work was not so straightforward.
SoftKinetic’s products being rather unknown compared to Microsoft’s, they have unfortunately not attracted much attention by the open source community yet, so for now, we still have to stick to the proprietary drivers. At the time of writing this blog post, three files are available for download: precompiled binaries gathered in a tar.gz archive dated November 2013 (four months ago), or in .deb or .rpm packages last updated on January 31st 2014 (two weeks ago). After going through the process of installing the latter on Arch (see my GitHub repository for a tentative PKGBUILD), running the DepthSenseViewer demo program made it crash instantly with quite an obscure error message: “Unable to receive message (connection broken by peer)”. Of course with no further information in the console, else it would be no fun, would it? Now, using the four-month-old binaries yielded the same error, but with more details:
DepthSenseServer log started Tue Feb 11 17:36:07 2014
Tue Feb 11 17:36:07 2014: [00007dac]: INFO: DepthSenseServer version 126.96.36.1998 linux64 gcc (Release)
Tue Feb 11 17:36:07 2014: [00007dac]: INFO: logging to STDERR
Tue Feb 11 17:36:07 2014: [00007dad]: INFO: using default connection timeout
Tue Feb 11 17:36:07 2014: [00007dad]: INFO: listening on port 6909
Tue Feb 11 17:36:07 2014: [00007dae]: WARNING: Initialization Exception: no enumerator found, some dll files are missing
Tue Feb 11 17:36:07 2014: [00007dae]: ERROR: no enumerator found, some dll files are missing
Tue Feb 11 17:36:07 2014: [00007dae]: INFO: number of connections: 0
Apparently, this problem has been around for some time, as reported on SoftKinetic’s official forums, but for some reason, the official position seems to support Ubuntu 12.04 only. Anyway, a user named bzk found out this problem
was is still due to a library problem, more specifically to the fact that the precompiled binaries rely on an outdated version of libudev.so.0, and won’t work with recent versions. From there, you need to retrieve the libraries that were used at the time of Ubuntu 12.04 (which you can find here), add them to your LD_LIBRARY_PATH, and voilà, you’re set for great depth sensing adventures!