25#include <SimoxUtility/color/Color.h>
26#include <VirtualRobot/MathTools.h>
27#include <VirtualRobot/RobotNodeSet.h>
51 return "NJointTSMixImpVelController";
57 const auto nDoF =
static_cast<Eigen::Index
>(arm->jointNames.size());
60 const auto checkNonNegative = [](
const auto&
v) {
ARMARX_CHECK((
v.array() >= 0).all()); };
61 checkSize(configData.desiredNullspaceJointAngles.value());
62 checkSize(configData.kdNullspaceTorque);
63 checkSize(configData.kpNullspaceTorque);
64 checkSize(configData.kdNullspaceVel);
65 checkSize(configData.kpNullspaceVel);
67 checkNonNegative(configData.kdNullspaceTorque);
68 checkNonNegative(configData.kpNullspaceTorque);
69 checkNonNegative(configData.kpNullspaceVel);
70 checkNonNegative(configData.kdNullspaceVel);
71 checkNonNegative(configData.kdImpedance);
72 checkNonNegative(configData.kpImpedance);
78 auto cfg = arm->bufferConfigRtToOnPublish.getUpToDateReadBuffer();
83 if (cfg.desiredNullspaceJointAngles.has_value())
86 "desiredNullspaceJointAngles",
87 cfg.desiredNullspaceJointAngles.value());
90 datafields[
"poseError_threshold_position"] =
new Variant(cfg.safeDistanceMMToGoal);
91 datafields[
"poseError_threshold_angle"] =
new Variant(cfg.safeRotAngleDegreeToGoal);
92 datafields[
"safeForceGuardThreshold"] =
93 new Variant(cfg.ftConfig.safeGuardForceThreshold);
94 datafields[
"safeTorqueGuardThreshold"] =
95 new Variant(cfg.ftConfig.safeGuardTorqueThreshold);
101 return "NJointTSImpController";
107 const auto nDoF =
static_cast<Eigen::Index
>(arm->jointNames.size());
110 const auto checkNonNegative = [](
const auto&
v) {
ARMARX_CHECK((
v.array() >= 0).all()); };
111 checkSize(configData.desiredNullspaceJointAngles.value());
112 checkSize(configData.kdNullspaceTorque);
113 checkSize(configData.kpNullspaceTorque);
115 checkNonNegative(configData.kdNullspaceTorque);
116 checkNonNegative(configData.kpNullspaceTorque);
117 checkNonNegative(configData.kdImpedance);
118 checkNonNegative(configData.kpImpedance);
124 auto cfg = arm->bufferConfigRtToOnPublish.getUpToDateReadBuffer();
127 if (cfg.desiredNullspaceJointAngles.has_value())
130 "desiredNullspaceJointAngles",
131 cfg.desiredNullspaceJointAngles.value());
134 datafields[
"poseError_threshold_position"] =
new Variant(cfg.safeDistanceMMToGoal);
135 datafields[
"poseError_threshold_angle"] =
new Variant(cfg.safeRotAngleDegreeToGoal);
136 datafields[
"safeForceGuardThreshold"] =
137 new Variant(cfg.ftConfig.safeGuardForceThreshold);
138 datafields[
"safeTorqueGuardThreshold"] =
139 new Variant(cfg.ftConfig.safeGuardTorqueThreshold);
std::string getClassName(const Ice::Current &=Ice::emptyCurrent) const override
================================== TSImp ==================================
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 ==================================
void limbPublishConfig(StringVariantBaseMap &datafields, ArmPtr &arm) override
void validateConfigDataCheckSize(Config &configData, ArmPtr &arm) override
#define ARMARX_CHECK(expression)
Shortcut for ARMARX_CHECK_EXPRESSION.
#define ARMARX_CHECK_EQUAL(lhs, rhs)
This macro evaluates whether lhs is equal (==) rhs and if it turns out to be false it will throw an E...
void debugEigenVec(StringVariantBaseMap &datafields, const std::string &name, Eigen::VectorXf vec)
double v(double t, double v0, double a0, double j)
std::map< std::string, VariantBasePtr > StringVariantBaseMap