5 #include <VirtualRobot/Robot.h>
6 #include <VirtualRobot/IK/DifferentialIK.h>
18 #include <armarx/control/deprecated_njoint_mp_controller/bimanual/ObjLevelControllerInterface.h>
61 void learnMultiDMPFromFiles(
const Ice::StringSeq& objFileNames,
const Ice::StringSeq& leftFileNames,
const Ice::StringSeq& rightFileNames,
const Ice::Current&);
80 void runDMP(
const Ice::DoubleSeq& goalObj,
const Ice::DoubleSeq& goalLeft,
const Ice::DoubleSeq& goalRight,
Ice::Double timeDuration,
const Ice::Current&);
83 void setGoals(
const Ice::DoubleSeq& goals,
const Ice::Current&);
84 void setMultiMPGoals(
const Ice::DoubleSeq& goalObj,
const Ice::DoubleSeq& goalLeft,
const Ice::DoubleSeq& goalRight,
const Ice::Current& ice);
119 Eigen::VectorXf targetWrench;
122 StringFloatDictionary desired_torques;
125 Eigen::VectorXf objTargetPoseVec;
126 Eigen::VectorXf leftPoseVecInObj;
127 Eigen::VectorXf rightPoseVecInObj;
128 Eigen::VectorXf objTargetTwist;
131 Eigen::VectorXf targetHandPoseInRootLeft;
132 Eigen::VectorXf targetHandPoseInRootRight;
133 Eigen::VectorXf currentHandPoseInRootLeft;
134 Eigen::VectorXf currentHandPoseInRootRight;
137 Eigen::VectorXf objForceTorque;
138 Eigen::VectorXf objPoseVec;
139 Eigen::VectorXf objCurrentTwist;
142 Eigen::VectorXf virtualPoseVec;
143 Eigen::VectorXf virtualVel;
144 Eigen::VectorXf virtualAcc;
147 Eigen::VectorXf integratedPoseObjVec;
148 Eigen::VectorXf integratedPoseLeftVec;
149 Eigen::VectorXf integratedPoseRightVec;
151 Eigen::VectorXf poseError;
154 Eigen::VectorXf forceImpedance;
155 Eigen::VectorXf forcePID;
156 Eigen::VectorXf forcePIDControlValue;
157 Eigen::VectorXf forceTorqueMeasurementInRoot;
160 Eigen::VectorXf KpImpedance;
161 Eigen::VectorXf KdImpedance;
162 Eigen::VectorXf KpAdmittance;
163 Eigen::VectorXf KdAdmittance;
164 Eigen::VectorXf KmAdmittance;
165 Eigen::VectorXf KmPID;
169 struct RT2ControlData
174 Eigen::VectorXf currentTwistObj;
177 Eigen::VectorXf currentTwistLeftInObj;
180 Eigen::VectorXf currentTwistRightInObj;
184 struct RT2InterfaceData
189 Eigen::Vector3f currentObjVel;
190 Eigen::Vector3f currentObjForce;
194 struct Inferface2rtData
196 Eigen::VectorXf KpImpedance;
197 Eigen::VectorXf KdImpedance;
198 Eigen::VectorXf KmAdmittance;
199 Eigen::VectorXf KpAdmittance;
200 Eigen::VectorXf KdAdmittance;
202 TripleBuffer<Inferface2rtData> interface2rtBuffer;
206 std::vector<ControlTarget1DoFActuatorTorque*> leftTargets;
207 std::vector<const SensorValue1DoFActuatorAcceleration*> leftAccelerationSensors;
208 std::vector<const SensorValue1DoFActuatorVelocity*> leftVelocitySensors;
209 std::vector<const SensorValue1DoFActuatorPosition*> leftPositionSensors;
211 std::vector<ControlTarget1DoFActuatorTorque*> rightTargets;
212 std::vector<const SensorValue1DoFActuatorAcceleration*> rightAccelerationSensors;
213 std::vector<const SensorValue1DoFActuatorVelocity*> rightVelocitySensors;
214 std::vector<const SensorValue1DoFActuatorPosition*> rightPositionSensors;
216 const SensorValueForceTorque* rightForceTorque;
217 const SensorValueForceTorque* leftForceTorque;
219 NJointBimanualObjLevelMultiMPControllerConfigPtr cfg;
220 VirtualRobot::DifferentialIKPtr leftIK;
221 VirtualRobot::DifferentialIKPtr rightIK;
242 Eigen::VectorXf leftDesiredJointValues;
243 Eigen::VectorXf rightDesiredJointValues;
245 Eigen::VectorXf KpImpedance;
246 Eigen::VectorXf KdImpedance;
247 Eigen::VectorXf KpAdmittance;
248 Eigen::VectorXf KdAdmittance;
249 Eigen::VectorXf KmAdmittance;
250 Eigen::VectorXf KmPID;
252 Eigen::VectorXf virtualAcc;
253 Eigen::VectorXf virtualVel;
261 Eigen::Vector3f CoMVecLeft;
262 Eigen::Vector3f forceOffsetLeft;
263 Eigen::Vector3f torqueOffsetLeft;
266 Eigen::Vector3f CoMVecRight;
267 Eigen::Vector3f forceOffsetRight;
268 Eigen::Vector3f torqueOffsetRight;
273 std::vector<std::string> leftJointNames;
274 std::vector<std::string> rightJointNames;
277 VirtualRobot::RobotNodeSetPtr leftRNS;
278 VirtualRobot::RobotNodeSetPtr rightRNS;
279 VirtualRobot::RobotNodePtr tcpLeft;
280 VirtualRobot::RobotNodePtr tcpRight;
282 std::vector<PIDControllerPtr> forcePIDControllers;
286 Eigen::VectorXf filteredOldValue;
289 double ftcalibrationTimer;
290 Eigen::VectorXf ftOffset;
293 Eigen::Vector3f objCom2TCPLeftInObjFrame, objCom2TCPRightInObjFrame;