94 virtual public armarx::AzureKinectPointCloudProviderInterface,
130 std::vector<imrec::ChannelPreferences>
136 const Ice::Current& = Ice::emptyCurrent)
override;
139 const Ice::Current& = Ice::emptyCurrent)
override;
143 const Ice::Current& = Ice::emptyCurrent)
override;
167 MetaPointCloudFormatPtr
170 MetaPointCloudFormatPtr info =
new MetaPointCloudFormat();
172 info->type = PointContentType::eColoredPoints;
176 ARMARX_INFO <<
"default pointcloud format: " << resultColorImage->width <<
", "
177 << resultColorImage->height;
180 resultColorImage->width * resultColorImage->height *
sizeof(ColoredPoint3D);
181 info->size = info->capacity;
194 std::optional<Eigen::Vector3f>
199 const Eigen::Vector3f& worldUp,
204 IceUtil::Time imagesTime;
207 std::mutex pointcloudProcMutex;
208 std::condition_variable pointcloudProcSignal;
210 bool depthImageReady;
211 bool depthImageProcessed;
220 pcl::PointCloud<CloudPointType>::Ptr pointcloud;
221 MetaPointCloudFormatPtr cloudFormat;
224 visionx::StereoCalibration calibration;
226 bool enableHeartbeat =
true;
229 tdv::nuitrack::DepthSensor::Ptr depthSensor;
230 tdv::nuitrack::ColorSensor::Ptr colorSensor;
233 tdv::nuitrack::DepthFrame::Ptr latestDepthFrame;
234 tdv::nuitrack::RGBFrame::Ptr latestColorFrame;
235 std::int64_t latestTimestamp;
236 std::mutex colorFrameMutex;
237 std::mutex depthFrameMutex;
240 cv::Mat alignedDepthImage;
241 cv::Mat colorImageRGB;
243 tdv::nuitrack::SkeletonTracker::Ptr skeletonTracker;
244 tdv::nuitrack::SkeletonData::Ptr latestSkeletonData;
245 std::mutex skeletonMutex;
252 void runPublishBodyTrackingResults();
254 bool bodyTrackingEnabled =
true;
255 bool bodyTrackingRunAtStart =
true;
256 std::atomic<bool> bodyTrackingIsRunning =
false;
257 std::mutex bodyTrackingParameterMutex;
258 int bodyTrackingDepthMaskMinX = -1;
259 int bodyTrackingDepthMaskMaxX = -1;
260 int bodyTrackingDepthMaskMaxZ = -1;
261 double confidenceThreshold = 0.;
262 int minimumSegmentsWithConfidenceLargerThanThreshold = 0;
263 float uprightFilterMaxAngleDeg = 45.F;
265 std::string bodyCameraFrameName =
"AzureKinect_Depth";
266 std::string robotName =
"Armar6";
279 void update(
int higherFramerate);
284 Subordinate pointCloud{.name =
"Point Cloud"};
287 std::mutex deviceToRealtimeOffsetMtx;
288 std::chrono::nanoseconds device_to_realtime_offset_{0};
290 std::mutex debugObserverMtx;
291 std::mutex metaInfoMtx;
293 armarx::plugins::HeartbeatComponentPlugin* heartbeatPlugin =
nullptr;
295 armarx::armem::robot_state::VirtualRobotReader robotReader;