3 #include <dmp/representation/dmp/umidmp.h>
10 #include <armarx/control/deprecated_njoint_mp_controller/task_space/TaskSpaceImpedanceDMPControllerInterface.h>
14 class SensorValue1DoFActuatorTorque;
15 class SensorValue1DoFActuatorVelocity;
16 class SensorValue1DoFActuatorPosition;
17 class ControlTarget1DoFActuatorTorque;
18 class SensorValueForceTorque;
23 class SensorValueForceTorque;
25 class ControlTarget1DoFActuatorTorque;
27 namespace control::deprecated_njoint_mp_controller::tsvmp
61 using ConfigPtrT = NJointTaskSpaceImpedanceDMPControllerConfigPtr;
63 const NJointControllerConfigPtr& config,
67 std::string
getClassName(
const Ice::Current&)
const override;
75 void learnDMPFromFiles(
const Ice::StringSeq& fileNames,
const Ice::Current&)
override;
91 void setGoals(
const Ice::DoubleSeq& goals,
const Ice::Current&)
override;
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;
100 const Ice::Current&)
override;
104 void stopDMP(
const Ice::Current&)
override;
105 void resumeDMP(
const Ice::Current&)
override;
106 void resetDMP(
const Ice::Current&)
override;
108 void setMPWeights(
const DoubleSeqSeq& weights,
const Ice::Current&)
override;
109 DoubleSeqSeq
getMPWeights(
const Ice::Current&)
override;
121 const Ice::Current&)
override;
132 useForceStop =
false;
152 struct DebugBufferData
154 double currentCanVal;
167 float currentPose_qw;
168 float currentPose_qx;
169 float currentPose_qy;
170 float currentPose_qz;
178 float currentKnull_x;
179 float currentKnull_y;
180 float currentKnull_z;
188 float currentDnull_x;
189 float currentDnull_y;
190 float currentDnull_z;
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;
206 struct NJointTaskSpaceImpedanceDMPControllerSensorData
211 Eigen::VectorXf currentTwist;
215 controllerSensorData;
217 struct NJointTaskSpaceImpedanceDMPControllerInterfaceData
226 Eigen::Vector3f kpos;
227 Eigen::Vector3f dpos;
228 Eigen::Vector3f kori;
229 Eigen::Vector3f dori;
230 Eigen::VectorXf knull;
231 Eigen::VectorXf dnull;
234 WriteBufferedTripleBuffer<CtrlParams> ctrlParams;
237 DMP::Vec<DMP::DMPState> currentJointState;
242 std::vector<const SensorValue1DoFActuatorTorque*> torqueSensors;
243 std::vector<const SensorValue1DoFActuatorVelocity*> velocitySensors;
244 std::vector<const SensorValue1DoFActuatorPosition*> positionSensors;
245 std::vector<ControlTarget1DoFActuatorTorque*> targets;
251 VirtualRobot::RobotNodeSetPtr rns;
258 double posToOriRatio;
261 NJointTaskSpaceImpedanceDMPControllerConfigPtr cfg;
262 VirtualRobot::DifferentialIKPtr ik;
263 VirtualRobot::RobotNodePtr tcp;
275 std::atomic_bool useNullSpaceJointDMP;
276 bool isNullSpaceJointDMPLearned;
279 WriteBufferedTripleBuffer<Eigen::VectorXf> defaultNullSpaceJointValues;
280 std::vector<std::string> jointNames;
283 std::atomic_bool firstRun;
284 std::atomic_bool started =
false;
285 std::atomic_bool stopped =
false;
286 std::atomic_bool prematurely_stopped =
false;
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;