takminの書きっぱなし備忘録 @はてなブログ

主にコンピュータビジョンなど技術について、たまに自分自身のことや思いついたことなど

WindowsからのXtion(Kinect)のシリアル番号取得方法

Point Cloud Libraryから複数のXtionやKinectを使用している時、例えばどのデバイスを使用するかを明示的に選びたい場合などがあると思います。


例えば以下のサイトでは、OpenNIGrabber()でデバイスを起動する際、シリアル番号や、デバイスのバスまたはインデックスをデバイスIDとして指定するように書いてあります。
http://docs.pointclouds.org/trunk/classpcl_1_1_open_n_i_grabber.html#a5753a422ff92067c9065797697d69244


インデックスを指定する場合は、例えば、

pcl::Grabber* device1 = new pcl::OpenNIGrabber ("#1");
pcl::Grabber* device2 = new pcl::OpenNIGrabber ("#2");

といった具合に指定します。


しかしこれでは、デバイス接続の順番などで番号が変わってしまいます。
そこで、より明示的に起動するデバイスを指定するために、Windows上でシリアル番号を取得する方法を知りたいなーと思って調べていたところ、やり方がわかったのでメモしておきます。(Windows7、8上で確認)


まず、デバイスマネージャから、対応するデバイス(例えばXtion Pro Liveの場合「PrimeSense PS1080」)を選択して、プロパティを見ます(右クリック)。
次に、プロパティの詳細タグで、ドロップダウンリストの"プロパティ"を「デバイス インスタンス パス」と選択します。
この"値"の欄の最後の"\"マーク以下がシリアル番号になります。


ただし、この時大文字のアルファベットを全て小文字にする必要があります。
この例では、"7&2e46818f&0&0000"となります。


このシリアル番号を以下のような形でOpenNIGrabber()に渡してやります。

pcl::Grabber* device1 = new pcl::OpenNIGrabber ("7&2e46818f&0&0000");


動作確認はXtionでしか行っていませんが、Kinectでも同様だろうと思います。
また、PCLを使用せずにOpenNIから直接デバイス名を指定して起動する場合も、要領は同じだと思います。