From 269834228216c6d86ad35ca610d9b87faf2f6de6 Mon Sep 17 00:00:00 2001 From: Raphael Grimm <raphael.grimm@kit.edu> Date: Mon, 23 Apr 2018 11:20:30 +0200 Subject: [PATCH] Move loading the robot from RobotUnitModule::RobotData::_preOnInitRobotUnit to RobotUnitModule::RobotData::_initVirtualRobot and call this function in RobotUnitModule::ModuleBase::onInitRobotUnit Change other components to load the robot earlier --- .../RobotUnit/RobotUnitModules/RobotUnitModuleBase.cpp | 1 + .../RobotUnitModules/RobotUnitModuleControlThread.cpp | 2 +- .../RobotUnitModules/RobotUnitModuleControlThread.h | 4 ++-- .../RobotUnitModuleControllerManagement.cpp | 2 +- .../RobotUnitModules/RobotUnitModuleControllerManagement.h | 4 ++-- .../RobotUnit/RobotUnitModules/RobotUnitModuleRobotData.cpp | 4 +++- .../RobotUnit/RobotUnitModules/RobotUnitModuleRobotData.h | 2 +- .../RobotUnitModuleSelfCollisionChecker.cpp | 4 ---- .../RobotUnitModules/RobotUnitModuleSelfCollisionChecker.h | 2 -- .../RobotUnit/RobotUnitModules/RobotUnitModuleUnits.cpp | 6 +----- .../units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.h | 2 -- 11 files changed, 12 insertions(+), 21 deletions(-) diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleBase.cpp b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleBase.cpp index 354d1638d..94036a4dc 100644 --- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleBase.cpp +++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleBase.cpp @@ -116,6 +116,7 @@ namespace armarx auto guard = getGuard(); throwIfStateIsNot(RobotUnitState::InitializingComponent, __FUNCTION__); + cast_to_and_call(::armarx::RobotUnitModule::RobotData, _initVirtualRobot(), true); #define call_module_hook(Type) cast_to_and_call(::armarx::RobotUnitModule::Type, _preOnInitRobotUnit(), true) for_each_module(call_module_hook) diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControlThread.cpp b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControlThread.cpp index 7434e8d61..08816b35a 100644 --- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControlThread.cpp +++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControlThread.cpp @@ -506,7 +506,7 @@ namespace armarx controlThreadId = std::this_thread::get_id(); } - void ControlThread::_postOnInitRobotUnit() + void ControlThread::_preOnInitRobotUnit() { try { diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControlThread.h b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControlThread.h index c732eb482..665f17f1c 100644 --- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControlThread.h +++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControlThread.h @@ -61,8 +61,8 @@ namespace armarx private: ///@see \ref ModuleBase::_preFinishControlThreadInitialization void _preFinishControlThreadInitialization(); - ///@see \ref ModuleBase::_postOnInitRobotUnit - void _postOnInitRobotUnit(); + ///@see \ref ModuleBase::_preOnInitRobotUnit + void _preOnInitRobotUnit(); // //////////////////////////////////////////////////////////////////////////////////////// // // ///////////////////////////////////// ice interface //////////////////////////////////// // // //////////////////////////////////////////////////////////////////////////////////////// // diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControllerManagement.cpp b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControllerManagement.cpp index 6d5e841a5..3b5e3bb28 100644 --- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControllerManagement.cpp +++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControllerManagement.cpp @@ -677,7 +677,7 @@ namespace armarx nJointControllers.clear(); } - void ControllerManagement::_postOnInitRobotUnit() + void ControllerManagement::_preOnInitRobotUnit() { controllerCreateRobot = _module<RobotData>().cloneRobot(); } diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControllerManagement.h b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControllerManagement.h index 91300315a..08d197d02 100644 --- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControllerManagement.h +++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControllerManagement.h @@ -53,8 +53,8 @@ namespace armarx // ///////////////////////////////// RobotUnitModule hooks //////////////////////////////// // // //////////////////////////////////////////////////////////////////////////////////////// // private: - /// @see ModuleBase::_postOnInitRobotUnit - void _postOnInitRobotUnit(); + /// @see ModuleBase::_preOnInitRobotUnit + void _preOnInitRobotUnit(); /// @see ModuleBase::_preFinishRunning void _preFinishRunning(); /// @see ModuleBase::_postFinishRunning diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleRobotData.cpp b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleRobotData.cpp index dc91877a6..ab976c3e4 100644 --- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleRobotData.cpp +++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleRobotData.cpp @@ -74,8 +74,10 @@ namespace armarx return clone; } - void armarx::RobotUnitModule::RobotData::_preOnInitRobotUnit() + void armarx::RobotUnitModule::RobotData::_initVirtualRobot() { + std::lock_guard<std::mutex> guard {robotMutex}; + ARMARX_CHECK_IS_NULL(robot); robotNodeSetName = getProperty<std::string>("RobotNodeSetName").getValue(); robotProjectName = getProperty<std::string>("RobotFileNameProject").getValue(); robotFileName = getProperty<std::string>("RobotFileName").getValue(); diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleRobotData.h b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleRobotData.h index 35a474f1e..ad3f31798 100644 --- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleRobotData.h +++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleRobotData.h @@ -76,7 +76,7 @@ namespace armarx // //////////////////////////////////////////////////////////////////////////////////////// // private: /// @see ModuleBase::_preOnInitRobotUnit - void _preOnInitRobotUnit(); + void _initVirtualRobot(); // //////////////////////////////////////////////////////////////////////////////////////// // // /////////////////////////////////// Module interface /////////////////////////////////// // // //////////////////////////////////////////////////////////////////////////////////////// // diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleSelfCollisionChecker.cpp b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleSelfCollisionChecker.cpp index 017015656..4c345629a 100644 --- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleSelfCollisionChecker.cpp +++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleSelfCollisionChecker.cpp @@ -111,10 +111,6 @@ namespace armarx } } setSelfCollisionAvoidanceFrequency(getProperty<float>("SelfCollisionCheckFrequency").getValue()); - } - - void SelfCollisionChecker::_postOnInitRobotUnit() - { setSelfCollisionAvoidanceDistance(getProperty<float>("MinSelfDistance").getValue()); } diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleSelfCollisionChecker.h b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleSelfCollisionChecker.h index 7645cf87e..2ac3d7d1d 100644 --- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleSelfCollisionChecker.h +++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleSelfCollisionChecker.h @@ -82,8 +82,6 @@ namespace armarx private: /// @see ModuleBase::_preOnInitRobotUnit void _preOnInitRobotUnit(); - /// @see ModuleBase::_postOnInitRobotUnit - void _postOnInitRobotUnit(); /// @see ModuleBase::_postFinishControlThreadInitialization void _postFinishControlThreadInitialization(); /// @see ModuleBase::_preFinishRunning diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.cpp b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.cpp index 9a963cd85..8dd4ea34b 100644 --- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.cpp +++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.cpp @@ -485,6 +485,7 @@ namespace armarx void Units::_preOnInitRobotUnit() { + unitCreateRobot = _module<RobotData>().cloneRobot(); ARMARX_DEBUG << "add emergency stop master"; { emergencyStopMaster = new RobotUnitEmergencyStopMaster {&_module<ControlThread>(), getProperty<std::string>("EmergencyStopTopic").getValue()}; @@ -508,11 +509,6 @@ namespace armarx ARMARX_DEBUG << "add emergency stop master...done!"; } - void Units::_postOnInitRobotUnit() - { - unitCreateRobot = _module<RobotData>().cloneRobot(); - } - void Units::_postOnExitRobotUnit() { ARMARX_DEBUG << "remove EmergencyStopMaster"; diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.h b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.h index 692f2aa43..f6667acfd 100644 --- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.h +++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.h @@ -109,8 +109,6 @@ namespace armarx private: /// @see ModuleBase::_preOnInitRobotUnit void _preOnInitRobotUnit(); - /// @see ModuleBase::_postOnInitRobotUnit - void _postOnInitRobotUnit(); /// @see ModuleBase::_icePropertiesInitialized void _icePropertiesInitialized(); /// @see ModuleBase::_preFinishRunning -- GitLab