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 驱动程序的罪魁祸首)。

xn::NodeInfo::GetCreationInfo但是,您可以使用( link )获取有关 Kinect 连接到哪个 USB 总线/端口的信息

在 linux 上,它包含以下内容(对于 Device NodeType):

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

我无法向您展示确切的代码,因为我使用 OpenNI java 包装器而不是 C++,但这种方法适用于 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的实际序列号。

因此,您可以提出一个 bash 脚本,该脚本将在您的 OpenNI 应用程序启动之前运行,它将找到总线/端口并将其传递给您的应用程序(然后可以使用此信息与正确的 Kinect 进行通信)。

于 2012-05-18T12:45:24.520 回答
1

使用OpenNI2,将想要的序列号作为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;
    }
}
于 2013-04-29T14:52:05.507 回答