49 const NJointControllerConfigPtr& config,
57 void rtRun(
const IceUtil::Time& sensorValuesTimestamp,
58 const IceUtil::Time& timeSinceLastIteration);
63 const Ice::StringSeq& leftFileNames,
64 const Ice::StringSeq& rightFileNames,
76 Eigen::Matrix3f mat = Eigen::MatrixXf::Zero(3, 3);
87 void runDMP(
const Ice::DoubleSeq& goalObj,
88 const Ice::DoubleSeq& goalLeft,
89 const Ice::DoubleSeq& goalRight,
90 Ice::Double timeDuration,
93 const Ice::DoubleSeq& goals,
94 Ice::Double timeDuration,
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);
103 void setViaPoints(Ice::Double u,
const Ice::DoubleSeq& viapoint,
const Ice::Current&);
112 void setKpImpedance(
const Ice::FloatSeq& value,
const Ice::Current&);
113 void setKdImpedance(
const Ice::FloatSeq& value,
const Ice::Current&);
121 void getObjStatus(Eigen::Matrix4f& pose, Eigen::VectorXf& twist);
122 std::vector<double>
eigenPose2Vec(
const Eigen::Matrix4f& pose);
124 Eigen::Matrix4f
getLocalPose(
const Eigen::Matrix4f& newCoordinate,
125 const Eigen::Matrix4f& globalTargetPose);
126 Eigen::Matrix4f
getLocalPose(
const std::vector<double>& newCoordinateVec,
127 const std::vector<double>& globalTargetPoseVec);
128 void integrateVel2Pose(
const double deltaT, Eigen::VectorXf& vel, Eigen::Matrix4f& pose);
129 void publishVec(
const Eigen::VectorXf& bufferVec,
130 const std::string name,
132 void setAmplitude(Ice::Double amp,
const Ice::Current&);
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
200 Eigen::Matrix4f currentPoseObj;
201 Eigen::VectorXf currentTwistObj;
203 Eigen::Matrix4f currentPoseLeftInObj;
204 Eigen::VectorXf currentTwistLeftInObj;
206 Eigen::Matrix4f currentPoseRightInObj;
207 Eigen::VectorXf currentTwistRightInObj;
212 struct RT2InterfaceData
214 Eigen::Matrix4f currentLeftPoseInObjFrame;
215 Eigen::Matrix4f currentRightPoseInObjFrame;
216 Eigen::Matrix4f currentObjPose;
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;
256 Eigen::Matrix4f objInitialPose;
257 Eigen::Matrix4f leftInitialPose;
258 Eigen::Matrix4f rightInitialPose;
261 Eigen::Matrix4f integratedPoseObj;
262 Eigen::Matrix4f integratedPoseLeft;
263 Eigen::Matrix4f integratedPoseRight;
265 Eigen::Matrix4f objTransMatrixInAnchor;
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;
283 Eigen::Matrix4f virtualPose;
285 Eigen::Matrix4f sensorFrame2TcpFrameLeft;
286 Eigen::Matrix4f sensorFrame2TcpFrameRight;
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;
321 Eigen::Matrix3f fixedLeftRightRotOffset;
322 Eigen::Vector3f objCom2TCPLeftInObjFrame, objCom2TCPRightInObjFrame;