3

OpenNI で自分の kinect デバイスのシリアル番号を取得するにはどうすればよいですか? avin2 の SensorKinect ドライバーを使用しています。

私は次のことを試みていますが、変数には「0」しかありませんserial:

xn::NodeInfoList possibleChains;
context.EnumerateProductionTrees(XN_NODE_TYPE_DEVICE,NULL,possibleChains,NULL);
for(xn::NodeInfoList::Iterator i = possibleChains.Begin(); i !=
possibleChains.End(); ++i)
    {
        xn::NodeInfo node = *i;
        nRetVal = context.CreateProductionTree(node);
        xn::Device device;
        nRetVal = node.GetInstance(device);
        XnChar serial[1024];
        device.GetIdentificationCap().GetSerialNumber(serial, 1024);
    } 
4

2 に答える 2

4

OpenNI ではまだそれは不可能だと思います (少なくとも Kinect では - おそらく avin2 ドライバーが原因です)。

ただし、Kinect がどの USB バス/ポートに接続されているかについての情報は、xn::NodeInfo::GetCreationInfo(リンク)を使用して取得できます。

Linux では、次のものが含まれます (Device NodeType の場合)。

045e/02ae@5/13 (idVendor/idProduct@BusID/DeviceId) 

C++ の代わりに OpenNI Java ラッパーを使用しているため、正確なコードを示すことはできませんが、この方法は Mac/Linux/Win で機能し、アプリケーションで Kinect を区別できます。

問題は、kinect を別の USB に接続すると、バス/ポート情報が変更されることです (Linux では、再起動しても変更されることがあります)。

ただし、Linux を使用している場合は、(root として) 以下を使用できます。

# lsusb -v -d 045e:02ae | grep -e "Bus\|iSerial"
# Bus 005 Device 008: ID 045e:02ae Microsoft Corp. Xbox NUI Camera
#   iSerial                 3 A00365A00972107A
# Bus 005 Device 013: ID 045e:02ae Microsoft Corp. Xbox NUI Camera
#   iSerial                 3 A00365A00955107A

kinect の実際のシリアル番号を取得します。

したがって、OpenNI アプリケーションが開始する前に実行され、バス/ポートを見つけてアプリケーションに渡す bash スクリプトを考え出すことができます (その後、この情報を使用して正しい Kinect と通信できます)。

于 2012-05-18T12:45:24.520 に答える