Linux で Microsoft Xbox One Kinect センサーを使ってみました

先週からスマホカメラUSBカメラ×2台Kinect 360 と深度マップ撮影をやっていて、とうとう Kinect One の購入に至ったので書いておきます。

新品が到着

Amazon で Kinect One 本体専用の電源・USBアダプターを購入しました。本体が1,4000円に対して電源・USBアダプターが5250円というのはなかなかのお値段バランス。

Xbox One Kinect センサー (アフィリエイトなし)

Xbox One Kinect センサー用 Windows PCアダプター 9J7-00007 (アフィリエイトなし)

ちなみに、Kinect 360 (v1) と Kinect One (v2) の違いについては次のページが詳しいです。

udev 設定

環境によるのかもしれませんが、Kinect 360 (v1) はホストマシンと USB 接続するとそのまま利用できていました。今回の Kinect One (v2) では、一般ユーザ権限で Kinect を使うのに udev の設定が必要だったので書いておきます。

root 権限で /lib/udev/rules.d/90-kinect2.rules を新規作成し、公式にある次の内容を記述します。

# this file belongs in /etc/udev/rules.d/
# ATTR{product}=="Kinect2"
SUBSYSTEM=="usb", ATTR{idVendor}=="045e", ATTR{idProduct}=="02c4", MODE="0666"
SUBSYSTEM=="usb", ATTR{idVendor}=="045e", ATTR{idProduct}=="02d8", MODE="0666"
SUBSYSTEM=="usb", ATTR{idVendor}=="045e", ATTR{idProduct}=="02d9", MODE="0666"

udev のルールを再認識させるためには、root 権限で

udevadm trigger

した後に、Kinect を使いたい一般ユーザ権限の再ログイン・Kinect の再接続をすれば良いようです。 システム側には3つのデバイスとして認識されているようですね。RGBカメラ、Dカメラ、マイクかな。

参考までに、dmesg は次のとおりになっていました。

[2319025.138813] usb 2-1: new SuperSpeed USB device number 9 using xhci_hcd
[2319025.156457] usb 2-1: New USB device found, idVendor=045e, idProduct=02d9
[2319025.156464] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[2319025.156469] usb 2-1: Product: NuiSensor Adaptor      
[2319025.156473] usb 2-1: Manufacturer: Microsoft Corporation  
[2319025.159153] hub 2-1:1.0: USB hub found
[2319025.159284] hub 2-1:1.0: 1 port detected
[2319025.494131] usb 1-7: new high-speed USB device number 31 using xhci_hcd
[2319025.624314] usb 1-7: New USB device found, idVendor=045e, idProduct=02d9
[2319025.624321] usb 1-7: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[2319025.624326] usb 1-7: Product: NuiSensor Adaptor      
[2319025.624330] usb 1-7: Manufacturer: Microsoft Corporation  
[2319025.625176] hub 1-7:1.0: USB hub found
[2319025.625337] hub 1-7:1.0: 1 port detected
[2319026.724222] usb 2-1.1: new SuperSpeed USB device number 10 using xhci_hcd
[2319026.740876] usb 2-1.1: New USB device found, idVendor=045e, idProduct=02c4
[2319026.740883] usb 2-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=4
[2319026.740888] usb 2-1.1: Product: Xbox NUI Sensor
[2319026.740892] usb 2-1.1: Manufacturer: Microsoft
[2319026.740896] usb 2-1.1: SerialNumber: XXXXXXXXXXXX

lsusb でも3つのデバイスとして認識されています。

freenect2 のビルド

Debian ベースである LMDE2 (Linux Mint Debian Edition) では、公式リポジトリにあるのは v1 向けの libfreenect だけです。そこで、Open Kinect Project の Github リポジトリから libfreenect2 を入手してビルドします。システム要件やビルド方法は README.md に書かれているとおりです。依存しているライブラリのほとんどは APT でインストールすることができます。 一点だけひっかかったのは、

Install libusb. The version must be >= 1.0.20.

の部分。 LMDE2 公式リポジトリは2017年3月現在、libusb のバージョンが 1.0.19 しか提供されていないようです。そこで、

ここから libusb の 1.0.20 のソースコードをダウンロードし、make install しました。なお、Ubuntu の場合だったら deb パッケージがこちらで配布されています。 freenect2 のソースコードにある depends ディレクトリの中身にある程度依存関係をアレしてくれるスクリプトが入っているので、そちらを参考にしてもいいかもしれません。

参考にならないであろう私がインストールした経緯はこちらです。今回 Kinect One を買って無駄にならなかった…ぞ!!!

RTAB-Map のビルド

RTAB-Mapは公式マニュアルを参考にインストールします。

今見たら ROS 版や Docker 版もあるんですね…、私は APT で全部揃えて cmake しました。

参考

コメントを残す

メールアドレスが公開されることはありません。