3 #include <VirtualRobot/VirtualRobot.h>
12 #include <armarx/control/deprecated_njoint_mp_controller/adaptive/ControllerInterface.h>
16 class SensorValue1DoFActuatorTorque;
17 class SensorValue1DoFActuatorVelocity;
18 class SensorValue1DoFActuatorPosition;
19 class ControlTarget1DoFActuatorTorque;
20 class SensorValueForceTorque;
44 NJointAnomalyDetectionAdaptiveWipingControllerControlData>,
48 using ConfigPtrT = NJointAnomalyDetectionAdaptiveWipingControllerConfigPtr;
50 const NJointControllerConfigPtr& config,
72 void setGoals(
const Ice::DoubleSeq& goals,
const Ice::Current&);
80 return dmpCtrl->canVal;
101 struct DebugBufferData
103 StringFloatDictionary latestTargetVelocities;
104 StringFloatDictionary currentPose;
105 double currentCanVal;
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;
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
157 Eigen::VectorXf currentTwist;
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;
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;
281 Eigen::Vector3f oriToolDir;
283 Eigen::VectorXf qvel_filtered;
285 bool useDMPInGlobalFrame;
288 Eigen::Vector2f lastPosition;
291 Eigen::Vector3f toolToFTSensorLink;
292 Eigen::Vector3f positionOffset;