NJointCCDMPController.h
Go to the documentation of this file.
1 #pragma once
2 
3 
4 // Simox
5 #include <VirtualRobot/IK/IKSolver.h>
6 #include <VirtualRobot/VirtualRobot.h>
7 
9 
10 // DMP
11 #include <dmp/representation/dmp/umitsmp.h>
12 
13 // armarx
16 
17 // control
18 #include <armarx/control/deprecated_njoint_mp_controller/task_space/ControllerInterface.h>
19 
20 namespace armarx
21 {
22  class SensorValue1DoFActuatorTorque;
23  class SensorValue1DoFActuatorVelocity;
24  class SensorValue1DoFActuatorPosition;
25  class SensorValue1DoFGravityTorque;
26  class ControlTarget1DoFActuatorTorque;
27  class ControlTarget1DoFActuatorVelocity;
28  class SensorValueForceTorque;
29 } // namespace armarx
30 
32 {
33 
34  TYPEDEF_PTRS_HANDLE(NJointCCDMPController);
35  TYPEDEF_PTRS_HANDLE(NJointCCDMPControllerControlData);
36 
37  using ViaPoint = std::pair<double, DMP::DVec>;
38  using ViaPointsSet = std::vector<ViaPoint>;
39 
41  {
42  public:
43  Eigen::VectorXf targetTSVel;
44  // cartesian velocity control data
45  std::vector<float> nullspaceJointVelocities;
46  float avoidJointLimitsKp = 0;
47  std::vector<float> torqueKp;
48  std::vector<float> torqueKd;
49  VirtualRobot::IKSolver::CartesianSelection mode = VirtualRobot::IKSolver::All;
50  };
51 
52  /**
53  * @brief The NJointCCDMPController class
54  * @ingroup Library-RobotUnit-NJointControllers
55  */
57  public NJointControllerWithTripleBuffer<NJointCCDMPControllerControlData>,
59  {
60  class pidController
61  {
62  public:
63  float Kp = 0, Kd = 0;
64  float lastError = 0;
65 
66  float
67  update(float dt, float error)
68  {
69  float derivative = (error - lastError) / dt;
70  float retVal = Kp * error + Kd * derivative;
71  lastError = error;
72  return retVal;
73  }
74  };
75 
76  public:
77  using ConfigPtrT = NJointCCDMPControllerConfigPtr;
78  NJointCCDMPController(const RobotUnitPtr& robotUnit,
79  const NJointControllerConfigPtr& config,
80  const VirtualRobot::RobotPtr&);
81 
82  // NJointControllerInterface interface
83  std::string getClassName(const Ice::Current&) const override;
84 
85  // NJointController interface
86 
87  void rtRun(const IceUtil::Time& sensorValuesTimestamp,
88  const IceUtil::Time& timeSinceLastIteration) override;
89 
90  // NJointCCDMPControllerInterface interface
91  void
92  learnDMPFromFiles(int dmpId, const Ice::StringSeq& fileNames, const Ice::Current&) override;
93 
94  bool
95  isFinished(const Ice::Current&) override
96  {
97  return finished;
98  }
99 
100  void runDMP(const Ice::Current&) override;
101  void setTemporalFactor(int dmpId, Ice::Double tau, const Ice::Current&) override;
102  void setViaPoints(int dmpId,
103  Ice::Double u,
104  const Ice::DoubleSeq& viapoint,
105  const Ice::Current&) override;
106  void setGoals(int dmpId, const Ice::DoubleSeq& goals, const Ice::Current&) override;
107 
108  void setControllerTarget(Ice::Float avoidJointLimitsKp,
110  const Ice::Current&) override;
111  void setTorqueKp(const StringFloatDictionary& torqueKp, const Ice::Current&) override;
112  void setNullspaceJointVelocities(const StringFloatDictionary& nullspaceJointVelocities,
113  const Ice::Current&) override;
114 
115  protected:
116  void rtPreActivateController() override;
117  void rtPostDeactivateController() override;
120  virtual void onPublish(const SensorAndControl&,
122  const DebugObserverInterfacePrx&) override;
123 
124  void onInitNJointController() override;
125  void onDisconnectNJointController() override;
126  void controllerRun();
127 
128  private:
129  struct DebugBufferData
130  {
131  StringFloatDictionary latestTargetVelocities;
132  StringFloatDictionary dmpTargets;
133  StringFloatDictionary realTCP;
134 
135  double mpcFactor;
136  double error;
137  double phaseStop;
138  double posError;
139  double oriError;
140  double deltaT;
141  double canVal0;
142  };
143 
144  TripleBuffer<DebugBufferData> debugOutputData;
145 
146  struct NJointCCDMPControllerSensorData
147  {
148  double currentTime;
149  double deltaT;
150  Eigen::Matrix4f currentPose;
151  };
152 
154 
155  std::vector<const SensorValue1DoFActuatorTorque*> torqueSensors;
156  std::vector<const SensorValue1DoFGravityTorque*> gravityTorqueSensors;
157  std::vector<ControlTarget1DoFActuatorVelocity*> targets;
158 
159  // velocity ik controller parameters
160  std::vector<pidController> torquePIDs;
161  CartesianVelocityControllerPtr tcpController;
162  std::string nodeSetName;
163 
164  // dmp parameters
165  std::vector<DMP::UMITSMPPtr> dmpPtrList;
166  std::vector<double> canVals;
167  std::vector<double> timeDurations;
168  std::vector<std::string> dmpTypes;
169  std::vector<double> amplitudes;
170 
171  std::vector<DMP::Vec<DMP::DMPState>> currentStates;
172  std::vector<DMP::DVec> targetSubStates;
173 
174  bool finished;
175  double tau;
176  ViaPointsSet viaPoints;
177  bool isDisturbance;
178 
179 
180  // phaseStop parameters
181  double phaseL;
182  double phaseK;
183  double phaseDist0;
184  double phaseDist1;
185  double phaseKpPos;
186  double phaseKpOri;
187 
188  double posToOriRatio;
189 
190  Eigen::VectorXf targetVels;
191 
192  std::vector<int> learnedDMP;
193 
194 
195  NJointCCDMPControllerConfigPtr cfg;
196  VirtualRobot::RobotNodePtr tcp;
197  Eigen::Vector3f tcpPosition;
198  Eigen::Quaterniond tcpOrientation;
199 
200  Eigen::Matrix4f oldPose;
201  VirtualRobot::DifferentialIKPtr ik;
202 
203  DMP::DVec targetState;
204  mutable MutexType controllerMutex;
206  };
207 
208 } // namespace armarx::control::deprecated_njoint_mp_controller::task_space
armarx::control::deprecated_njoint_mp_controller::task_space::ViaPointsSet
std::vector< ViaPoint > ViaPointsSet
Definition: DeprecatedNJointTSDMPController.h:37
armarx::control::deprecated_njoint_mp_controller::task_space::NJointCCDMPController::ModeFromIce
VirtualRobot::IKSolver::CartesianSelection ModeFromIce(const NJointTaskSpaceDMPControllerMode::CartesianSelection mode)
Definition: NJointCCDMPController.cpp:508
armarx::VariantType::Float
const VariantTypeId Float
Definition: Variant.h:919
NJointControllerWithTripleBuffer.h
armarx::NJointControllerWithTripleBuffer
Definition: NJointControllerWithTripleBuffer.h:10
armarx::control::deprecated_njoint_mp_controller::task_space::NJointCCDMPController::setTemporalFactor
void setTemporalFactor(int dmpId, Ice::Double tau, const Ice::Current &) override
Definition: NJointCCDMPController.cpp:572
armarx::control::deprecated_njoint_mp_controller::task_space::NJointCCDMPController::setControllerTarget
void setControllerTarget(Ice::Float avoidJointLimitsKp, NJointTaskSpaceDMPControllerMode::CartesianSelection mode, const Ice::Current &) override
Definition: NJointCCDMPController.cpp:496
GfxTL::Matrix4f
MatrixXX< 4, 4, float > Matrix4f
Definition: MatrixXX.h:650
armarx::control::deprecated_njoint_mp_controller::task_space::NJointCCDMPControllerControlData::torqueKd
std::vector< float > torqueKd
Definition: NJointCCDMPController.h:48
armarx::control::deprecated_njoint_mp_controller::task_space
Definition: DeprecatedNJointPeriodicTSDMPCompliantController.cpp:20
PeriodicTask.h
armarx::NJointControllerBase::ConfigPtrT
NJointControllerConfigPtr ConfigPtrT
Definition: NJointControllerBase.h:587
armarx::control::deprecated_njoint_mp_controller::task_space::NJointCCDMPController::learnDMPFromFiles
void learnDMPFromFiles(int dmpId, const Ice::StringSeq &fileNames, const Ice::Current &) override
Definition: NJointCCDMPController.cpp:384
armarx::control::deprecated_njoint_mp_controller::task_space::NJointCCDMPController::isFinished
bool isFinished(const Ice::Current &) override
Definition: NJointCCDMPController.h:95
armarx::control::deprecated_njoint_mp_controller::task_space::NJointCCDMPControllerControlData::mode
VirtualRobot::IKSolver::CartesianSelection mode
Definition: NJointCCDMPController.h:49
armarx::control::deprecated_njoint_mp_controller::task_space::ViaPoint
std::pair< double, DMP::DVec > ViaPoint
Definition: DeprecatedNJointTSDMPController.h:36
armarx::control::deprecated_njoint_mp_controller::task_space::NJointCCDMPController::setGoals
void setGoals(int dmpId, const Ice::DoubleSeq &goals, const Ice::Current &) override
Definition: NJointCCDMPController.cpp:490
armarx::CartesianVelocityControllerPtr
std::shared_ptr< CartesianVelocityController > CartesianVelocityControllerPtr
Definition: CartesianVelocityController.h:34
armarx::control::deprecated_njoint_mp_controller::task_space::NJointCCDMPController::onInitNJointController
void onInitNJointController() override
Definition: NJointCCDMPController.cpp:625
armarx::NJointCCDMPControllerInterface
Definition: ControllerInterface.ice:151
armarx::detail::ControlThreadOutputBufferEntry
Definition: ControlThreadOutputBuffer.h:182
armarx::VariantType::Double
const VariantTypeId Double
Definition: Variant.h:920
armarx::control::common::mp::DVec
Ice::DoubleSeq DVec
Definition: MP.h:47
armarx::NJointTaskSpaceDMPControllerMode::CartesianSelection
CartesianSelection
Definition: ControllerInterface.ice:34
armarx::control::deprecated_njoint_mp_controller::task_space::NJointCCDMPControllerControlData::torqueKp
std::vector< float > torqueKp
Definition: NJointCCDMPController.h:47
armarx::control::deprecated_njoint_mp_controller::task_space::NJointCCDMPController::setTorqueKp
void setTorqueKp(const StringFloatDictionary &torqueKp, const Ice::Current &) override
Definition: NJointCCDMPController.cpp:528
armarx::control::deprecated_njoint_mp_controller::task_space::NJointCCDMPController::onPublish
virtual void onPublish(const SensorAndControl &, const DebugDrawerInterfacePrx &, const DebugObserverInterfacePrx &) override
Definition: NJointCCDMPController.cpp:589
armarx::control::deprecated_njoint_mp_controller::task_space::NJointCCDMPControllerControlData::nullspaceJointVelocities
std::vector< float > nullspaceJointVelocities
Definition: NJointCCDMPController.h:45
armarx::control::deprecated_njoint_mp_controller::task_space::NJointCCDMPController::setNullspaceJointVelocities
void setNullspaceJointVelocities(const StringFloatDictionary &nullspaceJointVelocities, const Ice::Current &) override
Definition: NJointCCDMPController.cpp:540
armarx::control::deprecated_njoint_mp_controller::task_space::NJointCCDMPController::NJointCCDMPController
NJointCCDMPController(const RobotUnitPtr &robotUnit, const NJointControllerConfigPtr &config, const VirtualRobot::RobotPtr &)
Definition: NJointCCDMPController.cpp:21
armarx::armem::Time
armarx::core::time::DateTime Time
Definition: forward_declarations.h:13
armarx::armem::server::ltm::util::mongodb::detail::update
bool update(mongocxx::collection &coll, const nlohmann::json &query, const nlohmann::json &update)
Definition: mongodb.cpp:68
armarx::control::deprecated_njoint_mp_controller::task_space::NJointCCDMPControllerControlData
Definition: NJointCCDMPController.h:40
CartesianVelocityController.h
armarx::control::deprecated_njoint_mp_controller::task_space::NJointCCDMPController::controllerRun
void controllerRun()
Definition: NJointCCDMPController.cpp:138
armarx::control::deprecated_njoint_mp_controller::task_space::NJointCCDMPController::rtPostDeactivateController
void rtPostDeactivateController() override
This function is called after the controller is deactivated.
Definition: NJointCCDMPController.cpp:584
armarx::ViaPointsSet
std::vector< ViaPoint > ViaPointsSet
Definition: NJointBimanualDMPForceController.h:32
armarx::control::deprecated_njoint_mp_controller::task_space::NJointCCDMPController::getClassName
std::string getClassName(const Ice::Current &) const override
Definition: NJointCCDMPController.cpp:132
armarx::NJointControllerWithTripleBuffer< NJointCCDMPControllerControlData >::MutexType
std::recursive_mutex MutexType
Definition: NJointControllerWithTripleBuffer.h:13
armarx::control::deprecated_njoint_mp_controller::task_space::NJointCCDMPController::onDisconnectNJointController
void onDisconnectNJointController() override
Definition: NJointCCDMPController.cpp:633
IceUtil::Handle< class RobotUnit >
armarx::control::deprecated_njoint_mp_controller::task_space::NJointCCDMPController::rtRun
void rtRun(const IceUtil::Time &sensorValuesTimestamp, const IceUtil::Time &timeSinceLastIteration) override
TODO make protected and use attorneys.
Definition: NJointCCDMPController.cpp:358
IceInternal::ProxyHandle<::IceProxy::armarx::DebugDrawerInterface >
armarx::control::deprecated_njoint_mp_controller::task_space::TYPEDEF_PTRS_HANDLE
TYPEDEF_PTRS_HANDLE(DeprecatedNJointPeriodicTSDMPCompliantController)
Eigen::Quaterniond
Quaternion< double, 0 > Quaterniond
Definition: EigenForwardDeclarations.h:62
armarx::control::deprecated_njoint_mp_controller::task_space::NJointCCDMPController
The NJointCCDMPController class.
Definition: NJointCCDMPController.h:56
armarx::NJointCCDMPControllerInterface::runDMP
void runDMP()
armarx::control::deprecated_njoint_mp_controller::task_space::NJointCCDMPController::setViaPoints
void setViaPoints(int dmpId, Ice::Double u, const Ice::DoubleSeq &viapoint, const Ice::Current &) override
Definition: NJointCCDMPController.cpp:479
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:27
dt
constexpr T dt
Definition: UnscentedKalmanFilterTest.cpp:45
armarx::control::deprecated_njoint_mp_controller::task_space::NJointCCDMPControllerControlData::targetTSVel
Eigen::VectorXf targetTSVel
Definition: NJointCCDMPController.h:43
VirtualRobot::RobotPtr
std::shared_ptr< class Robot > RobotPtr
Definition: Bus.h:19
armarx::TripleBuffer< DebugBufferData >
armarx::control::deprecated_njoint_mp_controller::task_space::NJointCCDMPController::rtPreActivateController
void rtPreActivateController() override
This function is called before the controller is activated.
Definition: NJointCCDMPController.cpp:579
armarx::control::deprecated_njoint_mp_controller::task_space::NJointCCDMPControllerControlData::avoidJointLimitsKp
float avoidJointLimitsKp
Definition: NJointCCDMPController.h:46