36 #include <VisionX/interface/components/MultiViewPointCloudProcessor.h>
40 armarx::cfg::MVPCLProc,
47 AX_DESCRIPTION("Grid size for approximate voxel grid (0 = disabled)")),
48 (float, frameRate, AX_DEFAULT(30), AX_MIN(0), AX_MAX(300)),
49 (int, maxNumberOfFramesPerViewPoint, AX_DEFAULT(100), AX_MIN(1), AX_MAX(1000)));
64 class MultiViewPointCloudProcessor :
65 virtual public visionx::MultiViewPointCloudProcessorInterface,
66 virtual public visionx::PointCloudProcessor,
67 virtual public armarx::RobotStateComponentPluginUser,
68 virtual public DebugObserverComponentPluginUser,
69 virtual public RemoteGuiComponentPluginUser
73 std::string getDefaultName() const override;
76 void startRecordingNextViewPoint(const Ice::Current& = Ice::emptyCurrent) override;
77 void stopRecordingViewPoint(const Ice::Current& = Ice::emptyCurrent) override;
78 void clearViewPoints(const Ice::Current& = Ice::emptyCurrent) override;
79 void setMaxNumberOfFramesPerViewPoint(Ice::Int n,
80 const Ice::Current& = Ice::emptyCurrent) override;
81 void setDownsamplingGridSize(Ice::Float s,
82 const Ice::Current& = Ice::emptyCurrent) override;
83 void setFrameRate(Ice::Float r, const Ice::Current& = Ice::emptyCurrent) override;
86 RemoteGui::WidgetPtr buildGui();
87 void processGui(RemoteGui::TabProxy& prx);
89 void process() override;
90 template <class PointType>
92 template <class PointType>
95 void onInitPointCloudProcessor() override;
96 void onConnectPointCloudProcessor() override;
99 onDisconnectPointCloudProcessor() override
103 void onExitPointCloudProcessor() override;
106 armarx::PropertyDefinitionsPtr createPropertyDefinitions() override;
110 std::string _pointCloudProviderName;
111 visionx::PointCloudProviderInfo _pointCloudProviderInfo;
112 visionx::PointCloudProviderInterfacePrx _pointCloudProvider;
113 std::string _pointCloudProviderRefFrame;
115 mutable std::recursive_mutex _cfgBufWriteMutex;
116 mutable std::recursive_mutex _cfgBufReadMutex;
117 WriteBufferedTripleBuffer<cfg::MVPCLProc::Config> _cfgBuf;
120 VirtualRobot::RobotPtr _robot;
124 std::deque<std::any> clouds;
127 mutable std::recursive_mutex _viewPointsMutex;
128 std::deque<ViewPoint> _viewPoints;
129 std::atomic_int _currentViewpoint = -1;
130 std::atomic_bool _doRecord = false;
131 std::atomic_bool _doClear = false;
133 std::thread _providerThread;
134 std::atomic_bool _stopProviding = false;
136 } // namespace armarx