61 using ConfigPtrT = NJointTaskSpaceImpedanceDMPControllerConfigPtr;
63 const NJointControllerConfigPtr& config,
67 std::string
getClassName(
const Ice::Current&)
const override;
71 void rtRun(
const IceUtil::Time& sensorValuesTimestamp,
72 const IceUtil::Time& timeSinceLastIteration)
override;
75 void learnDMPFromFiles(
const Ice::StringSeq& fileNames,
const Ice::Current&)
override;
90 setViaPoints(Ice::Double u,
const Ice::DoubleSeq& viapoint,
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;
99 Ice::Double timeDuration,
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;
138 forceThreshold.getWriteBuffer() = f;
139 forceThreshold.commitWrite();
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
210 Eigen::Matrix4f currentPose;
211 Eigen::VectorXf currentTwist;
215 controllerSensorData;
217 struct NJointTaskSpaceImpedanceDMPControllerInterfaceData
219 Eigen::Matrix4f currentTcpPose;
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;
288 Eigen::Matrix4f stopPose;
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;
298 Eigen::Matrix4f oldPose;