194 const NJointControllerConfigPtr& config,
200 return "DSJointCarryController";
204 void rtRun(
const IceUtil::Time& sensorValuesTimestamp,
205 const IceUtil::Time& timeSinceLastIteration);
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
229 Eigen::Matrix4f left_tcpPose;
230 Eigen::Matrix4f right_tcpPose;
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;