25#include <VirtualRobot/VirtualRobot.h>
32#include <armarx/control/common/common.aron.generated.h>
37#include <armarx/control/njoint_controller/task_space/ControllerInterface.h>
41 namespace law = armarx::control::common::control_law;
54 template <
typename NJo
intTaskspaceControllerType>
62 using ConfigPtrT = ConfigurableNJointControllerConfigPtr;
63 using Config =
typename NJointTaskspaceControllerType::Config;
64 using ConfigDict =
typename NJointTaskspaceControllerType::ConfigDict;
74 std::vector<ControlTarget1DoFActuatorVelocity*>
targetsVel;
117 const NJointControllerConfigPtr& config,
125 void rtRun(
const IceUtil::Time& sensorValuesTimestamp,
126 const IceUtil::Time& timeSinceLastIteration)
override;
129 void updateConfig(const ::armarx::aron::data::dto::DictPtr& dto,
130 const Ice::Current& iceCurrent = Ice::emptyCurrent)
override;
133 const Ice::Current& = Ice::emptyCurrent)
override;
135 getConfig(
const Ice::Current& iceCurrent = Ice::emptyCurrent)
override;
137 getRTStatus(
const Ice::Current& iceCurrent = Ice::emptyCurrent)
override;
139 Ice::FloatSeq
getTCPVel(
const std::string& rns,
140 const Ice::Current& iceCurrent = Ice::emptyCurrent)
override;
144 const Ice::Current& iceCurrent = Ice::emptyCurrent)
override;
150 const bool forceGuard,
151 const bool torqueGuard,
152 const Ice::Current& iceCurrent = Ice::emptyCurrent)
override;
154 const Ice::Current& iceCurrent = Ice::emptyCurrent)
override;
156 const Ice::Current& iceCurrent = Ice::emptyCurrent)
override;
159 const ::armarx::aron::data::dto::DictPtr& dto,
160 const Ice::Current& iceCurrent = Ice::emptyCurrent)
override;
166 const std::map<std::string, ConstControlDevicePtr>&,
167 const std::map<std::string, ConstSensorDevicePtr>&);
187 void limbInit(
const std::string& nodeSetName,
195 const size_t nDoFTorque,
196 const size_t nDoFVelocity,
197 const Eigen::VectorXf& targetTorque,
198 const Eigen::VectorXf& targetVelocity);
207 const Eigen::Matrix4f& targetPose,
209 const Eigen::Matrix4f& pose,
215 std::map<std::string, ArmPtr>
limb;
224 std::shared_ptr<common::coordination::SyncCoordination>
coordinator =
nullptr;
240 unsigned int skipStepCountArviz_ = 0;
241 unsigned int skipStepsArviz_ = 10;
242 bool resetArviz =
false;
243 mutable std::unordered_map<std::string, viz::Layer> storedArvizLayers;
250 const NJointControllerConfigPtr& config,
253 std::string
getClassName(
const Ice::Current& = Ice::emptyCurrent)
const override;
262 const NJointControllerConfigPtr& config,
265 std::string
getClassName(
const Ice::Current& = Ice::emptyCurrent)
const override;
274 const NJointControllerConfigPtr& config,
277 std::string
getClassName(
const Ice::Current& = Ice::emptyCurrent)
const override;
286 const NJointControllerConfigPtr& config,
289 std::string
getClassName(
const Ice::Current& = Ice::emptyCurrent)
const override;
Provides a ready-to-use ArViz client arviz as member variable.
A simple triple buffer for lockfree comunication between a single writer and a single reader.
std::string getClassName(const Ice::Current &=Ice::emptyCurrent) const override
void limbPublishConfig(StringVariantBaseMap &datafields, ArmPtr &arm) override
void validateConfigDataCheckSize(Config &configData, ArmPtr &arm) override
NJointTSAdmController(const RobotUnitPtr &robotUnit, const NJointControllerConfigPtr &config, const VirtualRobot::RobotPtr &robot)
std::string getClassName(const Ice::Current &=Ice::emptyCurrent) const override
================================== TSImp ==================================
NJointTSImpController(const RobotUnitPtr &robotUnit, const NJointControllerConfigPtr &config, const VirtualRobot::RobotPtr &robot)
void limbPublishConfig(StringVariantBaseMap &datafields, ArmPtr &arm) override
void validateConfigDataCheckSize(Config &configData, ArmPtr &arm) override
std::string getClassName(const Ice::Current &=Ice::emptyCurrent) const override
================================== TSMixImpVel ==================================
NJointTSMixImpVelController(const RobotUnitPtr &robotUnit, const NJointControllerConfigPtr &config, const VirtualRobot::RobotPtr &robot)
void limbPublishConfig(StringVariantBaseMap &datafields, ArmPtr &arm) override
void validateConfigDataCheckSize(Config &configData, ArmPtr &arm) override
std::string getClassName(const Ice::Current &=Ice::emptyCurrent) const override
NJointTSVelController(const RobotUnitPtr &robotUnit, const NJointControllerConfigPtr &config, const VirtualRobot::RobotPtr &robot)
void limbPublishConfig(StringVariantBaseMap &datafields, ArmPtr &arm) override
void validateConfigDataCheckSize(Config &configData, ArmPtr &arm) override
std::map< std::string, VirtualRobot::RobotNodeSetPtr > controllableNodeSets
void onPublish(const SensorAndControl &, const DebugDrawerInterfacePrx &, const DebugObserverInterfacePrx &) override
static WidgetDescription::WidgetPtr GenerateConfigDescription(const VirtualRobot::RobotPtr &, const std::map< std::string, ConstControlDevicePtr > &, const std::map< std::string, ConstSensorDevicePtr > &)
--------------------------------— GUI Widget ------------------------------------------—
void onInitNJointController() override
ConfigurableNJointControllerConfigPtr ConfigPtrT
void limbRT(ArmPtr &arm, const double deltaT)
Ice::DoubleSeq getCurrentTCPPose(const std::string &nodeSetName, const Ice::Current &iceCurrent=Ice::emptyCurrent) override
std::shared_ptr< common::coordination::SyncCoordination > coordinator
void limbNonRT(ArmPtr &arm)
void onPublishCoordinator(const DebugObserverInterfacePrx &debugObs)
::armarx::aron::data::dto::DictPtr getConfig(const Ice::Current &iceCurrent=Ice::emptyCurrent) override
virtual void collectArviz(viz::StagedCommit &stage) const
NJointTaskspaceController(const RobotUnitPtr &robotUnit, const NJointControllerConfigPtr &config, const VirtualRobot::RobotPtr &)
Ice::FloatSeq getTCPVel(const std::string &rns, const Ice::Current &iceCurrent=Ice::emptyCurrent) override
void limbReInit(ArmPtr &arm)
void useCoordinator(const std::string &type, const ::armarx::aron::data::dto::DictPtr &dto, const Ice::Current &iceCurrent=Ice::emptyCurrent) override
bool rtGetDesiredPoseSafeStatus()
std::map< std::string, ArmPtr > limb
bool isSafeForceTorque(const std::string &nodeSetName, const Ice::Current &iceCurrent=Ice::emptyCurrent) override
-----------------------------— Other interaces ----------------------------------------—
typename NJointTaskspaceControllerType::Config Config
std::atomic_bool coordinatorEnabled
coordinator
bool wasNotSafeForceTorque(const std::string &nodeSetName, const Ice::Current &iceCurrent=Ice::emptyCurrent) override
void validateConfigData(Config &config, ArmPtr &arm)
void limbRTSetTarget(ArmPtr &arm, const size_t nDoFTorque, const size_t nDoFVelocity, const Eigen::VectorXf &targetTorque, const Eigen::VectorXf &targetVelocity)
core::HandControlPtr hands
void enableSafeGuardForceTorque(const std::string &nodeSetName, const bool forceGuard, const bool torqueGuard, const Ice::Current &iceCurrent=Ice::emptyCurrent) override
typename NJointTaskspaceControllerType::ConfigDict ConfigDict
std::optional< viz::ScopedClient > scopedArviz
bool rtGetDesiredPoseSafeStatusOnActivation()
std::tuple< bool, bool > additionalTaskUpdateStatus()
NJointTaskspaceControllerType ControlType
armarx::control::common::control_law::TSCtrlRtStatus RtStatus
void rtPostDeactivateController() override
This function is called after the controller is deactivated.
void updateInputData(const std::string &key, const Eigen::Matrix4f &targetPose, const PoseFrameMode &targetPoseMode, const Eigen::Matrix4f &pose, const Eigen::Vector6f &vel, const Eigen::Vector6f &ft, const Eigen::Vector6f &stiffness)
some method for coordinator
void rtRunCoordinator(double deltaT)
coordinator
virtual void additionalTask()
void rtRun(const IceUtil::Time &sensorValuesTimestamp, const IceUtil::Time &timeSinceLastIteration) override
TODO make protected and use attorneys.
void activateController(const Ice::Current ¤t=Ice::emptyCurrent) final
NJointControllerBase interface.
std::unique_ptr< ArmData > ArmPtr
void additionalTaskSetTarget()
std::map< std::string, common::coordination::InputData > coordinatorInputData
void updateConfig(const ::armarx::aron::data::dto::DictPtr &dto, const Ice::Current &iceCurrent=Ice::emptyCurrent) override
NJointController interface.
virtual void validateConfigDataCheckSize(Config &configData, ArmPtr &arm)=0
bool updateTargetPose(const TargetPoseMap &targetPoseMap, const TargetNullspaceMap &targetNullspaceMap, const Ice::Current &=Ice::emptyCurrent) override
static ConfigPtrT GenerateConfigFromVariants(const StringVariantBaseMap &values)
virtual void limbPublishConfig(StringVariantBaseMap &datafields, ArmPtr &arm)=0
void limbPublish(ArmPtr &arm, const DebugObserverInterfacePrx &debugObs)
void handleRTNotSafeInNonRT()
armarx::control::common::arondto::PoseFrameMode PoseFrameMode
void deactivateController(const Ice::Current ¤t=Ice::emptyCurrent) final
VirtualRobot::RobotPtr nonRtRobot
void rtPreActivateController() override
This function is called before the controller is activated.
void limbRTUpdateStatus(ArmPtr &arm, const double deltaT)
-----------------------------— Real time cotnrol --------------------------------------—
void limbInit(const std::string &nodeSetName, ArmPtr &arm, Config &cfg, VirtualRobot::RobotPtr &nonRtRobotPtr)
armarx::aron::data::dto::Dict getRTStatus()
void disableCoordinator()
void calibrateFTSensor()
ft sensor
Matrix< float, 6, 1 > Vector6f
std::shared_ptr< class Robot > RobotPtr
::IceInternal::Handle< Dict > DictPtr
This file is part of ArmarX.
std::shared_ptr< HandControlBase > HandControlPtr
dictionary< string, Ice::FloatSeq > TargetNullspaceMap
dictionary< string, FloatSeqSeq > TargetPoseMap
::IceInternal::ProxyHandle<::IceProxy::armarx::DebugObserverInterface > DebugObserverInterfacePrx
std::map< std::string, VariantBasePtr > StringVariantBaseMap
SynchronousNJointController NJointController
IceUtil::Handle< class RobotUnit > RobotUnitPtr
::IceInternal::ProxyHandle<::IceProxy::armarx::DebugDrawerInterface > DebugDrawerInterfacePrx
detail::ControlThreadOutputBufferEntry SensorAndControl
std::atomic_bool rtFirstRun
flags
std::string kinematicChainName
names
std::vector< std::string > jointNames
std::vector< ControlTarget1DoFActuatorVelocity * > targetsVel
std::vector< ControlTarget1DoFActuatorTorque * > targetsTorque
TripleBuffer< RtStatus > bufferRtStatusToNonRt
TripleBuffer< RtStatus > bufferRtStatusToOnPublish
TripleBuffer< Config > bufferConfigUserToNonRt
TripleBuffer< RtStatus > bufferRtStatusToUser
common::SensorDevicesForNJointTorqueController sensorDevices
devices
TripleBuffer< Config > bufferConfigNonRtToPublish
TripleBuffer< Config > bufferConfigNonRtToRt
std::atomic_bool reInitPreActivate
TripleBuffer< Config > bufferConfigRtToUser
TripleBuffer< Config > bufferConfigRtToOnPublish
double nonRTAccumulateTime
set data containers and buffers
std::atomic_bool desiredPoseSafeOnActivation
VirtualRobot::RobotPtr nonRtRobot
robot
A staged commit prepares multiple layers to be committed.