MixedImpedanceVelocityController.h
Go to the documentation of this file.
1 /*
2  * This file is part of ArmarX.
3  *
4  * ArmarX is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 2 as
6  * published by the Free Software Foundation.
7  *
8  * ArmarX is distributed in the hope that it will be useful, but
9  * WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program. If not, see <http://www.gnu.org/licenses/>.
15  *
16  * @package ...
17  * @author Jianfeng Gao ( jianfeng dot gao at kit dot edu )
18  * @date 2024
19  * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
20  * GNU General Public License
21  */
22 
23 #pragma once
24 
25 #include <VirtualRobot/Robot.h>
26 
30 
33 #include <armarx/control/njoint_controller/task_space/ControllerInterface.h>
34 
36 {
38 
39  /**
40  * @defgroup Library-NJointTaskspaceMixedImpedanceVelocityController NJointTaskspaceMixedImpedanceVelocityController
41  * @ingroup Library-RobotUnit-NJointControllers
42  * A description of the library NJointTaskspaceMixedImpedanceVelocityController.
43  *
44  * @class NJointTaskspaceMixedImpedanceVelocityController
45  * @ingroup Library-NJointTaskspaceMixedImpedanceVelocityController
46  * @brief Brief description of class NJointTaskspaceMixedImpedanceVelocityController.
47  *
48  * Detailed description of class NJointTaskspaceMixedImpedanceVelocityController.
49  */
51  virtual public NJointController,
53  {
54  public:
55  using ConfigPtrT = ConfigurableNJointControllerConfigPtr;
58  using RtStatus = law::TaskspaceMixedImpedanceVelocityController::RtStatus;
59 
60  struct ArmData
61  {
62  /// devices
64  std::vector<ControlTarget1DoFActuatorTorque*> targetsTorque;
65  std::vector<ControlTarget1DoFActuatorVelocity*> targetsVel;
66 
67  std::vector<size_t> torqueControlledIndex;
68  std::vector<size_t> velocityControlledIndex;
69 
70  /// names
71  std::string kinematicChainName;
72  std::vector<std::string> jointNames;
73 
74  /// controller (maths)
76 
77  /// set data containers and buffers
84 
90 
91  /// flags
92  std::atomic_bool rtFirstRun{true};
93  std::atomic_bool rtReady{false};
94  std::atomic_bool reInitPreActivate{false};
95 
96  /// robot
98  };
99 
100  using ArmPtr = std::unique_ptr<ArmData>;
101 
103  const NJointControllerConfigPtr& config,
104  const VirtualRobot::RobotPtr&);
105 
106  std::string getClassName(const Ice::Current& = Ice::emptyCurrent) const override;
107 
108  void rtRun(const IceUtil::Time& sensorValuesTimestamp,
109  const IceUtil::Time& timeSinceLastIteration) override;
110 
111  /// NJointController interface
113  const Ice::Current& iceCurrent = Ice::emptyCurrent) override;
114  bool updateTargetPose(const TargetPoseMap& targetPoseMap,
115  const TargetNullspaceMap& targetNullspaceMap,
116  const Ice::Current& = Ice::emptyCurrent) override;
118  getConfig(const Ice::Current& iceCurrent = Ice::emptyCurrent) override;
119 
120  Ice::FloatSeq getTCPVel(const std::string& rns,
121  const Ice::Current& iceCurrent = Ice::emptyCurrent) override;
122 
123  /// ft sensor
124  void calibrateFTSensor(const Ice::Current&) override;
125  void
126  enableSafeGuardForceTorque(const std::string& nodeSetName,
127  const bool forceGuard,
128  const bool torqueGuard,
129  const Ice::Current& iceCurrent = Ice::emptyCurrent) override;
130  bool isSafeForceTorque(const std::string& nodeSetName,
131  const Ice::Current& iceCurrent = Ice::emptyCurrent) override;
132 
133  protected:
134  virtual void additionalTask();
135  void validateConfigData(Config& config, ArmPtr& arm);
136  void onPublish(const SensorAndControl&,
138  const DebugObserverInterfacePrx&) override;
139 
140  void limbInit(const std::string nodeSetName,
141  ArmPtr& arm,
142  Config& cfg,
143  VirtualRobot::RobotPtr& nonRtRobotPtr);
144  void limbNonRT(ArmPtr& arm);
145  void limbRT(ArmPtr& arm, const double deltaT);
146  void limbPublish(ArmPtr& arm, const DebugObserverInterfacePrx& debugObs);
147  void limbReInit(ArmPtr& arm);
148 
149  protected:
150  std::map<std::string, ArmPtr> limb;
151  std::string limbName;
153  RobotUnitPtr robotUnit;
155 
156  protected:
157  /// NJointControllerBase interface
158  void onInitNJointController() override;
159  void rtPreActivateController() override;
160  void rtPostDeactivateController() override;
161  };
162 } // namespace armarx::control::njoint_controller::task_space
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::userConfig
ConfigDict userConfig
Definition: MixedImpedanceVelocityController.h:154
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::rtPreActivateController
void rtPreActivateController() override
This function is called before the controller is activated.
Definition: MixedImpedanceVelocityController.cpp:624
TaskspaceMixedImpedanceVelocityController.h
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::getClassName
std::string getClassName(const Ice::Current &=Ice::emptyCurrent) const override
Definition: MixedImpedanceVelocityController.cpp:161
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::rtRun
void rtRun(const IceUtil::Time &sensorValuesTimestamp, const IceUtil::Time &timeSinceLastIteration) override
TODO make protected and use attorneys.
Definition: MixedImpedanceVelocityController.cpp:331
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::onPublish
void onPublish(const SensorAndControl &, const DebugDrawerInterfacePrx &, const DebugObserverInterfacePrx &) override
Definition: MixedImpedanceVelocityController.cpp:531
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::limb
std::map< std::string, ArmPtr > limb
Definition: MixedImpedanceVelocityController.h:150
RobotUnit.h
armarx::SynchronousNJointController
Definition: NJointControllerBase.h:1145
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::ArmData::rtConfig
Config rtConfig
Definition: MixedImpedanceVelocityController.h:79
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::updateTargetPose
bool updateTargetPose(const TargetPoseMap &targetPoseMap, const TargetNullspaceMap &targetNullspaceMap, const Ice::Current &=Ice::emptyCurrent) override
Definition: MixedImpedanceVelocityController.cpp:415
armarx::control::njoint_controller::task_space
Definition: AdmittanceController.cpp:33
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::additionalTask
virtual void additionalTask()
Definition: MixedImpedanceVelocityController.cpp:201
armarx::control::common::SensorDevicesForNJointTorqueController
Definition: device.h:8
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::ArmData::nonRtConfig
Config nonRtConfig
set data containers and buffers
Definition: MixedImpedanceVelocityController.h:78
armarx::control::common::control_law::TaskspaceMixedImpedanceVelocityController::ConfigDict
common::control_law::arondto::TaskspaceMixedImpedanceVelocityControllerConfigDict ConfigDict
Definition: TaskspaceMixedImpedanceVelocityController.h:45
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::ArmData::reInitPreActivate
std::atomic_bool reInitPreActivate
Definition: MixedImpedanceVelocityController.h:94
armarx::NJointControllerBase::ConfigPtrT
NJointControllerConfigPtr ConfigPtrT
Definition: NJointControllerBase.h:586
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::ArmData::targetsVel
std::vector< ControlTarget1DoFActuatorVelocity * > targetsVel
Definition: MixedImpedanceVelocityController.h:65
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::ArmData::kinematicChainName
std::string kinematicChainName
names
Definition: MixedImpedanceVelocityController.h:71
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::ArmData::bufferRtStatusToUser
TripleBuffer< RtStatus > bufferRtStatusToUser
Definition: MixedImpedanceVelocityController.h:88
device.h
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::limbName
std::string limbName
Definition: MixedImpedanceVelocityController.h:151
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::limbInit
void limbInit(const std::string nodeSetName, ArmPtr &arm, Config &cfg, VirtualRobot::RobotPtr &nonRtRobotPtr)
Definition: MixedImpedanceVelocityController.cpp:41
armarx::control::NJointTaskspaceMixedImpedanceVelocityControllerInterface
Definition: ControllerInterface.ice:68
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::validateConfigData
void validateConfigData(Config &config, ArmPtr &arm)
Definition: MixedImpedanceVelocityController.cpp:458
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::ArmData::bufferRtStatusToOnPublish
TripleBuffer< RtStatus > bufferRtStatusToOnPublish
Definition: MixedImpedanceVelocityController.h:87
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::getConfig
::armarx::aron::data::dto::DictPtr getConfig(const Ice::Current &iceCurrent=Ice::emptyCurrent) override
Definition: MixedImpedanceVelocityController.cpp:447
armarx::detail::ControlThreadOutputBufferEntry
Definition: ControlThreadOutputBuffer.h:177
armarx::control::TargetNullspaceMap
dictionary< string, Ice::FloatSeq > TargetNullspaceMap
Definition: ControllerInterface.ice:40
armarx::control::common::control_law::TaskspaceMixedImpedanceVelocityController
Definition: TaskspaceMixedImpedanceVelocityController.h:40
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::ArmData::torqueControlledIndex
std::vector< size_t > torqueControlledIndex
Definition: MixedImpedanceVelocityController.h:67
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::ArmData::bufferConfigUserToNonRt
TripleBuffer< Config > bufferConfigUserToNonRt
Definition: MixedImpedanceVelocityController.h:80
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController
Brief description of class NJointTaskspaceMixedImpedanceVelocityController.
Definition: MixedImpedanceVelocityController.h:50
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::limbNonRT
void limbNonRT(ArmPtr &arm)
Definition: MixedImpedanceVelocityController.cpp:193
armarx::control::common::control_law::TaskspaceMixedImpedanceVelocityController::Config
common::control_law::arondto::TaskspaceMixedImpedanceVelocityControllerConfig Config
Definition: TaskspaceMixedImpedanceVelocityController.h:44
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::enableSafeGuardForceTorque
void enableSafeGuardForceTorque(const std::string &nodeSetName, const bool forceGuard, const bool torqueGuard, const Ice::Current &iceCurrent=Ice::emptyCurrent) override
Definition: MixedImpedanceVelocityController.cpp:371
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::ArmData::nonRtRobot
VirtualRobot::RobotPtr nonRtRobot
robot
Definition: MixedImpedanceVelocityController.h:97
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::ArmData::bufferConfigRtToOnPublish
TripleBuffer< Config > bufferConfigRtToOnPublish
Definition: MixedImpedanceVelocityController.h:82
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::NJointTaskspaceMixedImpedanceVelocityController
NJointTaskspaceMixedImpedanceVelocityController(const RobotUnitPtr &robotUnit, const NJointControllerConfigPtr &config, const VirtualRobot::RobotPtr &)
Definition: MixedImpedanceVelocityController.cpp:138
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::ArmData::bufferConfigNonRtToRt
TripleBuffer< Config > bufferConfigNonRtToRt
Definition: MixedImpedanceVelocityController.h:81
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::isSafeForceTorque
bool isSafeForceTorque(const std::string &nodeSetName, const Ice::Current &iceCurrent=Ice::emptyCurrent) override
Definition: MixedImpedanceVelocityController.cpp:397
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::limbReInit
void limbReInit(ArmPtr &arm)
Definition: MixedImpedanceVelocityController.cpp:552
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::getTCPVel
Ice::FloatSeq getTCPVel(const std::string &rns, const Ice::Current &iceCurrent=Ice::emptyCurrent) override
Definition: MixedImpedanceVelocityController.cpp:343
armarx::control::common::control_law
This file is part of ArmarX.
Definition: aron_conversions.cpp:68
ControlTarget1DoFActuator.h
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::ArmData::sensorDevices
common::SensorDevicesForNJointTorqueController sensorDevices
devices
Definition: MixedImpedanceVelocityController.h:63
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::nonRtRobot
VirtualRobot::RobotPtr nonRtRobot
Definition: MixedImpedanceVelocityController.h:152
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::ArmData::velocityControlledIndex
std::vector< size_t > velocityControlledIndex
Definition: MixedImpedanceVelocityController.h:68
armarx::armem::Time
armarx::core::time::DateTime Time
Definition: forward_declarations.h:13
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::limbRT
void limbRT(ArmPtr &arm, const double deltaT)
Definition: MixedImpedanceVelocityController.cpp:231
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::ArmData::controller
law::TaskspaceMixedImpedanceVelocityController controller
controller (maths)
Definition: MixedImpedanceVelocityController.h:75
armarx::control::NJointTaskspaceMixedImpedanceVelocityControllerInterface::calibrateFTSensor
void calibrateFTSensor()
ft sensor
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::onInitNJointController
void onInitNJointController() override
NJointControllerBase interface.
Definition: MixedImpedanceVelocityController.cpp:167
NJointController.h
armarx::aron::data::DictPtr
std::shared_ptr< Dict > DictPtr
Definition: Dict.h:41
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::rtPostDeactivateController
void rtPostDeactivateController() override
This function is called after the controller is deactivated.
Definition: MixedImpedanceVelocityController.cpp:635
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::updateConfig
void updateConfig(const ::armarx::aron::data::dto::DictPtr &dto, const Ice::Current &iceCurrent=Ice::emptyCurrent) override
NJointController interface.
Definition: MixedImpedanceVelocityController.cpp:357
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::ArmData::targetsTorque
std::vector< ControlTarget1DoFActuatorTorque * > targetsTorque
Definition: MixedImpedanceVelocityController.h:64
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::ArmData::rtFirstRun
std::atomic_bool rtFirstRun
flags
Definition: MixedImpedanceVelocityController.h:92
IceInternal::ProxyHandle<::IceProxy::armarx::DebugDrawerInterface >
armarx::control::TargetPoseMap
dictionary< string, FloatSeqSeq > TargetPoseMap
Definition: ControllerInterface.ice:39
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::ArmData::jointNames
std::vector< std::string > jointNames
Definition: MixedImpedanceVelocityController.h:72
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::Config
law::TaskspaceMixedImpedanceVelocityController::Config Config
Definition: MixedImpedanceVelocityController.h:56
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::ArmData::bufferRtStatusToNonRt
TripleBuffer< RtStatus > bufferRtStatusToNonRt
Definition: MixedImpedanceVelocityController.h:89
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::RtStatus
law::TaskspaceMixedImpedanceVelocityController::RtStatus RtStatus
Definition: MixedImpedanceVelocityController.h:58
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::ArmData::rtStatusInNonRT
RtStatus rtStatusInNonRT
Definition: MixedImpedanceVelocityController.h:85
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::ArmData
Definition: MixedImpedanceVelocityController.h:60
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::limbPublish
void limbPublish(ArmPtr &arm, const DebugObserverInterfacePrx &debugObs)
Definition: MixedImpedanceVelocityController.cpp:507
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::ArmPtr
std::unique_ptr< ArmData > ArmPtr
Definition: MixedImpedanceVelocityController.h:100
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::ArmData::bufferConfigRtToUser
TripleBuffer< Config > bufferConfigRtToUser
Definition: MixedImpedanceVelocityController.h:83
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::robotUnit
RobotUnitPtr robotUnit
Definition: MixedImpedanceVelocityController.h:153
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::ConfigDict
law::TaskspaceMixedImpedanceVelocityController::ConfigDict ConfigDict
Definition: MixedImpedanceVelocityController.h:57
VirtualRobot::RobotPtr
std::shared_ptr< class Robot > RobotPtr
Definition: Bus.h:18
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::ArmData::rtReady
std::atomic_bool rtReady
Definition: MixedImpedanceVelocityController.h:93
armarx::TripleBuffer< Config >
armarx::control::njoint_controller::task_space::NJointTaskspaceMixedImpedanceVelocityController::ArmData::rtStatus
RtStatus rtStatus
Definition: MixedImpedanceVelocityController.h:86