4 #include <VirtualRobot/VirtualRobot.h>
13 #include <armarx/control/deprecated_njoint_mp_controller/adaptive/ControllerInterface.h>
14 #include <armarx/control/deprecated_njoint_mp_controller/bimanual/ControllerInterface.h>
18 class SensorValue1DoFActuatorTorque;
19 class SensorValue1DoFActuatorVelocity;
20 class SensorValue1DoFActuatorPosition;
21 class SensorValue1DoFActuatorAcceleration;
22 class ControlTarget1DoFActuatorTorque;
23 class SensorValueForceTorque;
49 using ConfigPtrT = NJointBimanualCCDMPControllerConfigPtr;
51 const NJointControllerConfigPtr& config,
63 void learnDMPFromFiles(
const std::string&,
const Ice::StringSeq&,
const Ice::Current&);
71 void runDMP(
const Ice::DoubleSeq& leftGoals,
72 const Ice::DoubleSeq& rightGoals,
75 void setGoals(
const Ice::DoubleSeq& goals,
const Ice::Current&);
101 Eigen::VectorXf getControlWrench(
const Eigen::VectorXf& twist,
109 getLocalPose(
const std::vector<double>& newCoordinateVec,
110 const std::vector<double>& globalTargetPoseVec)
113 VirtualRobot::MathTools::quat2eigen4f(newCoordinateVec.at(4),
114 newCoordinateVec.at(5),
115 newCoordinateVec.at(6),
116 newCoordinateVec.at(3));
117 newCoordinate(0, 3) = newCoordinateVec.at(0);
118 newCoordinate(1, 3) = newCoordinateVec.at(1);
119 newCoordinate(2, 3) = newCoordinateVec.at(2);
122 VirtualRobot::MathTools::quat2eigen4f(globalTargetPoseVec.at(4),
123 globalTargetPoseVec.at(5),
124 globalTargetPoseVec.at(6),
125 globalTargetPoseVec.at(3));
126 globalTargetPose(0, 3) = globalTargetPoseVec.at(0);
127 globalTargetPose(1, 3) = globalTargetPoseVec.at(1);
128 globalTargetPose(2, 3) = globalTargetPoseVec.at(2);
130 return getLocalPose(newCoordinate, globalTargetPose);
133 struct DebugBufferData
135 StringFloatDictionary desired_torques;
136 StringFloatDictionary constrained_force;
137 float leftTargetPose_x;
138 float leftTargetPose_y;
139 float leftTargetPose_z;
140 float rightTargetPose_x;
141 float rightTargetPose_y;
142 float rightTargetPose_z;
144 float leftCurrentPose_x;
145 float leftCurrentPose_y;
146 float leftCurrentPose_z;
147 float rightCurrentPose_x;
148 float rightCurrentPose_y;
149 float rightCurrentPose_z;
168 TripleBuffer<DebugBufferData> debugDataInfo;
170 struct NJointBimanualCCDMPControllerSensorData
176 Eigen::VectorXf currentLeftTwist;
177 Eigen::VectorXf currentRightTwist;
180 TripleBuffer<NJointBimanualCCDMPControllerSensorData> controllerSensorData;
183 std::vector<ControlTarget1DoFActuatorTorque*> leftTargets;
184 std::vector<const SensorValue1DoFActuatorAcceleration*> leftAccelerationSensors;
185 std::vector<const SensorValue1DoFActuatorVelocity*> leftVelocitySensors;
186 std::vector<const SensorValue1DoFActuatorPosition*> leftPositionSensors;
188 std::vector<ControlTarget1DoFActuatorTorque*> rightTargets;
189 std::vector<const SensorValue1DoFActuatorAcceleration*> rightAccelerationSensors;
190 std::vector<const SensorValue1DoFActuatorVelocity*> rightVelocitySensors;
191 std::vector<const SensorValue1DoFActuatorPosition*> rightPositionSensors;
193 const SensorValueForceTorque* rightForceTorque;
194 const SensorValueForceTorque* leftForceTorque;
196 NJointBimanualCCDMPControllerConfigPtr cfg;
197 VirtualRobot::DifferentialIKPtr leftIK;
198 VirtualRobot::DifferentialIKPtr rightIK;
200 std::vector<TaskSpaceDMPControllerPtr> leftGroup;
201 std::vector<TaskSpaceDMPControllerPtr> rightGroup;
202 std::vector<TaskSpaceDMPControllerPtr> bothLeaderGroup;
205 std::string leaderName;
207 VirtualRobot::RobotNodePtr tcpLeft;
208 VirtualRobot::RobotNodePtr tcpRight;
215 Eigen::VectorXf leftDesiredJointValues;
216 Eigen::VectorXf rightDesiredJointValues;
223 Eigen::VectorXf forceC_des;
226 Eigen::Vector3f kpos;
227 Eigen::Vector3f kori;
228 Eigen::Vector3f dpos;
229 Eigen::Vector3f dori;
236 std::vector<std::string> leftJointNames;
237 std::vector<std::string> rightJointNames;
240 VirtualRobot::RobotNodeSetPtr leftRNS;
241 VirtualRobot::RobotNodeSetPtr rightRNS;
242 VirtualRobot::RobotNodeSetPtr rnsLeftBody;
243 VirtualRobot::RobotNodeSetPtr rnsRightBody;
245 Eigen::Vector3f filtered_leftForce;
246 Eigen::Vector3f filtered_leftTorque;
247 Eigen::Vector3f filtered_rightForce;
248 Eigen::Vector3f filtered_rightTorque;
249 float filterTimeConstant;
251 std::vector<PIDControllerPtr> ftPIDController;
253 Eigen::Vector3f offset_leftForce;
254 Eigen::Vector3f offset_leftTorque;
255 Eigen::Vector3f offset_rightForce;
256 Eigen::Vector3f offset_rightTorque;
258 bool isForceCompensateDone;