From 758344298030c8e0178ad085adb276ebbc5defc5 Mon Sep 17 00:00:00 2001 From: Fabian Reister <fabian.reister@kit.edu> Date: Tue, 11 May 2021 12:01:25 +0200 Subject: [PATCH] fix: kinematicunit might not be available on startup and causes a nullptr exception. --- .../server/description/Segment.cpp | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/source/RobotAPI/libraries/armem_robot_state/server/description/Segment.cpp b/source/RobotAPI/libraries/armem_robot_state/server/description/Segment.cpp index 011d37e33..9fb1d9f45 100644 --- a/source/RobotAPI/libraries/armem_robot_state/server/description/Segment.cpp +++ b/source/RobotAPI/libraries/armem_robot_state/server/description/Segment.cpp @@ -1,8 +1,10 @@ #include "Segment.h" +#include <IceUtil/Time.h> #include <RobotAPI/libraries/armem_robot/aron/RobotDescription.aron.generated.h> #include <sstream> +#include "ArmarXCore/core/exceptions/local/ExpressionException.h" #include "ArmarXCore/core/logging/Logging.h" #include <ArmarXCore/core/time/TimeUtil.h> @@ -20,6 +22,7 @@ #include <RobotAPI/libraries/armem_robot/aron/Robot.aron.generated.h> #include <RobotAPI/libraries/armem_robot/aron_conversions.h> #include <RobotAPI/libraries/armem_robot/robot_conversions.h> +#include <thread> namespace armarx::armem::server::robot_state::description { @@ -93,7 +96,27 @@ namespace armarx::armem::server::robot_state::description void Segment::updateRobotDescription() { - auto kinematicUnit = robotUnit->getKinematicUnit(); + ARMARX_CHECK_NOT_NULL(robotUnit); + + const auto waitForKinematicUnit = [&]() + { + while (true) + { + auto kinematicUnit = robotUnit->getKinematicUnit(); + + if (kinematicUnit) + { + ARMARX_INFO << "Kinematic unit is now available."; + return kinematicUnit; + } + + ARMARX_INFO << "Waiting for kinematic unit ..."; + std::this_thread::sleep_for(std::chrono::seconds(1)); + } + }; + + auto kinematicUnit = waitForKinematicUnit(); + ARMARX_CHECK_NOT_NULL(kinematicUnit); const auto robotName = kinematicUnit->getRobotName(); -- GitLab