31 offeringTopic(getProperty<std::string>(
"ViconDataTopicName").getValue());
32 offeringTopic(getProperty<std::string>(
"DebugDrawerTopicName").getValue());
38 listener = getTopic<ViconMarkerProviderListenerInterfacePrx>(
39 getProperty<std::string>(
"ViconDataTopicName").getValue());
41 getProperty<std::string>(
"DebugDrawerTopicName").getValue());
43 std::string address = getProperty<std::string>(
"Hostname").getValue();
44 address +=
":" +
to_string(getProperty<int>(
"Port").getValue());
46 ARMARX_INFO <<
"Connecting to VICON server at " << address <<
"...";
51 if (
dsClient.IsConnected().Connected)
53 ARMARX_INFO <<
"Connected to VICON server. Setting up configuration...";
55 if (
dsClient.EnableMarkerData().Result &&
dsClient.EnableUnlabeledMarkerData().Result &&
56 dsClient.SetStreamMode(ViconDataStreamSDK::CPP::StreamMode::ClientPull).Result)
58 ARMARX_INFO <<
"Setup complete. Starting polling thread.";
76 ARMARX_ERROR <<
"Exception while connecting to vicon server!";
98 if (!
dsClient.IsConnected().Connected)
105 if (
dsClient.GetFrame().Result != ViconDataStreamSDK::CPP::Result::Success)
107 ARMARX_WARNING <<
"Failed to receive frame, will retry in one second! (Is VICON Nexus "
108 "currently running in online or playback mode?)";
113 DebugDrawerColoredPointCloud pointCloud;
114 pointCloud.pointSize = 10;
117 std::map<std::string, Vector3f> labeledMarkers;
118 int labeledMarkerCount = 0;
119 int subjectCount =
dsClient.GetSubjectCount().SubjectCount;
121 for (
int curSubj = 0; curSubj < subjectCount; ++curSubj)
123 std::string subjectName =
dsClient.GetSubjectName(curSubj).SubjectName;
125 int subjectMarkerCount =
dsClient.GetMarkerCount(subjectName).MarkerCount;
126 for (
int i = 0; i < subjectMarkerCount; ++i)
128 std::string markerName =
dsClient.GetMarkerName(subjectName, i).MarkerName;
129 double* translation =
130 dsClient.GetMarkerGlobalTranslation(subjectName, markerName).Translation;
133 v.e0 = translation[0];
134 v.e1 = translation[1];
135 v.e2 = translation[2];
136 labeledMarkers[subjectName +
":" + markerName] =
v;
138 DebugDrawerColoredPointCloudElement p;
145 pointCloud.points.push_back(p);
147 ++labeledMarkerCount;
156 listener->reportLabeledViconMarkerFrame(labeledMarkers);
159 std::vector<Vector3f> unlabeledMarkers;
160 int unlabeledMarkerCount =
dsClient.GetUnlabeledMarkerCount().MarkerCount;
162 for (
int i = 0; i < unlabeledMarkerCount; ++i)
164 double* translation =
dsClient.GetUnlabeledMarkerGlobalTranslation(i).Translation;
167 v.e0 = translation[0];
168 v.e1 = translation[1];
169 v.e2 = translation[2];
170 unlabeledMarkers.push_back(
v);
172 DebugDrawerColoredPointCloudElement p;
179 pointCloud.points.push_back(p);
182 listener->reportUnlabeledViconMarkerFrame(unlabeledMarkers);
184 ARMARX_DEBUG <<
"Frame processed: " << subjectCount <<
" subjects, " << labeledMarkerCount
185 <<
" labeled markers, " << unlabeledMarkers.size() <<
" unlabeled markers";
187 debugDrawer->setColoredPointCloudVisu(
"ViconMarkerProvider",
"MarkerCloud", pointCloud);