diff --git a/source/RobotAPI/libraries/ArmarXObjects/ObjectInfo.cpp b/source/RobotAPI/libraries/ArmarXObjects/ObjectInfo.cpp index 3b97c8040f4687bf58e48b409aaa4c2669f9fe35..4b813223c4b667cb3dd2e4ffb3e57d862d18c521 100644 --- a/source/RobotAPI/libraries/ArmarXObjects/ObjectInfo.cpp +++ b/source/RobotAPI/libraries/ArmarXObjects/ObjectInfo.cpp @@ -381,7 +381,7 @@ namespace armarx if (!fs::is_regular_file(simoxXML().absolutePath)) { - if (_logError) + if (false and _logError ) { ARMARX_WARNING << "Expected simox object file for object " << *this << ": " << simoxXML().absolutePath; diff --git a/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.cpp b/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.cpp index 529aeba908795871d1690ef937dbecf0736b1a8f..c1a483450af1a4e803ffe6f330e6917817dcbfdc 100644 --- a/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.cpp +++ b/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.cpp @@ -24,8 +24,7 @@ namespace armarx::armem::robot_state if (not robotState) { ARMARX_VERBOSE << deactivateSpam(5) << "Querying robot state failed for robot `" - << robot.getName() << "` " - << "(type `" << robot.getType() << "`)!"; + << robot.getName() << "` " << "(type `" << robot.getType() << "`)!"; return false; } @@ -43,8 +42,7 @@ namespace armarx::armem::robot_state if (not robotState) { ARMARX_VERBOSE << deactivateSpam(5) << "Querying robot state failed for robot `" - << robot.getName() << "` " - << "(type `" << robot.getType() << "`)!"; + << robot.getName() << "` " << "(type `" << robot.getType() << "`)!"; return false; } @@ -84,6 +82,32 @@ namespace armarx::armem::robot_state return robot; } + VirtualRobot::RobotPtr + VirtualRobotReader::getRobotWaiting(const std::string& name, + const armem::Time& timestamp, + const VirtualRobot::RobotIO::RobotDescription& loadMode) + { + ARMARX_INFO << "Trying to get robot `" << name << "` ..."; + + VirtualRobot::RobotPtr robot = nullptr; + while (robot == nullptr) + { + // might be nullptr if query fails + robot = getRobot(name, timestamp, loadMode); + + if (robot == nullptr) + { + ARMARX_INFO << deactivateSpam(1) << "Failed to query robot `" << name + << "`. Will try again ..."; + } + Clock::WaitFor(Duration::MilliSeconds(200)); + } + + ARMARX_INFO << "Got robot `" << name << "`."; + + return robot; + } + VirtualRobot::RobotPtr VirtualRobotReader::getSynchronizedRobot(const std::string& name, const VirtualRobot::BaseIO::RobotDescription& loadMode, @@ -128,4 +152,4 @@ namespace armarx::armem::robot_state } -} // namespace armarx::armem::robot_state::client::common +} // namespace armarx::armem::robot_state diff --git a/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.h b/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.h index 0c0eb05aa6cd8f96bec6acdeb90c0261aca43c80..571838aa3104abbbc89f1834d50f7f8c2a73ca41 100644 --- a/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.h +++ b/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.h @@ -69,6 +69,15 @@ namespace armarx::armem::robot_state VirtualRobot::RobotIO::RobotDescription::eStructure, bool blocking = true); + /** + @brief In contrast to getRobot(), this function will retry to query the robot until it exists. + */ + [[nodiscard]] VirtualRobot::RobotPtr + getRobotWaiting(const std::string& name, + const armem::Time& timestamp = armem::Time::Invalid(), + const VirtualRobot::RobotIO::RobotDescription& loadMode = + VirtualRobot::RobotIO::RobotDescription::eStructure); + private: [[nodiscard]] VirtualRobot::RobotPtr _getSynchronizedRobot(const std::string& name,