4 #include <VirtualRobot/IK/IKSolver.h>
5 #include <VirtualRobot/VirtualRobot.h>
14 #include <armarx/control/deprecated_njoint_mp_controller/task_space/ControllerInterface.h>
16 #include <dmp/representation/dmp/umitsmp.h>
20 class SensorValue1DoFActuatorTorque;
21 class SensorValue1DoFActuatorVelocity;
22 class SensorValue1DoFActuatorPosition;
23 class ControlTarget1DoFActuatorTorque;
24 class ControlTarget1DoFActuatorVelocity;
25 class SensorValue1DoFGravityTorque;
26 class SensorValueForceTorque;
69 float derivative = (error - lastError) /
dt;
70 float retVal = Kp * error + Kd * derivative;
77 using ConfigPtrT = DeprecatedNJointTaskSpaceDMPControllerConfigPtr;
79 const NJointControllerConfigPtr& config,
83 std::string
getClassName(
const Ice::Current&)
const override;
91 void learnDMPFromFiles(
const Ice::StringSeq& fileNames,
const Ice::Current&)
override;
99 void runDMP(
const Ice::DoubleSeq& goals,
Ice::Double tau,
const Ice::Current&)
override;
102 const Ice::Current&)
override;
109 void setGoals(
const Ice::DoubleSeq& goals,
const Ice::Current&)
override;
113 const Ice::Current&)
override;
114 void setTorqueKp(
const StringFloatDictionary& torqueKp,
const Ice::Current&)
override;
116 const Ice::Current&)
override;
119 void pauseDMP(
const Ice::Current&)
override;
120 void resumeDMP(
const Ice::Current&)
override;
122 void resetDMP(
const Ice::Current&)
override;
123 void stopDMP(
const Ice::Current&)
override;
134 return dmpCtrl->canVal;
139 const Ice::Current&)
override;
142 Eigen::VectorXf
calcIK(
const Eigen::VectorXf& cartesianVel,
143 const Eigen::VectorXf& nullspace,
147 void setMPWeights(
const DoubleSeqSeq& weights,
const Ice::Current&)
override;
148 DoubleSeqSeq
getMPWeights(
const Ice::Current&)
override;
164 useForceStop =
false;
188 std::vector<std::string> jointNames;
190 struct DebugBufferData
192 StringFloatDictionary latestTargetVelocities;
193 StringFloatDictionary dmpTargets;
194 StringFloatDictionary currentPose;
195 double currentCanVal;
208 Eigen::VectorXf targetJointVels;
213 struct RTToControllerData
218 Eigen::VectorXf currentTwist;
228 TripleBuffer<RTToUserData> rt2UserData;
233 std::vector<const SensorValue1DoFActuatorTorque*> torqueSensors;
234 std::vector<const SensorValue1DoFGravityTorque*> gravityTorqueSensors;
235 std::vector<ControlTarget1DoFActuatorVelocity*> targets;
236 std::vector<const SensorValue1DoFActuatorVelocity*> velocitySensors;
237 std::vector<const SensorValue1DoFActuatorPosition*> positionSensors;
240 std::vector<pidController> torquePIDs;
242 std::string nodeSetName;
248 VirtualRobot::DifferentialIKPtr ik;
249 VirtualRobot::RobotNodePtr tcp;
250 VirtualRobot::RobotNodePtr refFrame;
254 DeprecatedNJointTaskSpaceDMPControllerConfigPtr cfg;
259 std::string debugName;
261 Eigen::VectorXf filtered_qvel;
262 Eigen::Vector3f filtered_position;
263 float vel_filter_factor;
264 float pos_filter_factor;
272 Eigen::VectorXf jointHighLimits;
273 Eigen::VectorXf jointLowLimits;
275 Eigen::Vector3f filteredForce;
276 Eigen::Vector3f forceOffset;
277 Eigen::Vector3f filteredForceInRoot;
278 WriteBufferedTripleBuffer<Eigen::Vector3f> forceThreshold;
279 std::atomic<bool> useForceStop;
280 const SensorValueForceTorque* forceSensor;
282 std::atomic<float> timeForCalibration;
283 std::atomic_bool stopped =
false;