4 #include <VirtualRobot/Robot.h>
5 #include <VirtualRobot/IK/DifferentialIK.h>
17 #include <armarx/control/deprecated_njoint_mp_controller/adaptive/ControllerInterface.h>
45 using ConfigPtrT = NJointAnomalyDetectionAdaptiveWipingControllerConfigPtr;
64 void setGoals(
const Ice::DoubleSeq& goals,
const Ice::Current&);
70 return dmpCtrl->canVal;
87 struct DebugBufferData
89 StringFloatDictionary latestTargetVelocities;
90 StringFloatDictionary currentPose;
106 Eigen::Vector3f filteredForce;
107 Eigen::Vector3f filteredForceInRoot;
108 Eigen::Vector3f filteredTorque;
110 Eigen::Vector3f rotationAxis;
112 Eigen::Vector3f reactForce;
113 Eigen::Vector3f adaptK;
114 Eigen::Vector3f adaptD;
115 Eigen::VectorXf targetVel;
120 Eigen::Vector3f globalFilteredForce;
121 Eigen::Vector3f currentToolDir;
122 Eigen::VectorXf currentTwist;
128 Eigen::Vector2f estimatedFriction;
129 Eigen::Vector3f velPInTool;
130 Eigen::Vector2f frictionInToolXY;
134 float loseContactForceIntegral;
139 struct RTToControllerData
144 Eigen::VectorXf currentTwist;
152 Eigen::Vector3f tcpTranslVel;
153 Eigen::Vector3f forceOutput;
154 float waitTimeForCalibration;
156 TripleBuffer<RTToUserData> rt2UserData;
162 TripleBuffer<UserToRTData> user2rtData;
167 std::vector<const SensorValue1DoFActuatorVelocity*> velocitySensors;
168 std::vector<const SensorValue1DoFActuatorPosition*> positionSensors;
169 std::vector<ControlTarget1DoFActuatorTorque*> targets;
172 std::deque<Eigen::VectorXf> velocityHorizonList;
173 size_t velocityHorizon;
174 bool lastAbnormalFlag =
false;
176 bool startLoseContactDetection =
false;
178 int loseContactCounter = 0;
179 bool isLoseContact =
false;
182 std::string nodeSetName;
190 Eigen::Vector2f lastForceInToolXY;
191 double lastCanVal = 0.0;
192 int wipingCounter = 0;
193 std::deque<float> recordFrictionNorm;
194 std::deque<float> recordForceNormToSurface;
195 size_t frictionHorizon;
196 Eigen::Vector2f estimatedFriction;
197 float safeFrictionConeLowerLimit = 0.2;
200 float loseContactRatio = 0.2f;
201 int makingContactCounter = 0;
202 bool isMakingContact =
false;
203 bool isLCREnabled =
false;
204 bool isContactedOnce =
false;
205 float forceControlGate = 1.0;
206 int lcrCounter = 500;
208 VirtualRobot::DifferentialIKPtr ik;
209 VirtualRobot::RobotNodePtr tcp;
211 NJointAnomalyDetectionAdaptiveWipingControllerConfigPtr cfg;
217 Eigen::Vector3f kpos;
218 Eigen::Vector3f dpos;
219 Eigen::Vector3f kori;
220 Eigen::Vector3f dori;
221 Eigen::VectorXf knull;
222 Eigen::VectorXf dnull;
224 Eigen::Vector3f adaptK;
225 Eigen::Vector3f adaptD;
226 Eigen::Vector3f adaptKOri;
227 Eigen::Vector3f adaptDOri;
228 Eigen::VectorXf adaptKNull;
229 Eigen::VectorXf adaptDNull;
231 Eigen::VectorXf nullSpaceJointsVec;
232 const SensorValueForceTorque* forceSensor;
235 bool isForceCtrlInForceDir;
236 bool isForceControlEnabled;
237 bool isRotControlEnabled;
238 bool isTorqueControlEnabled;
239 bool isLCRControlEnabled;
249 Eigen::Vector3f filteredForce;
250 Eigen::Vector3f filteredTorque;
252 Eigen::Vector3f forceOffset;
253 Eigen::Vector3f currentForceOffset;
255 Eigen::Vector3f torqueOffset;
256 Eigen::Vector3f currentTorqueOffset;
258 Eigen::Vector3f handCOM;
259 Eigen::Vector3f gravityInRoot;
261 Eigen::Vector3f filteredForceInRoot;
262 Eigen::Vector3f filteredTorqueInRoot;
265 Eigen::Vector3f oriToolDir;
267 Eigen::VectorXf qvel_filtered;
269 bool useDMPInGlobalFrame;
272 Eigen::Vector2f lastPosition;
275 Eigen::Vector3f toolToFTSensorLink;
276 Eigen::Vector3f positionOffset;