NJointTaskSpaceImpedanceDMPController.h
Go to the documentation of this file.
1 #pragma once
2 // DMP
3 #include <dmp/representation/dmp/umidmp.h>
4 
5 // armarx
8 
9 // control
10 #include <armarx/control/deprecated_njoint_mp_controller/task_space/TaskSpaceImpedanceDMPControllerInterface.h>
11 
12 namespace armarx
13 {
14  class SensorValue1DoFActuatorTorque;
15  class SensorValue1DoFActuatorVelocity;
16  class SensorValue1DoFActuatorPosition;
17  class ControlTarget1DoFActuatorTorque;
18  class SensorValueForceTorque;
19 } // namespace armarx
20 
21 namespace armarx
22 {
23  class SensorValueForceTorque;
24 
25  class ControlTarget1DoFActuatorTorque;
26 
27  namespace control::deprecated_njoint_mp_controller::tsvmp
28  {
30 
31  using TaskSpaceDMPControllerPtr = std::shared_ptr<TaskSpaceDMPController>;
32  } // namespace control::deprecated_njoint_mp_controller::tsvmp
33 } // namespace armarx
34 
36 {
38 
39  TYPEDEF_PTRS_HANDLE(NJointTaskSpaceImpedanceDMPController);
40  TYPEDEF_PTRS_HANDLE(NJointTaskSpaceImpedanceDMPControllerControlData);
41 
43  {
44  public:
45  Eigen::VectorXf targetVel;
47  Eigen::VectorXf desiredNullSpaceJointValues;
48  double canVal;
49  double mpcFactor;
50  };
51 
52  /**
53  * @brief The NJointTaskSpaceImpedanceDMPController class
54  * @ingroup Library-RobotUnit-NJointControllers
55  */
57  public NJointControllerWithTripleBuffer<NJointTaskSpaceImpedanceDMPControllerControlData>,
59  {
60  public:
61  using ConfigPtrT = NJointTaskSpaceImpedanceDMPControllerConfigPtr;
63  const NJointControllerConfigPtr& config,
64  const VirtualRobot::RobotPtr&);
65 
66  // NJointControllerInterface interface
67  std::string getClassName(const Ice::Current&) const override;
68 
69  // NJointController interface
70 
71  void rtRun(const IceUtil::Time& sensorValuesTimestamp,
72  const IceUtil::Time& timeSinceLastIteration) override;
73 
74  // NJointTaskSpaceImpedanceDMPControllerInterface interface
75  void learnDMPFromFiles(const Ice::StringSeq& fileNames, const Ice::Current&) override;
76 
77  bool
78  isFinished(const Ice::Current&) override
79  {
80  return finished;
81  }
82 
83  bool
84  isDMPRunning(const Ice::Current&) override
85  {
86  return started;
87  }
88 
89  void
90  setViaPoints(Ice::Double u, const Ice::DoubleSeq& viapoint, const Ice::Current&) override;
91  void setGoals(const Ice::DoubleSeq& goals, const Ice::Current&) override;
92 
93  void learnJointDMPFromFiles(const std::string& fileName,
94  const Ice::FloatSeq& currentJVS,
95  const Ice::Current&) override;
96  void runDMP(const Ice::DoubleSeq& goals,
97  const Ice::Current& iceCurrent = Ice::emptyCurrent) override;
98  void runDMPWithTime(const Ice::DoubleSeq& goals,
99  Ice::Double timeDuration,
100  const Ice::Current&) override;
101 
102  Ice::Double getVirtualTime(const Ice::Current&) override;
103 
104  void stopDMP(const Ice::Current&) override;
105  void resumeDMP(const Ice::Current&) override;
106  void resetDMP(const Ice::Current&) override;
107 
108  void setMPWeights(const DoubleSeqSeq& weights, const Ice::Current&) override;
109  DoubleSeqSeq getMPWeights(const Ice::Current&) override;
110 
111  void removeAllViaPoints(const Ice::Current&) override;
112 
113  void setLinearVelocityKd(const Eigen::Vector3f& kd, const Ice::Current&) override;
114  void setLinearVelocityKp(const Eigen::Vector3f& kp, const Ice::Current&) override;
115  void setAngularVelocityKd(const Eigen::Vector3f& kd, const Ice::Current&) override;
116  void setAngularVelocityKp(const Eigen::Vector3f& kp, const Ice::Current&) override;
117  void setNullspaceVelocityKd(const Eigen::VectorXf& kd, const Ice::Current&) override;
118  void setNullspaceVelocityKp(const Eigen::VectorXf& kp, const Ice::Current&) override;
119  void setUseNullSpaceJointDMP(bool enable, const Ice::Current&) override;
120  void setDefaultNullSpaceJointValues(const Eigen::VectorXf& jointValues,
121  const Ice::Current&) override;
122 
123  void
124  enableForceStop(const Ice::Current&) override
125  {
126  useForceStop = true;
127  }
128 
129  void
130  disableForceStop(const Ice::Current&) override
131  {
132  useForceStop = false;
133  }
134 
135  void
136  setForceThreshold(const Eigen::Vector3f& f, const Ice::Current& current) override
137  {
138  forceThreshold.getWriteBuffer() = f;
139  forceThreshold.commitWrite();
140  }
141 
142  protected:
143  virtual void onPublish(const SensorAndControl&,
145  const DebugObserverInterfacePrx&) override;
146 
147  void onInitNJointController() override;
148  void onDisconnectNJointController() override;
149  void controllerRun();
150 
151  private:
152  struct DebugBufferData
153  {
154  double currentCanVal;
155  double mpcfactor;
156  float targetPose_x;
157  float targetPose_y;
158  float targetPose_z;
159  float targetPose_qw;
160  float targetPose_qx;
161  float targetPose_qy;
162  float targetPose_qz;
163 
164  float currentPose_x;
165  float currentPose_y;
166  float currentPose_z;
167  float currentPose_qw;
168  float currentPose_qx;
169  float currentPose_qy;
170  float currentPose_qz;
171 
172  float currentKpos_x;
173  float currentKpos_y;
174  float currentKpos_z;
175  float currentKori_x;
176  float currentKori_y;
177  float currentKori_z;
178  float currentKnull_x;
179  float currentKnull_y;
180  float currentKnull_z;
181 
182  float currentDpos_x;
183  float currentDpos_y;
184  float currentDpos_z;
185  float currentDori_x;
186  float currentDori_y;
187  float currentDori_z;
188  float currentDnull_x;
189  float currentDnull_y;
190  float currentDnull_z;
191 
192  StringFloatDictionary desired_torques;
193  StringFloatDictionary desired_nullspaceJoint;
194  float forceDesired_x;
195  float forceDesired_y;
196  float forceDesired_z;
197  float forceDesired_rx;
198  float forceDesired_ry;
199  float forceDesired_rz;
200 
201  float deltaT;
202  };
203 
205 
206  struct NJointTaskSpaceImpedanceDMPControllerSensorData
207  {
208  double currentTime;
209  double deltaT;
210  Eigen::Matrix4f currentPose;
211  Eigen::VectorXf currentTwist;
212  };
213 
215  controllerSensorData;
216 
217  struct NJointTaskSpaceImpedanceDMPControllerInterfaceData
218  {
219  Eigen::Matrix4f currentTcpPose;
220  };
221 
223 
224  struct CtrlParams
225  {
226  Eigen::Vector3f kpos;
227  Eigen::Vector3f dpos;
228  Eigen::Vector3f kori;
229  Eigen::Vector3f dori;
230  Eigen::VectorXf knull;
231  Eigen::VectorXf dnull;
232  };
233 
234  WriteBufferedTripleBuffer<CtrlParams> ctrlParams;
235 
236 
237  DMP::Vec<DMP::DMPState> currentJointState;
238  DMP::UMIDMPPtr nullSpaceJointDMPPtr;
239 
241 
242  std::vector<const SensorValue1DoFActuatorTorque*> torqueSensors;
243  std::vector<const SensorValue1DoFActuatorVelocity*> velocitySensors;
244  std::vector<const SensorValue1DoFActuatorPosition*> positionSensors;
245  std::vector<ControlTarget1DoFActuatorTorque*> targets;
246 
247  // velocity ik controller parameters
248  // dmp parameters
249  double timeDuration;
250  bool finished;
251  VirtualRobot::RobotNodeSetPtr rns;
252 
253  // phaseStop parameters
254  double phaseL;
255  double phaseK;
256  double phaseDist0;
257  double phaseDist1;
258  double posToOriRatio;
259 
260 
261  NJointTaskSpaceImpedanceDMPControllerConfigPtr cfg;
262  VirtualRobot::DifferentialIKPtr ik;
263  VirtualRobot::RobotNodePtr tcp;
264 
265  float torqueLimit;
266 
267  // Eigen::Vector3f kpos;
268  // Eigen::Vector3f kori;
269  // Eigen::Vector3f dpos;
270  // Eigen::Vector3f dori;
271  // Eigen::VectorXf knull;
272  // Eigen::VectorXf dnull;
273  int numOfJoints;
274 
275  std::atomic_bool useNullSpaceJointDMP;
276  bool isNullSpaceJointDMPLearned;
277 
278 
279  WriteBufferedTripleBuffer<Eigen::VectorXf> defaultNullSpaceJointValues;
280  std::vector<std::string> jointNames;
281  mutable MutexType controllerMutex;
283  std::atomic_bool firstRun;
284  std::atomic_bool started = false;
285  std::atomic_bool stopped = false;
286  std::atomic_bool prematurely_stopped = false;
287 
288  Eigen::Matrix4f stopPose;
289 
290  Eigen::Vector3f filteredForce;
291  Eigen::Vector3f forceOffset;
292  Eigen::Vector3f filteredForceInRoot;
293  WriteBufferedTripleBuffer<Eigen::Vector3f> forceThreshold;
294  std::atomic<bool> useForceStop;
295  std::atomic<float> timeForCalibration;
296  const SensorValueForceTorque* forceSensor;
297 
298  Eigen::Matrix4f oldPose;
299  // NJointController interface
300  protected:
302  };
303 
304 } // namespace armarx::control::deprecated_njoint_mp_controller::task_space
armarx::NJointTaskSpaceImpedanceDMPControllerInterface::getVirtualTime
double getVirtualTime()
armarx::control::deprecated_njoint_mp_controller::task_space::NJointTaskSpaceImpedanceDMPController::disableForceStop
void disableForceStop(const Ice::Current &) override
Definition: NJointTaskSpaceImpedanceDMPController.h:130
boost::shared_ptr< class UMIDMP >
armarx::control::deprecated_njoint_mp_controller::task_space::NJointTaskSpaceImpedanceDMPController::isFinished
bool isFinished(const Ice::Current &) override
Definition: NJointTaskSpaceImpedanceDMPController.h:78
armarx::NJointTaskSpaceImpedanceDMPControllerInterface::resumeDMP
void resumeDMP()
armarx::NJointControllerWithTripleBuffer
Definition: NJointControllerWithTripleBuffer.h:10
RobotUnit.h
armarx::WriteBufferedTripleBuffer::commitWrite
void commitWrite()
Definition: TripleBuffer.h:383
GfxTL::Matrix4f
MatrixXX< 4, 4, float > Matrix4f
Definition: MatrixXX.h:650
armarx::control::deprecated_njoint_mp_controller::task_space::NJointTaskSpaceImpedanceDMPController::setViaPoints
void setViaPoints(Ice::Double u, const Ice::DoubleSeq &viapoint, const Ice::Current &) override
Definition: NJointTaskSpaceImpedanceDMPController.cpp:510
armarx::control::deprecated_njoint_mp_controller::task_space
Definition: DeprecatedNJointPeriodicTSDMPCompliantController.cpp:20
armarx::NJointControllerBase::ConfigPtrT
NJointControllerConfigPtr ConfigPtrT
Definition: NJointControllerBase.h:587
armarx::PeriodicTask::pointer_type
IceUtil::Handle< PeriodicTask< T > > pointer_type
Shared pointer type for convenience.
Definition: PeriodicTask.h:68
armarx::control::deprecated_njoint_mp_controller::task_space::NJointTaskSpaceImpedanceDMPController::setGoals
void setGoals(const Ice::DoubleSeq &goals, const Ice::Current &) override
Definition: NJointTaskSpaceImpedanceDMPController.cpp:520
armarx::control::deprecated_njoint_mp_controller::task_space::NJointTaskSpaceImpedanceDMPController::learnDMPFromFiles
void learnDMPFromFiles(const Ice::StringSeq &fileNames, const Ice::Current &) override
Definition: NJointTaskSpaceImpedanceDMPController.cpp:502
armarx::control::deprecated_njoint_mp_controller::task_space::NJointTaskSpaceImpedanceDMPController::rtRun
void rtRun(const IceUtil::Time &sensorValuesTimestamp, const IceUtil::Time &timeSinceLastIteration) override
TODO make protected and use attorneys.
Definition: NJointTaskSpaceImpedanceDMPController.cpp:275
armarx::detail::ControlThreadOutputBufferEntry
Definition: ControlThreadOutputBuffer.h:182
armarx::VariantType::Double
const VariantTypeId Double
Definition: Variant.h:920
armarx::control::deprecated_njoint_mp_controller::task_space::NJointTaskSpaceImpedanceDMPController::setMPWeights
void setMPWeights(const DoubleSeqSeq &weights, const Ice::Current &) override
Definition: NJointTaskSpaceImpedanceDMPController.cpp:782
armarx::control::deprecated_njoint_mp_controller::task_space::NJointTaskSpaceImpedanceDMPController::setAngularVelocityKp
void setAngularVelocityKp(const Eigen::Vector3f &kp, const Ice::Current &) override
Definition: NJointTaskSpaceImpedanceDMPController.cpp:848
armarx::NJointTaskSpaceImpedanceDMPControllerInterface::getMPWeights
DoubleSeqSeq getMPWeights()
armarx::control::deprecated_njoint_mp_controller::task_space::NJointTaskSpaceImpedanceDMPController
The NJointTaskSpaceImpedanceDMPController class.
Definition: NJointTaskSpaceImpedanceDMPController.h:56
armarx::NJointTaskSpaceImpedanceDMPControllerInterface::resetDMP
void resetDMP()
armarx::control::deprecated_njoint_mp_controller::task_space::NJointTaskSpaceImpedanceDMPControllerControlData::desiredNullSpaceJointValues
Eigen::VectorXf desiredNullSpaceJointValues
Definition: NJointTaskSpaceImpedanceDMPController.h:47
armarx::control::deprecated_njoint_mp_controller::task_space::NJointTaskSpaceImpedanceDMPController::runDMPWithTime
void runDMPWithTime(const Ice::DoubleSeq &goals, Ice::Double timeDuration, const Ice::Current &) override
Definition: NJointTaskSpaceImpedanceDMPController.cpp:593
armarx::control::deprecated_njoint_mp_controller::task_space::NJointTaskSpaceImpedanceDMPController::isDMPRunning
bool isDMPRunning(const Ice::Current &) override
Definition: NJointTaskSpaceImpedanceDMPController.h:84
armarx::control::deprecated_njoint_mp_controller::task_space::NJointTaskSpaceImpedanceDMPController::setForceThreshold
void setForceThreshold(const Eigen::Vector3f &f, const Ice::Current &current) override
Definition: NJointTaskSpaceImpedanceDMPController.h:136
armarx::control::deprecated_njoint_mp_controller::task_space::NJointTaskSpaceImpedanceDMPControllerControlData
Definition: NJointTaskSpaceImpedanceDMPController.h:42
armarx::control::deprecated_njoint_mp_controller::task_space::NJointTaskSpaceImpedanceDMPController::onInitNJointController
void onInitNJointController() override
Definition: NJointTaskSpaceImpedanceDMPController.cpp:755
armarx::WriteBufferedTripleBuffer::getWriteBuffer
T & getWriteBuffer()
Definition: TripleBuffer.h:325
armarx::control::deprecated_njoint_mp_controller::tsvmp
Definition: NJointTaskSpaceImpedanceDMPController.h:27
armarx::control::deprecated_njoint_mp_controller::task_space::NJointTaskSpaceImpedanceDMPControllerControlData::targetPose
Eigen::Matrix4f targetPose
Definition: NJointTaskSpaceImpedanceDMPController.h:46
armarx::control::deprecated_njoint_mp_controller::task_space::NJointTaskSpaceImpedanceDMPController::setLinearVelocityKd
void setLinearVelocityKd(const Eigen::Vector3f &kd, const Ice::Current &) override
Definition: NJointTaskSpaceImpedanceDMPController.cpp:815
armarx::armem::Time
armarx::core::time::DateTime Time
Definition: forward_declarations.h:13
armarx::control::deprecated_njoint_mp_controller::task_space::NJointTaskSpaceImpedanceDMPController::setAngularVelocityKd
void setAngularVelocityKd(const Eigen::Vector3f &kd, const Ice::Current &) override
Definition: NJointTaskSpaceImpedanceDMPController.cpp:837
armarx::control::deprecated_njoint_mp_controller::task_space::NJointTaskSpaceImpedanceDMPController::learnJointDMPFromFiles
void learnJointDMPFromFiles(const std::string &fileName, const Ice::FloatSeq &currentJVS, const Ice::Current &) override
Definition: NJointTaskSpaceImpedanceDMPController.cpp:527
NJointController.h
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPControllerPtr
std::shared_ptr< TaskSpaceDMPController > TaskSpaceDMPControllerPtr
Definition: NJointTaskSpaceImpedanceDMPController.h:31
armarx::control::deprecated_njoint_mp_controller::task_space::NJointTaskSpaceImpedanceDMPController::setUseNullSpaceJointDMP
void setUseNullSpaceJointDMP(bool enable, const Ice::Current &) override
Definition: NJointTaskSpaceImpedanceDMPController.cpp:587
armarx::control::deprecated_njoint_mp_controller::task_space::NJointTaskSpaceImpedanceDMPControllerControlData::targetVel
Eigen::VectorXf targetVel
Definition: NJointTaskSpaceImpedanceDMPController.h:45
armarx::control::deprecated_njoint_mp_controller::task_space::NJointTaskSpaceImpedanceDMPController::getClassName
std::string getClassName(const Ice::Current &) const override
Definition: NJointTaskSpaceImpedanceDMPController.cpp:160
armarx::control::deprecated_njoint_mp_controller::task_space::NJointTaskSpaceImpedanceDMPController::controllerRun
void controllerRun()
Definition: NJointTaskSpaceImpedanceDMPController.cpp:178
armarx::control::deprecated_njoint_mp_controller::task_space::NJointTaskSpaceImpedanceDMPController::enableForceStop
void enableForceStop(const Ice::Current &) override
Definition: NJointTaskSpaceImpedanceDMPController.h:124
armarx::NJointControllerWithTripleBuffer< NJointTaskSpaceImpedanceDMPControllerControlData >::MutexType
std::recursive_mutex MutexType
Definition: NJointControllerWithTripleBuffer.h:13
IceUtil::Handle< class RobotUnit >
IceInternal::ProxyHandle<::IceProxy::armarx::DebugDrawerInterface >
armarx::control::deprecated_njoint_mp_controller::task_space::NJointTaskSpaceImpedanceDMPController::setLinearVelocityKp
void setLinearVelocityKp(const Eigen::Vector3f &kp, const Ice::Current &) override
Definition: NJointTaskSpaceImpedanceDMPController.cpp:826
armarx::NJointTaskSpaceImpedanceDMPControllerInterface::removeAllViaPoints
void removeAllViaPoints()
armarx::control::deprecated_njoint_mp_controller::task_space::TYPEDEF_PTRS_HANDLE
TYPEDEF_PTRS_HANDLE(DeprecatedNJointPeriodicTSDMPCompliantController)
armarx::WriteBufferedTripleBuffer< DebugBufferData >
armarx::control::deprecated_njoint_mp_controller::task_space::NJointTaskSpaceImpedanceDMPController::onDisconnectNJointController
void onDisconnectNJointController() override
Definition: NJointTaskSpaceImpedanceDMPController.cpp:776
armarx::control::deprecated_njoint_mp_controller::task_space::NJointTaskSpaceImpedanceDMPController::runDMP
void runDMP(const Ice::DoubleSeq &goals, const Ice::Current &iceCurrent=Ice::emptyCurrent) override
Definition: NJointTaskSpaceImpedanceDMPController.cpp:604
armarx::NJointTaskSpaceImpedanceDMPControllerInterface
Definition: TaskSpaceImpedanceDMPControllerInterface.ice:71
armarx::control::deprecated_njoint_mp_controller::task_space::NJointTaskSpaceImpedanceDMPController::setNullspaceVelocityKd
void setNullspaceVelocityKd(const Eigen::VectorXf &kd, const Ice::Current &) override
Definition: NJointTaskSpaceImpedanceDMPController.cpp:859
armarx::control::deprecated_njoint_mp_controller::task_space::NJointTaskSpaceImpedanceDMPController::setNullspaceVelocityKp
void setNullspaceVelocityKp(const Eigen::VectorXf &kp, const Ice::Current &) override
Definition: NJointTaskSpaceImpedanceDMPController.cpp:870
armarx::control::deprecated_njoint_mp_controller::task_space::NJointTaskSpaceImpedanceDMPController::rtPreActivateController
void rtPreActivateController()
This function is called before the controller is activated.
Definition: NJointTaskSpaceImpedanceDMPController.cpp:166
armarx::control::deprecated_njoint_mp_controller::task_space::NJointTaskSpaceImpedanceDMPController::onPublish
virtual void onPublish(const SensorAndControl &, const DebugDrawerInterfacePrx &, const DebugObserverInterfacePrx &) override
Definition: NJointTaskSpaceImpedanceDMPController.cpp:648
armarx::control::deprecated_njoint_mp_controller::task_space::NJointTaskSpaceImpedanceDMPControllerControlData::canVal
double canVal
Definition: NJointTaskSpaceImpedanceDMPController.h:48
armarx::control::deprecated_njoint_mp_controller::tsvmp::TaskSpaceDMPController
Brief description of class TaskSpaceDMPController.
Definition: TaskSpaceVMP.h:90
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:27
armarx::NJointTaskSpaceImpedanceDMPControllerInterface::stopDMP
void stopDMP()
armarx::control::deprecated_njoint_mp_controller::task_space::NJointTaskSpaceImpedanceDMPController::setDefaultNullSpaceJointValues
void setDefaultNullSpaceJointValues(const Eigen::VectorXf &jointValues, const Ice::Current &) override
Definition: NJointTaskSpaceImpedanceDMPController.cpp:881
VirtualRobot::RobotPtr
std::shared_ptr< class Robot > RobotPtr
Definition: Bus.h:19
armarx::control::deprecated_njoint_mp_controller::task_space::NJointTaskSpaceImpedanceDMPController::NJointTaskSpaceImpedanceDMPController
NJointTaskSpaceImpedanceDMPController(const RobotUnitPtr &robotUnit, const NJointControllerConfigPtr &config, const VirtualRobot::RobotPtr &)
Definition: NJointTaskSpaceImpedanceDMPController.cpp:29
armarx::control::deprecated_njoint_mp_controller::task_space::NJointTaskSpaceImpedanceDMPControllerControlData::mpcFactor
double mpcFactor
Definition: NJointTaskSpaceImpedanceDMPController.h:49