2012-01-24 13 views
2

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

が、私は次のことをしようとしているが、私は私の変数serialに「0」を取得:

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); 
    } 

答えて

3

を私はまだOpenNIでは不可能だと思う(少なくともKinectのために - 多分AVIN2ドライバがあります責任を負う)。

045e/[email protected]/13 (idVendor/[email protected]/DeviceId) 

しかし、あなたはそれが(デバイスノードタイプのために)、以下が含まれているにUSBバス/ポートは、Kinectのは、Linux上でxn::NodeInfo::GetCreationInfolink

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

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

しかし、あなたは、Linuxを使っているのであれば、あなたは(ルートとして)使用することができます。

# 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と通信できます) )。与えOpenNI2

1

は、wantedSerialNumber文字列としてシリアルナンバーを望んでいた

openni::Device device = new openni::Device(); 
openni::Array<openni::DeviceInfo> deviceList; 
openni::OpenNI::enumerateDevices(&deviceList); 
for (int i = 0; i != deviceList.getSize(); ++i) { 
    const openni::DeviceInfo& info = deviceList[i]; 
    string uri = info.getUri(); 
    device->open(uri.c_str()); 
    char serialNumber[1024]; 
    device->getProperty(ONI_DEVICE_PROPERTY_SERIAL_NUMBER, &serialNumber); 
    if (string(serialNumber) != wantedSerialNumber) { 
     device->close(); 
    } else { 
     break; 
    } 
} 
関連する問題