44 NJointAnomalyDetectionAdaptiveWipingControllerControlData>,
48 using ConfigPtrT = NJointAnomalyDetectionAdaptiveWipingControllerConfigPtr;
50 const NJointControllerConfigPtr& config,
58 void rtRun(
const IceUtil::Time& sensorValuesTimestamp,
59 const IceUtil::Time& timeSinceLastIteration);
71 void setSpeed(Ice::Double times,
const Ice::Current&);
72 void setGoals(
const Ice::DoubleSeq& goals,
const Ice::Current&);
74 void runDMP(
const Ice::DoubleSeq& goals, Ice::Double tau,
const Ice::Current&);
80 return dmpCtrl->canVal;
101 struct DebugBufferData
103 StringFloatDictionary latestTargetVelocities;
104 StringFloatDictionary currentPose;
105 double currentCanVal;
118 Eigen::Matrix4f targetPose;
119 Eigen::Vector3f filteredForce;
120 Eigen::Vector3f filteredForceInRoot;
121 Eigen::Vector3f filteredTorque;
123 Eigen::Vector3f rotationAxis;
125 Eigen::Vector3f reactForce;
126 Eigen::Vector3f adaptK;
127 Eigen::Vector3f adaptD;
128 Eigen::VectorXf targetVel;
129 Eigen::Matrix4f currentPose;
132 Eigen::Matrix4f globalPose;
133 Eigen::Vector3f globalFilteredForce;
134 Eigen::Vector3f currentToolDir;
135 Eigen::VectorXf currentTwist;
141 Eigen::Vector2f estimatedFriction;
142 Eigen::Vector3f velPInTool;
143 Eigen::Vector2f frictionInToolXY;
147 float loseContactForceIntegral;
152 struct RTToControllerData
156 Eigen::Matrix4f currentPose = Eigen::Matrix4f::Identity();
157 Eigen::VectorXf currentTwist;
165 Eigen::Matrix4f currentTcpPose = Eigen::Matrix4f::Identity();
166 Eigen::Vector3f tcpTranslVel = Eigen::Vector3f::Zero();
167 Eigen::Vector3f forceOutput = Eigen::Vector3f::Zero();
168 float waitTimeForCalibration;
171 TripleBuffer<RTToUserData> rt2UserData;
178 TripleBuffer<UserToRTData> user2rtData;
183 std::vector<const SensorValue1DoFActuatorVelocity*> velocitySensors;
184 std::vector<const SensorValue1DoFActuatorPosition*> positionSensors;
185 std::vector<ControlTarget1DoFActuatorTorque*> targets;
188 std::deque<Eigen::VectorXf> velocityHorizonList;
189 size_t velocityHorizon;
190 bool lastAbnormalFlag =
false;
192 bool startLoseContactDetection =
false;
194 int loseContactCounter = 0;
195 bool isLoseContact =
false;
198 std::string nodeSetName;
206 Eigen::Vector2f lastForceInToolXY;
207 double lastCanVal = 0.0;
208 int wipingCounter = 0;
209 std::deque<float> recordFrictionNorm;
210 std::deque<float> recordForceNormToSurface;
211 size_t frictionHorizon;
212 Eigen::Vector2f estimatedFriction;
213 float safeFrictionConeLowerLimit = 0.2;
216 float loseContactRatio = 0.2f;
217 int makingContactCounter = 0;
218 bool isMakingContact =
false;
219 bool isLCREnabled =
false;
220 bool isContactedOnce =
false;
221 float forceControlGate = 1.0;
222 int lcrCounter = 500;
224 VirtualRobot::DifferentialIKPtr ik;
225 VirtualRobot::RobotNodePtr tcp;
227 NJointAnomalyDetectionAdaptiveWipingControllerConfigPtr cfg;
230 Eigen::Matrix4f targetPose;
231 Eigen::Matrix4f initHandPose;
233 Eigen::Vector3f kpos;
234 Eigen::Vector3f dpos;
235 Eigen::Vector3f kori;
236 Eigen::Vector3f dori;
237 Eigen::VectorXf knull;
238 Eigen::VectorXf dnull;
240 Eigen::Vector3f adaptK;
241 Eigen::Vector3f adaptD;
242 Eigen::Vector3f adaptKOri;
243 Eigen::Vector3f adaptDOri;
244 Eigen::VectorXf adaptKNull;
245 Eigen::VectorXf adaptDNull;
247 Eigen::VectorXf nullSpaceJointsVec;
248 const SensorValueForceTorque* forceSensor;
251 bool isForceCtrlInForceDir;
252 bool isForceControlEnabled;
253 bool isRotControlEnabled;
254 bool isTorqueControlEnabled;
255 bool isLCRControlEnabled;
265 Eigen::Vector3f filteredForce;
266 Eigen::Vector3f filteredTorque;
268 Eigen::Vector3f forceOffset;
269 Eigen::Vector3f currentForceOffset;
271 Eigen::Vector3f torqueOffset;
272 Eigen::Vector3f currentTorqueOffset;
274 Eigen::Vector3f handCOM;
275 Eigen::Vector3f gravityInRoot;
277 Eigen::Vector3f filteredForceInRoot;
278 Eigen::Vector3f filteredTorqueInRoot;
280 Eigen::Matrix3f toolTransform;
281 Eigen::Vector3f oriToolDir;
282 Eigen::Matrix3f origHandOri;
283 Eigen::VectorXf qvel_filtered;
285 bool useDMPInGlobalFrame;
288 Eigen::Vector2f lastPosition;
291 Eigen::Vector3f toolToFTSensorLink;
292 Eigen::Vector3f positionOffset;