23 #ifndef _ARMARX_LIB_DSController_DSJointCarryController_H
24 #define _ARMARX_LIB_DSController_DSJointCarryController_H
26 #include <VirtualRobot/VirtualRobot.h>
36 #include <armarx/control/ds_controller/DSControllerInterface.h>
51 std::vector<double>
Mu_;
80 std::ifstream infile{fileName};
81 std::string objDefs = {std::istreambuf_iterator<char>(infile),
82 std::istreambuf_iterator<char>()};
84 json->fromString(objDefs);
91 scaling = json->getDouble(
"Scaling");
92 v_max = json->getDouble(
"MaxVelocity");
101 std::cout <<
"line 162." << std::endl;
104 for (
int i = 0; i < 3; ++i)
109 std::cout <<
"Finished GMM." << std::endl;
114 float positionErrorToleranceInMeter)
117 position_error.Resize(3);
120 desired_vel.Resize(3);
122 Eigen::Vector3f positionError = positionInMeter -
guard_target;
123 if (positionError.norm() < positionErrorToleranceInMeter)
125 positionError.setZero();
128 for (
int i = 0; i < 3; ++i)
130 position_error(i) = positionError(i);
133 desired_vel =
guard_gmm->getVelocity(position_error);
141 if (std::isnan(lenVec))
194 const NJointControllerConfigPtr& config,
200 return "DSJointCarryController";
210 const Ice::Current&);
212 const Ice::Current&);
214 const Ice::Current&);
220 mutable MutexType interface2CtrlDataMutex;
222 float deadzone(
float currentValue,
float targetValue,
float threshold);
227 struct DSJointCarryControllerSensorData
231 Eigen::Vector3f left_force;
232 Eigen::Vector3f right_force;
238 struct DSCtrlDebugInfo
240 Eigen::Vector3f leftDesiredLinearVelocity;
241 Eigen::Vector3f rightDesiredLinearVelocity;
246 struct Interface2CtrlData
248 Eigen::Vector3f guardToHandInMeter;
251 Eigen::Vector3f guardRotationStiffness;
252 Eigen::Vector3f guardObsAvoidVel;
255 TripleBuffer<Interface2CtrlData> interface2CtrlData;
259 StringFloatDictionary desired_torques;
262 TripleBuffer<DSRTDebugInfo> debugDataInfo;
264 struct Ctrl2InterfaceData
269 TripleBuffer<Ctrl2InterfaceData> ctrl2InterfaceData;
271 std::vector<const SensorValue1DoFActuatorTorque*> left_torqueSensors;
272 std::vector<const SensorValue1DoFGravityTorque*> left_gravityTorqueSensors;
273 std::vector<const SensorValue1DoFActuatorVelocity*> left_velocitySensors;
274 std::vector<const SensorValue1DoFActuatorPosition*> left_positionSensors;
276 std::vector<const SensorValue1DoFActuatorTorque*> right_torqueSensors;
277 std::vector<const SensorValue1DoFGravityTorque*> right_gravityTorqueSensors;
278 std::vector<const SensorValue1DoFActuatorVelocity*> right_velocitySensors;
279 std::vector<const SensorValue1DoFActuatorPosition*> right_positionSensors;
281 const SensorValueForceTorque* leftForceTorque;
282 const SensorValueForceTorque* rightForceTorque;
284 std::vector<ControlTarget1DoFActuatorTorque*> left_torque_targets;
285 std::vector<ControlTarget1DoFActuatorTorque*> right_torque_targets;
287 VirtualRobot::RobotNodePtr left_arm_tcp;
288 VirtualRobot::RobotNodePtr right_arm_tcp;
290 VirtualRobot::RobotNodePtr left_sensor_frame;
291 VirtualRobot::RobotNodePtr right_sensor_frame;
293 VirtualRobot::DifferentialIKPtr left_ik;
294 VirtualRobot::DifferentialIKPtr right_ik;
299 Eigen::Vector3f left_currentTCPLinearVelocity_filtered;
300 Eigen::Vector3f left_currentTCPAngularVelocity_filtered;
301 Eigen::Vector3f right_currentTCPLinearVelocity_filtered;
302 Eigen::Vector3f right_currentTCPAngularVelocity_filtered;
304 Eigen::VectorXf left_jointVelocity_filtered;
305 Eigen::VectorXf right_jointVelocity_filtered;
307 Eigen::VectorXf left_desiredTorques_filtered;
308 Eigen::VectorXf right_desiredTorques_filtered;
309 Eigen::Vector3f left_tcpDesiredTorque_filtered;
310 Eigen::Vector3f right_tcpDesiredTorque_filtered;
312 float smooth_startup;
314 DSJointCarryControllerConfigPtr cfg;
315 float filterTimeConstant;
317 std::vector<std::string> left_jointNames;
318 std::vector<std::string> right_jointNames;
322 std::vector<float> Damping;
326 float null_torqueLimit;
328 float nullspaceDamping;
329 Eigen::VectorXf left_qnullspace;
330 Eigen::VectorXf right_qnullspace;
335 float positionErrorTolerance;
336 bool controllerStopRequested =
false;
337 bool controllerRunFinished =
false;