3 #include <VirtualRobot/VirtualRobot.h>
9 #include <armarx/control/deprecated_njoint_mp_controller/bimanual/ObjLevelControllerInterface.h>
13 class SensorValue1DoFActuatorTorque;
14 class SensorValue1DoFActuatorVelocity;
15 class SensorValue1DoFActuatorPosition;
16 class SensorValue1DoFActuatorAcceleration;
17 class ControlTarget1DoFActuatorTorque;
18 class SensorValueForceTorque;
49 const NJointControllerConfigPtr& config,
63 const Ice::StringSeq& leftFileNames,
64 const Ice::StringSeq& rightFileNames,
87 void runDMP(
const Ice::DoubleSeq& goalObj,
88 const Ice::DoubleSeq& goalLeft,
89 const Ice::DoubleSeq& goalRight,
93 const Ice::DoubleSeq& goals,
97 void setGoals(
const Ice::DoubleSeq& goals,
const Ice::Current&);
99 const Ice::DoubleSeq& goalLeft,
100 const Ice::DoubleSeq& goalRight,
101 const Ice::Current& ice);
127 const std::vector<double>& globalTargetPoseVec);
129 void publishVec(
const Eigen::VectorXf& bufferVec,
130 const std::string name,
144 Eigen::VectorXf targetWrench;
148 StringFloatDictionary desired_torques;
151 Eigen::VectorXf objTargetPoseVec;
152 Eigen::VectorXf leftPoseVecInObj;
153 Eigen::VectorXf rightPoseVecInObj;
154 Eigen::VectorXf objTargetTwist;
157 Eigen::VectorXf targetHandPoseInRootLeft;
158 Eigen::VectorXf targetHandPoseInRootRight;
159 Eigen::VectorXf currentHandPoseInRootLeft;
160 Eigen::VectorXf currentHandPoseInRootRight;
163 Eigen::VectorXf objForceTorque;
164 Eigen::VectorXf objPoseVec;
165 Eigen::VectorXf objCurrentTwist;
168 Eigen::VectorXf virtualPoseVec;
169 Eigen::VectorXf virtualVel;
170 Eigen::VectorXf virtualAcc;
173 Eigen::VectorXf integratedPoseObjVec;
174 Eigen::VectorXf integratedPoseLeftVec;
175 Eigen::VectorXf integratedPoseRightVec;
177 Eigen::VectorXf poseError;
180 Eigen::VectorXf forceImpedance;
181 Eigen::VectorXf forcePID;
182 Eigen::VectorXf forcePIDControlValue;
183 Eigen::VectorXf forceTorqueMeasurementInRoot;
186 Eigen::VectorXf KpImpedance;
187 Eigen::VectorXf KdImpedance;
188 Eigen::VectorXf KpAdmittance;
189 Eigen::VectorXf KdAdmittance;
190 Eigen::VectorXf KmAdmittance;
191 Eigen::VectorXf KmPID;
196 struct RT2ControlData
201 Eigen::VectorXf currentTwistObj;
204 Eigen::VectorXf currentTwistLeftInObj;
207 Eigen::VectorXf currentTwistRightInObj;
212 struct RT2InterfaceData
217 Eigen::Vector3f currentObjVel;
218 Eigen::Vector3f currentObjForce;
223 struct Inferface2rtData
225 Eigen::VectorXf KpImpedance;
226 Eigen::VectorXf KdImpedance;
227 Eigen::VectorXf KmAdmittance;
228 Eigen::VectorXf KpAdmittance;
229 Eigen::VectorXf KdAdmittance;
232 TripleBuffer<Inferface2rtData> interface2rtBuffer;
235 std::vector<ControlTarget1DoFActuatorTorque*> leftTargets;
236 std::vector<const SensorValue1DoFActuatorAcceleration*> leftAccelerationSensors;
237 std::vector<const SensorValue1DoFActuatorVelocity*> leftVelocitySensors;
238 std::vector<const SensorValue1DoFActuatorPosition*> leftPositionSensors;
240 std::vector<ControlTarget1DoFActuatorTorque*> rightTargets;
241 std::vector<const SensorValue1DoFActuatorAcceleration*> rightAccelerationSensors;
242 std::vector<const SensorValue1DoFActuatorVelocity*> rightVelocitySensors;
243 std::vector<const SensorValue1DoFActuatorPosition*> rightPositionSensors;
245 const SensorValueForceTorque* rightForceTorque;
246 const SensorValueForceTorque* leftForceTorque;
248 NJointBimanualObjLevelMultiMPControllerConfigPtr cfg;
249 VirtualRobot::DifferentialIKPtr leftIK;
250 VirtualRobot::DifferentialIKPtr rightIK;
271 Eigen::VectorXf leftDesiredJointValues;
272 Eigen::VectorXf rightDesiredJointValues;
274 Eigen::VectorXf KpImpedance;
275 Eigen::VectorXf KdImpedance;
276 Eigen::VectorXf KpAdmittance;
277 Eigen::VectorXf KdAdmittance;
278 Eigen::VectorXf KmAdmittance;
279 Eigen::VectorXf KmPID;
281 Eigen::VectorXf virtualAcc;
282 Eigen::VectorXf virtualVel;
290 Eigen::Vector3f CoMVecLeft;
291 Eigen::Vector3f forceOffsetLeft;
292 Eigen::Vector3f torqueOffsetLeft;
295 Eigen::Vector3f CoMVecRight;
296 Eigen::Vector3f forceOffsetRight;
297 Eigen::Vector3f torqueOffsetRight;
302 std::vector<std::string> leftJointNames;
303 std::vector<std::string> rightJointNames;
306 VirtualRobot::RobotNodeSetPtr leftRNS;
307 VirtualRobot::RobotNodeSetPtr rightRNS;
308 VirtualRobot::RobotNodePtr tcpLeft;
309 VirtualRobot::RobotNodePtr tcpRight;
311 std::vector<PIDControllerPtr> forcePIDControllers;
315 Eigen::VectorXf filteredOldValue;
318 double ftcalibrationTimer;
319 Eigen::VectorXf ftOffset;
322 Eigen::Vector3f objCom2TCPLeftInObjFrame, objCom2TCPRightInObjFrame;