From f65cc9d072f82d51f35505fd9159a70d95b2d76c Mon Sep 17 00:00:00 2001 From: Raphael Grimm <raphael.grimm@kit.edu> Date: Thu, 3 May 2018 07:31:19 +0200 Subject: [PATCH] Apply changes from 0e87721ac5f7a11ddc78e08d7267c7184ccd5a86 ("made velocity mode for kinematicunit configurable") --- .../RobotUnitModules/RobotUnitModuleUnits.cpp | 34 ++++++++++++++----- .../RobotUnitModules/RobotUnitModuleUnits.h | 7 ++++ 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.cpp b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.cpp index 8dd4ea34b..d2ac94760 100644 --- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.cpp +++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.cpp @@ -151,10 +151,9 @@ namespace armarx ARMARX_INFO << "initializing default units...done! " << (MicroNow() - beg).count() << " us"; } + void Units::initializeKinematicUnit() { - /// TODO move init code to Kinematic sub unit - using UnitT = KinematicSubUnit; using IfaceT = KinematicUnitInterface; auto guard = getGuard(); @@ -164,6 +163,24 @@ namespace armarx { return; } + auto unit = createKinematicSubUnit(getIceProperties()->clone()); + //add + if (unit) + { + addUnit(std::move(unit)); + } + } + + ManagedIceObjectPtr Units::createKinematicSubUnit( + const Ice::PropertiesPtr& properties, + const std::string& positionControlMode, + const std::string& velocityControlMode, + const std::string& torqueControlMode + ) + { + /// TODO move init code to Kinematic sub unit + using UnitT = KinematicSubUnit; + //add ctrl et al std::map<std::string, UnitT::ActuatorData> devs; for (const ControlDevicePtr& controlDevice : _module<Devices>().getControlDevices().values()) @@ -198,9 +215,9 @@ namespace armarx ARMARX_CHECK_EXPRESSION(pt); \ } \ } - initializeKinematicUnit_tmp_helper(ControlModes::Position1DoF, ControlTarget1DoFActuatorPosition, ad.ctrlPos) - initializeKinematicUnit_tmp_helper(ControlModes::Velocity1DoF, ControlTarget1DoFActuatorVelocity, ad.ctrlVel) - initializeKinematicUnit_tmp_helper(ControlModes::Torque1DoF , ControlTarget1DoFActuatorTorque , ad.ctrlTor) + initializeKinematicUnit_tmp_helper(positionControlMode, ControlTarget1DoFActuatorPosition, ad.ctrlPos) + initializeKinematicUnit_tmp_helper(velocityControlMode, ControlTarget1DoFActuatorVelocity, ad.ctrlVel) + initializeKinematicUnit_tmp_helper(torqueControlMode , ControlTarget1DoFActuatorTorque , ad.ctrlTor) #undef initializeKinematicUnit_tmp_helper @@ -213,13 +230,12 @@ namespace armarx if (devs.empty()) { ARMARX_IMPORTANT << "No joint devices found - skipping adding of KinematicUnit"; - return; + return nullptr; } ARMARX_CHECK_EXPRESSION_W_HINT(!devs.empty(), "no 1DoF ControlDevice found with matching SensorDevice"); //add it const std::string configName = getProperty<std::string>("KinematicUnitName"); const std::string confPre = getConfigDomain() + "." + configName + "."; - Ice::PropertiesPtr properties = getIceProperties()->clone(); //properties->setProperty(confPre + "MinimumLoggingLevel", getProperty<std::string>("MinimumLoggingLevel").getValue()); //fill properties properties->setProperty(confPre + "RobotNodeSetName", _module<RobotData>().getRobotNodetSeName()); @@ -237,8 +253,7 @@ namespace armarx _module<Devices>().getControlModeGroups().groupsMerged, dynamic_cast<RobotUnit*>(this) ); - //add - addUnit(std::move(unit)); + return unit; } void Units::initializePlatformUnit() @@ -437,6 +452,7 @@ namespace armarx void Units::addUnit(ManagedIceObjectPtr unit) { + ARMARX_CHECK_NOT_NULL(unit); auto guard = getGuard(); throwIfStateIsNot(RobotUnitState::InitializingUnits, __FUNCTION__); getArmarXManager()->addObjectAsync(unit, "", true, false); diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.h b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.h index f6667acfd..1f75b820f 100644 --- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.h +++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.h @@ -248,6 +248,13 @@ namespace armarx virtual void initializeTrajectoryControllerUnit(); /// @brief Initializes the TcpControllerUnit virtual void initializeTcpControllerUnit(); + /// @brief Create the \ref KinematicUnit (this function should be called in \ref initializeKinematicUnit) + ManagedIceObjectPtr createKinematicSubUnit( + const Ice::PropertiesPtr& properties, + const std::string& positionControlMode = ControlModes::Position1DoF, + const std::string& velocityControlMode = ControlModes::Velocity1DoF, + const std::string& torqueControlMode = ControlModes::Torque1DoF + ); /** * @brief Registers a unit for management (the Unit is added and removed to the \ref ArmarXManager * and updated with new values. -- GitLab