diff --git a/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotUnitComponentPlugin.cpp b/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotUnitComponentPlugin.cpp index 4e6e7966cc4c71e819da47cd9a7ee06ccd536775..6647cf38585cb868a3df29e9c328bbfe8ac3a677 100644 --- a/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotUnitComponentPlugin.cpp +++ b/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotUnitComponentPlugin.cpp @@ -116,6 +116,19 @@ namespace armarx::plugins } + void RobotUnitComponentPlugin::waitUntilRobotUnitIsRunning(const std::function<bool ()>& termCond) const + { + ARMARX_INFO << "Waiting until robot unit is running ..."; + + while (not(termCond() or not isNullptr(getRobotUnit()) or getRobotUnit()->isRunning())) + { + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + } + + ARMARX_INFO << "Robot unit is up and running."; + } + + } // namespace armarx::plugins diff --git a/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotUnitComponentPlugin.h b/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotUnitComponentPlugin.h index 80357a96e9a3bb6c889d7b73435baef90a385b54..4371934b97182947afbaad3d60fd5295a717615a 100644 --- a/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotUnitComponentPlugin.h +++ b/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotUnitComponentPlugin.h @@ -34,6 +34,19 @@ namespace armarx } + /** + * @brief Waits until the robot unit is running. + * + * Although the robot unit proxy might be initialized (\see getRobotUnit()), the robot unit might + * not be fully initialized. + * + * @param termCond Termination condition. + * If it evaluates to true, waitUntilRobotUnitIsRunning returns without waiting + * for the robot unit to become available. + */ + void waitUntilRobotUnitIsRunning(const std::function<bool()>& termCond = [] {return false;}) const; + + //controllers public: