diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControlThread.cpp b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControlThread.cpp index 3cc35d38bb8c3146688ceb2b2be0b4334bc362f3..0564980702ec735105c95a668d56cc768b2e9b36 100644 --- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControlThread.cpp +++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControlThread.cpp @@ -203,10 +203,15 @@ namespace armarx::RobotUnitModule for (std::size_t i = 0; i < actJC.size(); ++i) { + postSwitchSetup_ActivatedJointControllers.at(i) = actJC.at(i); postSwitchSetup_ActivatedJointToNJointControllerAssignement.at(i) = assig.at(i); postSwitchSetup_ActivatedNJointControllers.at(i) = actNJC.at(i); + if (actNJC.at(i) == nullptr) + { + continue; + } if (dynamic_cast<SynchronousNJointController*>(actNJC.at(i))) { _activatedSynchronousNJointControllersIdx.at(numSyncNj++) = i; @@ -217,8 +222,10 @@ namespace armarx::RobotUnitModule } else { - throw std::logic_error{"NJoint controller that is neither SynchronousNJointController" - " nor AsynchronousNJointController"}; + ARMARX_RT_LOGF_ERROR("NJoint controller that is neither SynchronousNJointController" + " nor AsynchronousNJointController: %s", actNJC.at(i)->rtGetClassName().c_str()); + // Throwing exceptions in a destructor causes std::abort to be called + //throw std::logic_error{}; } } for (