4#include <VirtualRobot/VirtualRobot.h>
13#include <armarx/control/deprecated_njoint_mp_controller/adaptive/ControllerInterface.h>
14#include <armarx/control/deprecated_njoint_mp_controller/bimanual/CartesianAdmittanceControllerInterface.h>
18 class SensorValue1DoFActuatorTorque;
19 class SensorValue1DoFActuatorVelocity;
20 class SensorValue1DoFActuatorPosition;
21 class ControlTarget1DoFActuatorTorque;
27 using UMIDMPPtr = boost::shared_ptr<class UMIDMP>;
32 namespace tsvmp = armarx::control::deprecated_njoint_mp_controller::tsvmp;
43 const NJointControllerConfigPtr& config,
47 std::string
getClassName(
const Ice::Current&)
const override;
48 void rtRun(
const IceUtil::Time& sensorValuesTimestamp,
49 const IceUtil::Time& timeSinceLastIteration)
override;
52 void setConfig(
const NJointBimanualCartesianAdmittanceControllerConfigPtr& ptr,
53 const Ice::Current& = Ice::emptyCurrent)
override;
55 const Ice::Current& = Ice::emptyCurrent)
override;
57 const Ice::Current& = Ice::emptyCurrent)
override;
59 const Ice::Current& = Ice::emptyCurrent)
override;
61 const Ice::Current& = Ice::emptyCurrent)
override;
64 const Ice::Current& = Ice::emptyCurrent)
override;
67 const Ice::Current& = Ice::emptyCurrent)
override;
69 Eigen::Matrix4f
getBoxPose(
const Ice::Current& = Ice::emptyCurrent)
const override;
71 const Ice::Current& = Ice::emptyCurrent)
override;
72 void setBoxWidth(
float w,
const Ice::Current& = Ice::emptyCurrent)
override;
74 const Eigen::Vector3f& velRPY,
75 const Ice::Current& = Ice::emptyCurrent)
override;
77 const Eigen::Vector3f& velXYZ,
78 const Eigen::Vector3f& velRPY,
79 const Ice::Current& = Ice::emptyCurrent)
override;
81 const Ice::Current& = Ice::emptyCurrent)
override;
83 const Ice::Current& = Ice::emptyCurrent)
override;
108 Eigen::Matrix4f pose;
112 mutable std::recursive_mutex targBufWriteMutex;
115 struct PreprocessedCfg
123 float ftCalibrationTime;
125 Eigen::Vector12f KpImpedance;
126 Eigen::Vector12f KdImpedance;
129 Eigen::Vector3f CoMVecLeft;
130 Eigen::Vector3f forceOffsetLeft;
131 Eigen::Vector3f torqueOffsetLeft;
134 Eigen::Vector3f CoMVecRight;
135 Eigen::Vector3f forceOffsetRight;
136 Eigen::Vector3f torqueOffsetRight;
138 Eigen::VectorXf desiredJointValuesLeft;
139 Eigen::VectorXf desiredJointValuesRight;
146 Eigen::Vector12f targetWrench;
153 mutable std::recursive_mutex cfgBufWriteMutex;
160 std::vector<ControlTarget1DoFActuatorTorque*>
targets;
164 VirtualRobot::DifferentialIKPtr
IK;
167 VirtualRobot::RobotNodeSetPtr
rns;
168 VirtualRobot::RobotNodePtr
tcp;
177 double ftcalibrationTimer = 0;
179 bool firstLoop =
true;
183 Eigen::Matrix4f virtualPose = Eigen::Matrix4f::Identity();
185 Eigen::Vector12f filteredOldValue = Eigen::Vector12f::Zero();
190 struct DebugBufferData
192 Eigen::Matrix4f currentBoxPose;
194 StringFloatDictionary desired_torques;
225 float modifiedPoseRight_x;
226 float modifiedPoseRight_y;
227 float modifiedPoseRight_z;
228 float currentPoseLeft_x;
229 float currentPoseLeft_y;
230 float currentPoseLeft_z;
232 float modifiedPoseLeft_x;
233 float modifiedPoseLeft_y;
234 float modifiedPoseLeft_z;
235 float currentPoseRight_x;
236 float currentPoseRight_y;
237 float currentPoseRight_z;
247 float modifiedTwist_lx;
248 float modifiedTwist_ly;
249 float modifiedTwist_lz;
250 float modifiedTwist_rx;
251 float modifiedTwist_ry;
252 float modifiedTwist_rz;
261 Eigen::VectorXf forceImpedance;
262 Eigen::VectorXf forcePID;
263 Eigen::VectorXf forcePIDControlValue;
264 Eigen::VectorXf poseError;
265 Eigen::VectorXf wrenchesConstrained;
266 Eigen::VectorXf wrenchesMeasuredInRoot;
269 mutable std::recursive_mutex debugOutputDataReadMutex;
#define TYPEDEF_PTRS_HANDLE(T)
A simple triple buffer for lockfree comunication between a single writer and a single reader.
Same as the TripleBuffer, but partial writes of the data structure are ok. The write operation may be...
void setBoxWidth(float w, const Ice::Current &=Ice::emptyCurrent) override
void updateDesiredJointValuesRight(const Ice::FloatSeq &cfg)
void rtPreActivateController()
This function is called before the controller is activated.
void setConfig(const NJointBimanualCartesianAdmittanceControllerConfigPtr &ptr, const Ice::Current &=Ice::emptyCurrent) override
void setDesiredJointValuesLeft(const Ice::FloatSeq &vals, const Ice::Current &=Ice::emptyCurrent) override
void updateAdmittanceConfig(const detail::NJBmanCartAdmCtrl::Admittance admittanceObject)
void updateDesiredJointValuesLeft(const Ice::FloatSeq &cfg)
void updateNullspaceConfig(const detail::NJBmanCartAdmCtrl::Nullspace &nullspace)
void setBoxPose(const Eigen::Matrix4f &pose, const Ice::Current &=Ice::emptyCurrent) override
void setBoxVelocity(const Eigen::Vector3f &velXYZ, const Eigen::Vector3f &velRPY, const Ice::Current &=Ice::emptyCurrent) override
void updateConfig(const NJointBimanualCartesianAdmittanceControllerConfig &cfg)
void moveBoxPose(const Eigen::Matrix4f &pose, const Ice::Current &=Ice::emptyCurrent) override
NJointBimanualCartesianAdmittanceController(const RobotUnitPtr &, const NJointControllerConfigPtr &config, const VirtualRobot::RobotPtr &)
void rtRun(const IceUtil::Time &sensorValuesTimestamp, const IceUtil::Time &timeSinceLastIteration) override
TODO make protected and use attorneys.
void updateForceConfig(const detail::NJBmanCartAdmCtrl::Force &left, const detail::NJBmanCartAdmCtrl::Force &right)
void updateImpedanceConfig(const detail::NJBmanCartAdmCtrl::Impedance &left, const detail::NJBmanCartAdmCtrl::Impedance &right)
void setNullspaceConfig(const detail::NJBmanCartAdmCtrl::Nullspace &nullspace, const Ice::Current &=Ice::emptyCurrent) override
void setAdmittanceConfig(const detail::NJBmanCartAdmCtrl::Admittance &admittanceObject, const Ice::Current &=Ice::emptyCurrent) override
void setBoxPoseAndVelocity(const Eigen::Matrix4f &pose, const Eigen::Vector3f &velXYZ, const Eigen::Vector3f &velRPY, const Ice::Current &=Ice::emptyCurrent) override
void moveBoxPosition(const Eigen::Vector3f &pos, const Ice::Current &=Ice::emptyCurrent) override
void setImpedanceConfig(const detail::NJBmanCartAdmCtrl::Impedance &left, const detail::NJBmanCartAdmCtrl::Impedance &right, const Ice::Current &=Ice::emptyCurrent) override
void setForceConfig(const detail::NJBmanCartAdmCtrl::Force &left, const detail::NJBmanCartAdmCtrl::Force &right, const Ice::Current &=Ice::emptyCurrent) override
void setDesiredJointValuesRight(const Ice::FloatSeq &vals, const Ice::Current &=Ice::emptyCurrent) override
virtual void onPublish(const SensorAndControl &, const DebugDrawerInterfacePrx &, const DebugObserverInterfacePrx &)
std::string getClassName(const Ice::Current &) const override
Eigen::Matrix4f getBoxPose()
boost::shared_ptr< class UMIDMP > UMIDMPPtr
Matrix< float, 6, 1 > Vector6f
std::shared_ptr< class Robot > RobotPtr
This file offers overloads of toIce() and fromIce() functions for STL container types.
::IceInternal::ProxyHandle<::IceProxy::armarx::DebugObserverInterface > DebugObserverInterfacePrx
SynchronousNJointController NJointController
IceUtil::Handle< class RobotUnit > RobotUnitPtr
::IceInternal::ProxyHandle<::IceProxy::armarx::DebugDrawerInterface > DebugDrawerInterfacePrx
detail::ControlThreadOutputBufferEntry SensorAndControl
std::vector< ControlTarget1DoFActuatorTorque * > targets
std::vector< const SensorValue1DoFActuatorPosition * > positionSensors
std::vector< std::string > jointNames
std::vector< const SensorValue1DoFActuatorVelocity * > velocitySensors
VirtualRobot::RobotNodePtr frameFTSensor
VirtualRobot::DifferentialIKPtr IK
const SensorValueForceTorque * forceTorque
VirtualRobot::RobotNodeSetPtr rns
Eigen::Matrix4f sensorFrame2TcpFrame
VirtualRobot::RobotNodePtr tcp