TaskspaceMixedImpedanceVelocityController.cpp
Go to the documentation of this file.
2 
3 #include <SimoxUtility/math/convert/mat4f_to_quat.h>
4 #include <VirtualRobot/IK/DifferentialIK.h>
5 #include <VirtualRobot/IK/JacobiProvider.h>
6 #include <VirtualRobot/MathTools.h>
7 #include <VirtualRobot/Nodes/RobotNode.h>
8 #include <VirtualRobot/Robot.h>
9 #include <VirtualRobot/RobotNodeSet.h>
10 
14 
16 
17 #include "../utils.h"
18 
20 {
21 
22  void
24  const VirtualRobot::RobotNodeSetPtr& rns,
25  const VirtualRobot::RobotNodeSetPtr& rtRns,
26  const std::vector<size_t>& torqueControlledIndex,
27  const std::vector<size_t>& velocityControlledIndex)
28  {
30  numOfJoints = rns->getSize();
31 
32  jointIDTorqueMode = torqueControlledIndex;
33  jointIDVelocityMode = velocityControlledIndex;
37 
38  tcp = rns->getTCP();
39  rtTCP = rtRns->getTCP();
41  ik.reset(new VirtualRobot::DifferentialIK(
42  rtRns, rtRns->getRobot()->getRootNode(), VirtualRobot::JacobiProvider::eSVDDamped));
43 
45  }
46 
47  void
49  const VirtualRobot::RobotNodeSetPtr& rns)
50  {
51  }
52 
53  void
55  {
56  ftsensor.reset();
57  }
58 
59  bool
61  const std::vector<std::string>& nameList,
62  const std::map<std::string, std::string>& jointControlModeMap)
63  {
64  std::set<std::string> validModes = {"velocity", "torque"};
65 
66  for (const auto& pair : jointControlModeMap)
67  {
68  if (std::find(nameList.begin(), nameList.end(), pair.first) == nameList.end())
69  {
70  ARMARX_ERROR << "TaskspaceMixedImpedanceVelocityController: joint name '"
71  << pair.first << "' not found in robot node set.";
72  return false;
73  }
74 
75  if (validModes.find(pair.second) == validModes.end())
76  {
78  << "TaskspaceMixedImpedanceVelocityController: Invalid control mode for joint '"
79  << pair.first << "': " << pair.second << std::endl;
80  return false;
81  }
82  }
83 
84  return true;
85  }
86 
87  // void
88  // TaskspaceMixedImpedanceVelocityController::updateFT(const FTConfig& c, RtStatus& rtStatus)
89  // {
90  // /// run in rt thread
91  // ftsensor.updateStatus();
92  // if (c.reCalibrate)
93  // {
94  // ftsensor.calibrated.store(false);
95  // /// TODO how to toggle recalibration?
96  // }
97  // ftsensor.compensateTCPGravity(c);
98  // if (!ftsensor.calibrated.load())
99  // {
100  // if (ftsensor.calibrate(c, rtStatus.deltaT))
101  // {
102  // ftsensor.calibrated.store(true);
103  // }
104  // }
105  // else
106  // {
107  // rtStatus.currentForceTorque = ftsensor.getFilteredForceTorque(c);
108  // }
109  // }
110 
111  void
113  {
114  /// run in rt thread
115  rtStatus.currentPose = rtTCP->getPoseInRootFrame();
116 
117  /// ---------------------------- safety guard by FT and target pose ------------------------
118  rtStatus.poseDiffMatImp =
119  c.desiredPose.block<3, 3>(0, 0) * rtStatus.currentPose.block<3, 3>(0, 0).transpose();
120  rtStatus.oriDiffAngleAxis.fromRotationMatrix(rtStatus.poseDiffMatImp);
121 
122  /// this should not be moved to non rt, just in case non rt thread dies, rt still functions as safely
123  rtStatus.forceTorqueSafe = ftsensor.isSafe(c.ftConfig);
124  if (not rtStatus.forceTorqueSafe)
125  {
126  ARMARX_INFO << "FTGuard indicates RT not safe";
127  if (c.ftConfig.resetToCurrentPoseOnSafeGuardTrigger)
128  {
129  ARMARX_INFO << "reset to current pose " << rtStatus.currentPose;
130  c.desiredPose = rtStatus.currentPose;
131  }
132  else
133  {
134  // ARMARX_INFO << "reset to valid target pose " << rtStatus.desiredPose;
135  c.desiredPose = rtStatus.desiredPose;
136  }
137  // rtStatus.forceTorqueSafe = false;
138  // rtStatus.rtSafe = false;
139  // rtStatus.rtTargetSafe = true;
140  }
141 
142  if ((c.desiredPose.block<3, 1>(0, 3) - rtStatus.currentPose.block<3, 1>(0, 3)).norm() >
143  c.safeDistanceMMToGoal or
144  std::fminf(rtStatus.oriDiffAngleAxis.angle(),
145  2 * M_PI - rtStatus.oriDiffAngleAxis.angle()) >
146  VirtualRobot::MathTools::deg2rad(c.safeRotAngleDegreeToGoal))
147  {
148  rtStatus.desiredPoseUnsafe = c.desiredPose;
149  c.desiredPose = rtStatus.desiredPose; // TODO: remove this?
150  // rtStatus.rtSafe = false;
151  rtStatus.rtTargetSafe = false;
152  // rtStatus.forceTorqueSafe = true;
153  }
154  else
155  {
156  rtStatus.rtTargetSafe = true;
157  }
158 
159  rtStatus.rtSafe = rtStatus.forceTorqueSafe and rtStatus.rtTargetSafe;
160  if (rtStatus.rtSafe)
161  {
162  rtStatus.desiredPose = c.desiredPose;
163  // rtStatus.rtSafe = true;
164  // rtStatus.rtTargetSafe = true;
165  // rtStatus.forceTorqueSafe = true;
166  }
167 
168  /// ------------------------------ compute jacobi ------------------------------------------
169  rtStatus.jacobi =
170  ik->getJacobianMatrix(rtTCP, VirtualRobot::IKSolver::CartesianSelection::All);
171  ARMARX_CHECK_EQUAL(rtStatus.numJoints, rtStatus.jacobi.cols());
172  ARMARX_CHECK_EQUAL(6, rtStatus.jacobi.rows());
173 
174  // rtStatus.jpinv = ik->computePseudoInverseJacobianMatrix(rtStatus.jacobi, lambda);
175  rtStatus.jpinv = ik->computePseudoInverseJacobianMatrix(
176  rtStatus.jacobi,
177  ik->getJacobiRegularization(VirtualRobot::IKSolver::CartesianSelection::All));
178  ARMARX_CHECK_EQUAL(6, rtStatus.jpinv.cols());
179  ARMARX_CHECK_EQUAL(rtStatus.numJoints, rtStatus.jpinv.rows());
180 
181  rtStatus.jacobi.block(0, 0, 3, rtStatus.numJoints) =
182  0.001 * rtStatus.jacobi.block(0, 0, 3, rtStatus.numJoints);
183 
184  rtStatus.jtpinv =
185  ik->computePseudoInverseJacobianMatrix(rtStatus.jacobi.transpose(), lambda);
186  ARMARX_CHECK_EQUAL(rtStatus.numJoints, rtStatus.jtpinv.cols());
187  ARMARX_CHECK_EQUAL(6, rtStatus.jtpinv.rows());
188 
189  /// ------------------------------ update velocity/twist -----------------------------------
190  ARMARX_CHECK_EQUAL(rtStatus.numJoints, rtStatus.jointPos.rows());
191  ARMARX_CHECK_EQUAL(rtStatus.numJoints, rtStatus.jointVel.rows());
192  ARMARX_CHECK_EQUAL(rtStatus.numJoints, rtStatus.qvelFiltered.rows());
193 
194  rtStatus.qvelFiltered =
195  (1 - c.qvelFilter) * rtStatus.qvelFiltered + c.qvelFilter * rtStatus.jointVel;
196  rtStatus.currentTwist = rtStatus.jacobi * rtStatus.qvelFiltered;
197 
198  /// ------------------------------------- Impedance control --------------------------------
199  /// calculate pose error between target pose and current pose
200  /// !!! This is very important: you have to keep position and orientation both
201  /// with UI unit (meter, radian) to calculate impedance force.
202 
203  rtStatus.poseDiffMatImp = rtStatus.desiredPose.block<3, 3>(0, 0) *
204  rtStatus.currentPose.block<3, 3>(0, 0).transpose();
205  // rtStatus.poseErrorImp.head<3>() = 0.001 * (rtStatus.desiredPose.block<3, 1>(0, 3) -
206  // rtStatus.currentPose.block<3, 1>(0, 3));
207  rtStatus.poseErrorImp.head<3>() = (rtStatus.desiredPose.block<3, 1>(0, 3) -
208  rtStatus.currentPose.block<3, 1>(0, 3)); /// in mm
209  rtStatus.poseErrorImp.tail<3>() =
210  VirtualRobot::MathTools::eigen3f2rpy(rtStatus.poseDiffMatImp);
211 
212  /// ------------------------------------- Velocity control ---------------------------------------------------
213  /// calculate pose error between target pose and current pose
214  /// !!! This is very important: you have to keep position and orientation both
215  /// with UI unit (meter, radian) to calculate desired Cartesian velocity.
216  rtStatus.cartesianVelTarget = c.kpCartesianVel.cwiseProduct(rtStatus.poseErrorImp) -
217  c.kdCartesianVel.cwiseProduct(rtStatus.currentTwist);
218 
219  rtStatus.poseErrorImp.head<3>() *= 0.001;
220  rtStatus.forceImpedance = c.kpImpedance.cwiseProduct(rtStatus.poseErrorImp) -
221  c.kdImpedance.cwiseProduct(rtStatus.currentTwist);
222 
223 
224  /// ----------------------------- Nullspace PD Control --------------------------------------------------
225  ARMARX_CHECK_EQUAL(rtStatus.numJoints, c.kpNullspaceTorque.rows());
226  ARMARX_CHECK_EQUAL(rtStatus.numJoints, c.kdNullspaceTorque.rows());
227  ARMARX_CHECK_EQUAL(rtStatus.numJoints, rtStatus.nullspaceTorque.rows());
228  ARMARX_CHECK_EQUAL(rtStatus.numJoints, c.kpNullspaceVel.rows());
229  ARMARX_CHECK_EQUAL(rtStatus.numJoints, c.kdNullspaceVel.rows());
230  ARMARX_CHECK_EQUAL(rtStatus.numJoints, rtStatus.nullspaceVelocity.rows());
231  ARMARX_CHECK_EQUAL(rtStatus.numJoints, c.desiredNullspaceJointAngles.value().size());
232 
233  rtStatus.nullspaceTorque = c.kpNullspaceTorque.cwiseProduct(
234  c.desiredNullspaceJointAngles.value() - rtStatus.jointPos) -
235  c.kdNullspaceTorque.cwiseProduct(rtStatus.jointVel);
236  rtStatus.nullspaceVelocity =
237  c.kpNullspaceVel.cwiseProduct(c.desiredNullspaceJointAngles.value() -
238  rtStatus.jointPos) -
239  c.kdNullspaceVel.cwiseProduct(rtStatus.qvelFiltered);
240 
241  /// ----------------------------- Map TS target force/velocity to JS --------------------------------------------------
242  ARMARX_CHECK_EQUAL(rtStatus.numJoints, rtStatus.desiredJointTorques.rows());
243  ARMARX_CHECK_EQUAL(rtStatus.numJoints, rtStatus.desiredJointVelocity.rows());
244  rtStatus.desiredJointTorques =
245  rtStatus.jacobi.transpose() * rtStatus.forceImpedance +
246  (I - rtStatus.jacobi.transpose() * rtStatus.jtpinv) * rtStatus.nullspaceTorque;
247  rtStatus.desiredJointVelocity =
248  rtStatus.jpinv * rtStatus.cartesianVelTarget +
249  (I - rtStatus.jpinv * rtStatus.jacobi) * rtStatus.nullspaceVelocity;
250 
251  /// ----------------------------- write torque target -------------------------------------
252  for (int i = 0; i < rtStatus.desiredJointTorques.rows(); ++i)
253  {
254  rtStatus.desiredJointTorques(i) =
255  std::clamp(rtStatus.desiredJointTorques(i), -c.torqueLimit, c.torqueLimit);
256  }
257  for (int i = 0; i < rtStatus.desiredJointVelocity.rows(); ++i)
258  {
259  rtStatus.desiredJointVelocity(i) =
260  std::clamp(rtStatus.desiredJointVelocity(i), -c.velocityLimit, c.velocityLimit);
261  }
262  }
263 
264  void
266  const size_t numDoFTorque,
267  const size_t numDoFVelocity)
268  {
269  /// This function can be called before the RT thread.
270  /// base
271  jointPosition.resize(nDoF, 0.);
272  jointVelocity.resize(nDoF, 0.);
273  jointTorque.resize(nDoF, 0.);
274  jointPos.setZero(nDoF);
275  jointVel.setZero(nDoF);
276  jointTor.setZero(nDoF);
277  deltaT = 0.0;
278  accumulateTime = 0.0;
279  numJoints = nDoF;
280  nDoFTorque = numDoFTorque;
281  nDoFVelocity = numDoFVelocity;
283 
284  /// targets
285  desiredJointTorques.setZero(nDoF);
286  desiredJointVelocity.setZero(nDoF);
287  cartesianVelTarget.setZero();
288  nullspaceTorque.setZero(nDoF);
289  nullspaceVelocity.setZero(nDoF);
290 
291  /// force torque
292  currentForceTorque.setZero();
293  safeFTGuardOffset.setZero();
294 
295  /// task space variables
296  forceImpedance.setZero();
297 
298  /// current status
299  qvelFiltered.setZero(nDoF);
300  currentPose.setZero();
301  currentTwist.setZero();
302  desiredPose.setZero();
303  desiredPoseUnsafe.setZero();
304 
305  /// intermediate results
306  poseDiffMatImp.setZero();
307  poseErrorImp.setZero();
309 
310  /// others
311  jacobi.setZero(6, nDoF);
312  jtpinv.setZero(6, nDoF);
313  jpinv.setZero(nDoF, 6);
314  rtSafe = false;
315  rtTargetSafe = true;
316  }
317 
318  void
320  const Eigen::Matrix4f& currentTCPPose)
321  {
322  /// !!!! TO BE UPDATED IN PREACTIVATE !!!!
323  /// only then the up-to-date robot joint information is available
324  currentPose = currentTCPPose;
325  desiredPose = currentTCPPose;
326  accumulateTime = 0.0;
327  }
328 
329 } // namespace armarx::control::common::control_law
armarx::control::common::control_law::RobotStatus::jointTor
Eigen::VectorXf jointTor
Definition: common.h:40
TaskspaceMixedImpedanceVelocityController.h
armarx::control::common::ft::FTSensor::isSafe
bool isSafe(const FTConfig &c)
Definition: FTSensor.cpp:198
armarx::control::common::control_law::TaskspaceMixedImpedanceVelocityController::RtStatus::desiredPose
Eigen::Matrix4f desiredPose
Definition: TaskspaceMixedImpedanceVelocityController.h:69
armarx::control::common::control_law::TaskspaceMixedImpedanceVelocityController::RtStatus::forceTorqueSafe
bool forceTorqueSafe
Definition: TaskspaceMixedImpedanceVelocityController.h:57
armarx::control::common::control_law::TaskspaceMixedImpedanceVelocityController::RtStatus::rtSafe
bool rtSafe
Definition: TaskspaceMixedImpedanceVelocityController.h:81
armarx::control::common::control_law::TaskspaceMixedImpedanceVelocityController::jointIDTorqueMode
std::vector< size_t > jointIDTorqueMode
Definition: TaskspaceMixedImpedanceVelocityController.h:110
armarx::control::common::control_law::TaskspaceMixedImpedanceVelocityController::RtStatus::poseErrorImp
Eigen::Vector6f poseErrorImp
Definition: TaskspaceMixedImpedanceVelocityController.h:74
armarx::control::common::control_law::TaskspaceMixedImpedanceVelocityController::RtStatus::forceImpedance
Eigen::Vector6f forceImpedance
task space variables
Definition: TaskspaceMixedImpedanceVelocityController.h:60
armarx::control::common::control_law::TaskspaceMixedImpedanceVelocityController::jointIDVelocityMode
std::vector< size_t > jointIDVelocityMode
Definition: TaskspaceMixedImpedanceVelocityController.h:111
armarx::control::common::control_law::TaskspaceMixedImpedanceVelocityController::ftsensor
common::ft::FTSensor ftsensor
Definition: TaskspaceMixedImpedanceVelocityController.h:108
armarx::control::common::control_law::RobotStatus::jointTorque
std::vector< float > jointTorque
Definition: common.h:37
GfxTL::Matrix4f
MatrixXX< 4, 4, float > Matrix4f
Definition: MatrixXX.h:650
armarx::control::common::control_law::TaskspaceMixedImpedanceVelocityController::RtStatus::oriDiffAngleAxis
Eigen::AngleAxisf oriDiffAngleAxis
Definition: TaskspaceMixedImpedanceVelocityController.h:75
ARMARX_CHECK_NOT_NULL
#define ARMARX_CHECK_NOT_NULL(ptr)
This macro evaluates whether ptr is not null and if it turns out to be false it will throw an Express...
Definition: ExpressionException.h:206
armarx::control::common::control_law::TaskspaceMixedImpedanceVelocityController::preactivateInit
void preactivateInit(const VirtualRobot::RobotNodeSetPtr &rns)
Definition: TaskspaceMixedImpedanceVelocityController.cpp:48
armarx::control::common::control_law::RobotStatus::jointPos
Eigen::VectorXf jointPos
Definition: common.h:38
c
constexpr T c
Definition: UnscentedKalmanFilterTest.cpp:46
armarx::control::common::control_law::TaskspaceMixedImpedanceVelocityController::RtStatus::currentTwist
Eigen::Vector6f currentTwist
Definition: TaskspaceMixedImpedanceVelocityController.h:68
armarx::control::common::control_law::TaskspaceMixedImpedanceVelocityController::tcp
VirtualRobot::RobotNodePtr tcp
Definition: TaskspaceMixedImpedanceVelocityController.h:106
armarx::control::common::control_law::TaskspaceMixedImpedanceVelocityController::nDoFTorque
size_t nDoFTorque
Definition: TaskspaceMixedImpedanceVelocityController.h:93
armarx::control::common::control_law::TaskspaceMixedImpedanceVelocityController::RtStatus::nullspaceVelocity
Eigen::VectorXf nullspaceVelocity
Definition: TaskspaceMixedImpedanceVelocityController.h:52
armarx::control::common::control_law::RobotStatus::jointVelocity
std::vector< float > jointVelocity
Definition: common.h:36
armarx::control::common::control_law::TaskspaceMixedImpedanceVelocityController::RtStatus::poseDiffMatImp
Eigen::Matrix3f poseDiffMatImp
intermediate results
Definition: TaskspaceMixedImpedanceVelocityController.h:73
device.h
armarx::control::common::control_law::TaskspaceMixedImpedanceVelocityController::RtStatus::nDoFVelocity
size_t nDoFVelocity
Definition: TaskspaceMixedImpedanceVelocityController.h:85
armarx::control::common::control_law::TaskspaceMixedImpedanceVelocityController::RtStatus::safeFTGuardOffset
Eigen::Vector6f safeFTGuardOffset
Definition: TaskspaceMixedImpedanceVelocityController.h:56
clamp
double clamp(double x, double a, double b)
Definition: point.hpp:136
armarx::control::common::control_law::TaskspaceMixedImpedanceVelocityController::RtStatus::currentPose
Eigen::Matrix4f currentPose
Definition: TaskspaceMixedImpedanceVelocityController.h:67
armarx::control::common::control_law::TaskspaceMixedImpedanceVelocityController::firstRun
void firstRun()
Definition: TaskspaceMixedImpedanceVelocityController.cpp:54
GfxTL::Identity
void Identity(MatrixXX< N, N, T > *a)
Definition: MatrixXX.h:570
armarx::control::common::control_law::TaskspaceMixedImpedanceVelocityController::RtStatus::rtTargetSafe
bool rtTargetSafe
Definition: TaskspaceMixedImpedanceVelocityController.h:82
armarx::control::common::control_law::TaskspaceMixedImpedanceVelocityController::isControlModeValid
bool isControlModeValid(const std::vector< std::string > &nameList, const std::map< std::string, std::string > &jointControlModeMap)
Definition: TaskspaceMixedImpedanceVelocityController.cpp:60
M_PI
#define M_PI
Definition: MathTools.h:17
armarx::control::common::control_law::TaskspaceMixedImpedanceVelocityController::RtStatus::rtPreActivate
void rtPreActivate(const Eigen::Matrix4f &currentPose)
Definition: TaskspaceMixedImpedanceVelocityController.cpp:319
armarx::control::common::control_law::TaskspaceMixedImpedanceVelocityController::Config
common::control_law::arondto::TaskspaceMixedImpedanceVelocityControllerConfig Config
Definition: TaskspaceMixedImpedanceVelocityController.h:41
armarx::control::common::control_law::TaskspaceMixedImpedanceVelocityController::RtStatus::desiredJointVelocity
Eigen::VectorXf desiredJointVelocity
Definition: TaskspaceMixedImpedanceVelocityController.h:50
armarx::control::common::control_law::TaskspaceMixedImpedanceVelocityController::RtStatus
internal status of the controller, containing intermediate variables, mutable targets
Definition: TaskspaceMixedImpedanceVelocityController.h:46
armarx::control::common::control_law::RobotStatus::jointVel
Eigen::VectorXf jointVel
Definition: common.h:39
armarx::control::common::control_law
This file is part of ArmarX.
Definition: aron_conversions.cpp:68
armarx::control::common::control_law::TaskspaceMixedImpedanceVelocityController::RtStatus::jpinv
Eigen::MatrixXf jpinv
Definition: TaskspaceMixedImpedanceVelocityController.h:80
ControlTarget1DoFActuator.h
armarx::control::common::control_law::TaskspaceMixedImpedanceVelocityController::RtStatus::reset
void reset(const unsigned int nDoF, const size_t numDoFTorque, const size_t numDoFVelocity)
Definition: TaskspaceMixedImpedanceVelocityController.cpp:265
ARMARX_ERROR
#define ARMARX_ERROR
Definition: Logging.h:196
armarx::control::common::control_law::TaskspaceMixedImpedanceVelocityController::RtStatus::desiredJointTorques
Eigen::VectorXf desiredJointTorques
targets
Definition: TaskspaceMixedImpedanceVelocityController.h:49
armarx::control::common::ft::FTSensor::reset
void reset()
Definition: FTSensor.cpp:91
armarx::control::common::control_law::TaskspaceMixedImpedanceVelocityController::nDoFVelocity
size_t nDoFVelocity
Definition: TaskspaceMixedImpedanceVelocityController.h:94
armarx::control::common::control_law::RobotStatus::jointPosition
std::vector< float > jointPosition
Definition: common.h:35
armarx::control::common::control_law::TaskspaceMixedImpedanceVelocityController::RtStatus::desiredPoseUnsafe
Eigen::Matrix4f desiredPoseUnsafe
Definition: TaskspaceMixedImpedanceVelocityController.h:70
armarx::control::common::control_law::TaskspaceMixedImpedanceVelocityController::run
void run(Config &c, RtStatus &robotStatus)
Definition: TaskspaceMixedImpedanceVelocityController.cpp:112
armarx::control::common::control_law::TaskspaceMixedImpedanceVelocityController::initialize
void initialize(const VirtualRobot::RobotNodeSetPtr &rns, const VirtualRobot::RobotNodeSetPtr &rtRns, const std::vector< size_t > &torqueControlledIndex, const std::vector< size_t > &velocityControlledIndex)
Definition: TaskspaceMixedImpedanceVelocityController.cpp:23
armarx::control::common::control_law::TaskspaceMixedImpedanceVelocityController::RtStatus::jtpinv
Eigen::MatrixXf jtpinv
Definition: TaskspaceMixedImpedanceVelocityController.h:79
ARMARX_INFO
#define ARMARX_INFO
Definition: Logging.h:181
armarx::control::common::control_law::TaskspaceMixedImpedanceVelocityController::rtTCP
VirtualRobot::RobotNodePtr rtTCP
Definition: TaskspaceMixedImpedanceVelocityController.h:107
magic_enum::detail::find
constexpr std::size_t find(string_view str, char_type c) noexcept
Definition: magic_enum.hpp:309
armarx::control::common::control_law::TaskspaceMixedImpedanceVelocityController::RtStatus::nullspaceTorque
Eigen::VectorXf nullspaceTorque
Definition: TaskspaceMixedImpedanceVelocityController.h:51
ControlThreadOutputBuffer.h
armarx::control::common::control_law::TaskspaceMixedImpedanceVelocityController::RtStatus::jacobi
Eigen::MatrixXf jacobi
others
Definition: TaskspaceMixedImpedanceVelocityController.h:78
armarx::control::common::control_law::TaskspaceMixedImpedanceVelocityController::RtStatus::qvelFiltered
Eigen::VectorXf qvelFiltered
current status
Definition: TaskspaceMixedImpedanceVelocityController.h:66
ARMARX_CHECK_EQUAL
#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...
Definition: ExpressionException.h:130
armarx::transpose
std::vector< std::vector< T > > transpose(const std::vector< std::vector< T >> &src, Thrower thrower)
Definition: SimoxCSpace.cpp:772
armarx::control::common::control_law::RobotStatus::numJoints
unsigned int numJoints
Definition: common.h:43
armarx::control::common::control_law::TaskspaceMixedImpedanceVelocityController::RtStatus::cartesianVelTarget
Eigen::Vector6f cartesianVelTarget
Definition: TaskspaceMixedImpedanceVelocityController.h:61
armarx::control::common::control_law::TaskspaceMixedImpedanceVelocityController::RtStatus::nDoFTorque
size_t nDoFTorque
Definition: TaskspaceMixedImpedanceVelocityController.h:84
armarx::control::common::control_law::TaskspaceMixedImpedanceVelocityController::numOfJoints
unsigned int numOfJoints
Definition: TaskspaceMixedImpedanceVelocityController.h:92
armarx::control::common::control_law::RobotStatus::accumulateTime
double accumulateTime
Definition: common.h:42
SensorValue1DoFActuator.h
armarx::control::common::control_law::RobotStatus::deltaT
double deltaT
Definition: common.h:41
armarx::control::common::control_law::TaskspaceMixedImpedanceVelocityController::RtStatus::currentForceTorque
Eigen::Vector6f currentForceTorque
force torque
Definition: TaskspaceMixedImpedanceVelocityController.h:55