Hi,
I wasn't able to build ROS (calling make complained of missing
directories that appear to be hard paths on your machine - I can send
you the error directly if you wish).
However the following stripped-down program (which basically what the
ROS example is doing), and which is only dependent on OpenNI, shows
the problem. If I initialize the context without an XML file, it
correctly lists two attached devices. This is what the ROS example
does. However when I try to connect to the devices, OpenNI reports
'Bad parameter' errors (as usual for connecting without an XML).
However, if I do use the proper Sample-User.xml file, I get 3 or 4
nodes listed; only the first of which actually connects properly.
#include <iostream>
#include <string>
#include <map>
#include <vector>
#include <XnCppWrapper.h>
using namespace std;
xn::Context context;
XnStatus status;
xn::NodeInfoList device_node_info_list;
xn::NodeInfoList depth_node_info_list;
xn::NodeInfoList image_node_info_list;
int main(int argc, const char * argv[])
{
if (argc > 1) {
status = context.InitFromXmlFile(argv[1]);
} else {
status = context.Init();
}
if (status != XN_STATUS_OK) {
printf("initialization failed. Reason: %s\n", xnGetStatusString
(status));
return -1;
}
// enumerate all devices
printf("devices:\n");
status = context.EnumerateProductionTrees(XN_NODE_TYPE_DEVICE, NULL,
device_node_info_list);
if (status != XN_STATUS_OK && device_node_info_list.Begin () !=
device_node_info_list.End ()) {
printf("enumerating devices failed. Reason: %s", xnGetStatusString
(status));
return -1;
}
for (xn::NodeInfoList::Iterator nodeIt = device_node_info_list.Begin
(); nodeIt != device_node_info_list.End (); ++nodeIt) {
const xn::NodeInfo& info = *nodeIt;
const XnProductionNodeDescription& description =
info.GetDescription();
printf("device: vendor %s name %s, instance %s\n",
description.strVendor, description.strName, info.GetInstanceName());
}
// enumerate depth nodes:
printf("depth nodes:\n");
status = context.EnumerateProductionTrees(XN_NODE_TYPE_DEPTH, NULL,
depth_node_info_list, NULL);
if (status != XN_STATUS_OK) {
printf("enumerating depth generators failed. Reason: %s\n",
xnGetStatusString (status));
return -1;
} else {
for (xn::NodeInfoList::Iterator nodeIt =
depth_node_info_list.Begin(); nodeIt != depth_node_info_list.End(); +
+nodeIt) {
const xn::NodeInfo& info = *nodeIt;
const XnProductionNodeDescription& description =
info.GetDescription();
printf("depth: vendor %s name %s, instance %s\n",
description.strVendor, description.strName, info.GetInstanceName());
}
}
// enumerate image nodes
printf("image nodes:\n");
status = context.EnumerateProductionTrees(XN_NODE_TYPE_IMAGE, NULL,
image_node_info_list, NULL);
if (status != XN_STATUS_OK) {
printf("enumerating image generators failed. Reason: %s\n",
xnGetStatusString (status));
return -1;
} else {
for (xn::NodeInfoList::Iterator nodeIt =
image_node_info_list.Begin(); nodeIt != image_node_info_list.End(); +
+nodeIt) {
const xn::NodeInfo& info = *nodeIt;
const XnProductionNodeDescription& description =
info.GetDescription();
printf("image: vendor %s name %s, instance %s\n",
description.strVendor, description.strName, info.GetInstanceName());
}
}
return 0;
}
RESULTS:
./multiKinectTest ../../Data/Sample-User.xml
devices:
device: vendor PrimeSense name SensorV2, instance Device1
device: vendor PrimeSense name SensorV2, instance
device: vendor PrimeSense name SensorV2, instance
depth nodes:
depth: vendor PrimeSense name SensorV2, instance Depth1
depth: vendor PrimeSense name SensorV2, instance
depth: vendor PrimeSense name SensorV2, instance
depth: vendor PrimeSense name SensorV2, instance
image nodes:
image: vendor PrimeSense name SensorV2, instance
image: vendor PrimeSense name SensorV2, instance
image: vendor PrimeSense name SensorV2, instance
./multiKinectTest
devices:
device: vendor PrimeSense name SensorV2, instance
device: vendor PrimeSense name SensorV2, instance
depth nodes:
depth: vendor PrimeSense name SensorV2, instance
depth: vendor PrimeSense name SensorV2, instance
image nodes:
image: vendor PrimeSense name SensorV2, instance
image: vendor PrimeSense name SensorV2, instance