CompositeDiffIK.cpp
Go to the documentation of this file.
1 /*
2  * This file is part of ArmarX.
3  *
4  * Copyright (C) 2012-2016, High Performance Humanoid Technologies (H2T),
5  * Karlsruhe Institute of Technology (KIT), all rights reserved.
6  *
7  * ArmarX is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License version 2 as
9  * published by the Free Software Foundation.
10  *
11  * ArmarX is distributed in the hope that it will be useful, but
12  * WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program. If not, see <http://www.gnu.org/licenses/>.
18  *
19  * @author Simon Ottenhaus (simon dot ottenhaus at kit dot edu)
20  * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
21  * GNU General Public License
22  */
23 
24 #include "CompositeDiffIK.h"
25 
26 #include <cfloat>
27 
28 #include <VirtualRobot/IK/DifferentialIK.h>
29 #include <VirtualRobot/Nodes/RobotNode.h>
30 #include <VirtualRobot/Robot.h>
31 #include <VirtualRobot/RobotNodeSet.h>
32 #include <VirtualRobot/math/Helpers.h>
33 
35 
36 using namespace armarx;
37 
38 CompositeDiffIK::CompositeDiffIK(const VirtualRobot::RobotNodeSetPtr& rns) : rns(rns)
39 {
40  ik.reset(new VirtualRobot::DifferentialIK(
41  rns, rns->getRobot()->getRootNode(), VirtualRobot::JacobiProvider::eSVDDamped));
42 }
43 
44 void
46 {
47  targets.emplace_back(target);
48 }
49 
51 CompositeDiffIK::addTarget(const VirtualRobot::RobotNodePtr& tcp,
52  const Eigen::Matrix4f& target,
54 {
55  TargetPtr t = std::make_shared<Target>(rns, tcp, target, mode);
56  addTarget(t);
57  return t;
58 }
59 
60 void
62 {
63  nullspaceGradients.emplace_back(gradient);
64 }
65 
67 CompositeDiffIK::addNullspacePositionTarget(const VirtualRobot::RobotNodePtr& tcp,
68  const Eigen::Vector3f& target)
69 {
71  rns,
72  tcp,
73  math::Helpers::CreatePose(target, Eigen::Matrix3f::Identity()),
76  return nst;
77 }
78 
81 {
82  //ARMARX_IMPORTANT << "###";
83  //ARMARX_IMPORTANT << VAROUT(rns->getJointValuesEigen().transpose());
84  if (params.resetRnsValues)
85  {
86  for (VirtualRobot::RobotNodePtr rn : rns->getAllRobotNodes())
87  {
88  if (rn->isLimitless())
89  {
90  rn->setJointValue(0);
91  }
92  else
93  {
94  rn->setJointValue((rn->getJointLimitHi() + rn->getJointLimitLo()) / 2);
95  }
96  }
97  }
98  //ARMARX_IMPORTANT << VAROUT(rns->getJointValuesEigen().transpose());
99 
100  SolveState s;
101 
102  s.rows = 0;
103  s.cols = rns->getSize();
104 
105  for (const TargetPtr& target : targets)
106  {
107  s.rows += CartesianSelectionToSize(target->mode);
108  }
109 
110  s.jointRegularization = Eigen::VectorXf::Zero(s.cols);
111  for (size_t i = 0; i < rns->getSize(); i++)
112  {
113  s.jointRegularization(i) = rns->getNode(i)->isTranslationalJoint()
116  }
117 
118  s.cartesianRegularization = Eigen::VectorXf::Zero(s.rows);
119  {
120  CartesianVelocityController tmpVC(rns);
121  int row = 0;
122  for (const TargetPtr& target : targets)
123  {
124  int h = CartesianSelectionToSize(target->mode);
125  target->jacobi = Eigen::MatrixXf::Zero(h, s.cols);
126  s.cartesianRegularization.block(row, 0, h, 1) =
127  tmpVC.calculateRegularization(target->mode);
128  row += h;
129  }
130  }
131  //ARMARX_IMPORTANT << "START";
132  //ARMARX_INFO << VAROUT(regularization.transpose());
133 
134  s.jointValues = rns->getJointValuesEigen();
135 
136  for (size_t i = 0; i <= params.steps; i++)
137  {
138  step(params, s, i);
139  }
140 
141  bool allReached = true;
142  for (const TargetPtr& target : targets)
143  {
144  allReached = allReached &&
145  target->pCtrl.reached(
146  target->target, target->mode, target->maxPosError, target->maxOriError);
147  }
148 
149  //ARMARX_IMPORTANT << "END";
150 
151 
152  //ARMARX_IMPORTANT << ss.str();
153 
154  Result result;
155  result.jointValues = rns->getJointValuesEigen();
156  result.reached = allReached;
157  result.jointLimitMargins = Eigen::VectorXf::Zero(rns->getSize());
158  result.minimumJointLimitMargin = FLT_MAX;
159  for (size_t i = 0; i < rns->getSize(); i++)
160  {
161  VirtualRobot::RobotNodePtr rn = rns->getNode(i);
162  if (rn->isLimitless())
163  {
164  result.jointLimitMargins(i) = M_PI;
165  }
166  else
167  {
168  result.jointLimitMargins(i) = std::min(rn->getJointValue() - rn->getJointLimitLo(),
169  rn->getJointLimitHi() - rn->getJointValue());
170  result.minimumJointLimitMargin =
172  }
173  }
174 
175  return result;
176 }
177 
178 Eigen::MatrixXf
180 {
181  Eigen::FullPivLU<Eigen::MatrixXf> lu_decomp(jacobi);
182  Eigen::MatrixXf nullspaceLU = lu_decomp.kernel();
183  return nullspaceLU;
184 }
185 
186 Eigen::MatrixXf
188 {
189  // cols >= rows
190  int rows = jacobi.rows();
191  int cols = jacobi.cols();
192  Eigen::JacobiSVD<Eigen::MatrixXf> svd(jacobi, Eigen::ComputeFullU | Eigen::ComputeFullV);
193  ///
194  /// \brief V contains right singular vector and nullspace:
195  /// V.shape: (cols,cols)
196  /// singular vectors: V[:,0:rows]
197  /// nullspace: V[:,rows:cols-rows]
198  ///
199  Eigen::MatrixXf V = svd.matrixV();
200  Eigen::MatrixXf nullspaceSVD = V.block(0, rows, cols, cols - rows);
201  return nullspaceSVD;
202 }
203 
204 void
206 {
207  //ARMARX_IMPORTANT << VAROUT(i);
208  s.jacobi = Eigen::MatrixXf::Zero(s.rows, s.cols);
209  s.invJac = Eigen::MatrixXf::Zero(s.cols, s.rows);
210 
211  Eigen::VectorXf cartesianVel = Eigen::VectorXf::Zero(s.rows);
212  {
213  int row = 0;
214  for (const TargetPtr& target : targets)
215  {
216  ik->updateJacobianMatrix(target->jacobi, target->tcp, target->mode);
217  int h = CartesianSelectionToSize(target->mode);
218  s.jacobi.block(row, 0, h, s.cols) = target->jacobi;
219  Eigen::VectorXf cv = target->pCtrl.calculate(target->target, target->mode);
220  //ARMARX_INFO << VAROUT(cv.transpose());
221  cartesianVel.block(row, 0, h, 1) = cv;
222  row += h;
223  if (params.returnIKSteps)
224  {
226  step.tcpPose = target->tcp->getPoseInRootFrame();
227  step.cartesianVel = cv;
228  step.posDiff = target->pCtrl.getPositionDiff(target->target);
229  step.oriDiff = target->pCtrl.getOrientationDiff(target->target);
230  target->ikSteps.emplace_back(step);
231  }
232  }
233  }
234  //ARMARX_INFO << VAROUT(cartesianVel.transpose());
235  if (stepNr == 0)
236  {
237  //ARMARX_IMPORTANT << VAROUT(s.jacobi);
238  }
239 
240  for (int row = 0; row < s.rows; row++)
241  {
242  s.jacobi.block(row, 0, 1, s.cols) =
243  s.jacobi.block(row, 0, 1, s.cols).cwiseProduct(s.jointRegularization.transpose());
244  }
245  if (stepNr == 0)
246  {
247  //ARMARX_IMPORTANT << VAROUT(s.jacobi);
248  }
249 
250  ik->updatePseudoInverseJacobianMatrix(s.invJac, s.jacobi, 0, s.cartesianRegularization);
251 
252  Eigen::VectorXf nullspaceVel = Eigen::VectorXf::Zero(s.cols);
253 
254  for (const NullspaceGradientPtr& nsGradient : nullspaceGradients)
255  {
256  Eigen::VectorXf nsgrad = nsGradient->kP * nsGradient->getGradient(params);
257  //ARMARX_INFO << VAROUT(nsgrad.transpose());
258  nullspaceVel += nsgrad;
259  if (stepNr == 0)
260  {
261  //ARMARX_IMPORTANT << VAROUT(nsgrad.transpose());
262  }
263  }
264  //LimitInfNormTo(nullspaceVel, params.maxJointAngleStep);
265 
266 
267  Eigen::JacobiSVD<Eigen::MatrixXf> svd(s.jacobi, Eigen::ComputeFullU | Eigen::ComputeFullV);
268  Eigen::MatrixXf V = svd.matrixV();
269  Eigen::MatrixXf nullspaceSVD = V.block(0, s.rows, s.cols, s.cols - s.rows);
270 
271  s.nullspace = nullspaceSVD; // CalculateNullspaceSVD(s.jacobi);
272 
273  Eigen::VectorXf nsv = Eigen::VectorXf::Zero(s.cols);
274  for (int i = 0; i < s.nullspace.cols(); i++)
275  {
276  float squaredNorm = s.nullspace.col(i).squaredNorm();
277  // Prevent division by zero
278  if (squaredNorm > 1.0e-32f)
279  {
280  nsv += s.nullspace.col(i) * s.nullspace.col(i).dot(nullspaceVel) /
281  s.nullspace.col(i).squaredNorm();
282  }
283  }
284 
285  Eigen::VectorXf jv = s.invJac * cartesianVel;
286  //ARMARX_INFO << VAROUT(jv.transpose());
287  //ARMARX_INFO << VAROUT(nsv.transpose());
288  jv = jv + nsv;
289  jv = jv * params.stepSize;
290  jv = LimitInfNormTo(jv, params.maxJointAngleStep);
291  jv = jv.cwiseProduct(s.jointRegularization);
292 
293  //ARMARX_INFO << VAROUT(jv.transpose());
294 
295  Eigen::VectorXf newJointValues = s.jointValues + jv;
296  if (stepNr == 0)
297  {
298  //ARMARX_IMPORTANT << VAROUT(cartesianVel.transpose());
299  //ARMARX_IMPORTANT << VAROUT(nullspaceVel.transpose());
300 
301  //ARMARX_IMPORTANT << VAROUT(currentJointValues.transpose());
302  //ARMARX_IMPORTANT << VAROUT(newJointValues.transpose());
303  }
304  rns->setJointValues(newJointValues);
305  s.jointValues = newJointValues;
306 }
307 
308 int
310 {
311  switch (mode)
312  {
314  return 3;
316  return 3;
317  case VirtualRobot::IKSolver::CartesianSelection::All:
318  return 6;
319  default:
320  throw LocalException("mode not supported: ") << mode;
321  }
322 }
323 
324 CompositeDiffIK::Target::Target(const VirtualRobot::RobotNodeSetPtr& rns,
325  const VirtualRobot::RobotNodePtr& tcp,
326  const Eigen::Matrix4f& target,
328  tcp(tcp), target(target), mode(mode), pCtrl(tcp)
329 {
330  jacobi = Eigen::MatrixXf::Zero(0, 0);
331 }
332 
333 CompositeDiffIK::NullspaceTarget::NullspaceTarget(const VirtualRobot::RobotNodeSetPtr& rns,
334  const VirtualRobot::RobotNodePtr& tcp,
335  const Eigen::Matrix4f& target,
337  tcp(tcp), target(target), mode(mode), pCtrl(tcp), vCtrl(rns, tcp)
338 {
339 }
340 
341 void
343 {
344  ikSteps.clear();
345 }
346 
347 Eigen::VectorXf
349 {
350  Eigen::VectorXf cv = pCtrl.calculate(target, mode);
351  Eigen::VectorXf jv = vCtrl.calculate(cv, mode);
352  if (params.returnIKSteps)
353  {
355  step.tcpPose = tcp->getPoseInRootFrame();
356  step.posDiff = pCtrl.getPositionDiff(target);
357  step.oriDiff = pCtrl.getOrientationDiff(target);
358  step.cartesianVel = cv;
359  step.jointVel = jv;
360  ikSteps.emplace_back(step);
361  }
362  return jv;
363 }
364 
365 Eigen::VectorXf
366 CompositeDiffIK::LimitInfNormTo(Eigen::VectorXf vec, float maxValue)
367 {
368  float infNorm = vec.lpNorm<Eigen::Infinity>();
369  if (infNorm > maxValue)
370  {
371  vec = vec / infNorm * maxValue;
372  }
373  return vec;
374 }
375 
377  const VirtualRobot::RobotNodeSetPtr& rns) :
378  rns(rns), target(rns->getJointValuesEigen()), weight(Eigen::VectorXf::Zero(rns->getSize()))
379 {
380 }
381 
383  const VirtualRobot::RobotNodeSetPtr& rns,
384  const Eigen::VectorXf& target,
385  const Eigen::VectorXf& weight) :
386  rns(rns), target(target), weight(weight)
387 {
388 }
389 
390 void
392 {
393  this->target(index) = target;
394  this->weight(index) = weight;
395 }
396 
397 void
398 CompositeDiffIK::NullspaceJointTarget::set(const std::string& jointName, float target, float weight)
399 {
400  int index = rns->getRobotNodeIndex(jointName);
401  if (index < 0)
402  {
403  throw LocalException("RobotNodeSet has no joint ") << jointName;
404  }
405  set(index, target, weight);
406 }
407 
408 void
409 CompositeDiffIK::NullspaceJointTarget::set(const VirtualRobot::RobotNodePtr& rn,
410  float target,
411  float weight)
412 {
413  int index = rns->getRobotNodeIndex(rn);
414  if (index < 0)
415  {
416  throw LocalException("RobotNodeSet has no joint ") << rn->getName();
417  }
418  set(index, target, weight);
419 }
420 
421 void
423 {
424 }
425 
426 Eigen::VectorXf
428 {
429  return (target - rns->getJointValuesEigen()).cwiseProduct(weight);
430 }
431 
433  const VirtualRobot::RobotNodeSetPtr& rns) :
434  rns(rns), weight(Eigen::VectorXf::Constant(rns->getSize(), 1))
435 {
436 }
437 
439  const VirtualRobot::RobotNodeSetPtr& rns,
440  const Eigen::VectorXf& weight) :
441  rns(rns), weight(weight)
442 {
443 }
444 
445 void
447 {
448  this->weight(index) = weight;
449 }
450 
451 void
452 CompositeDiffIK::NullspaceJointLimitAvoidance::setWeight(const std::string& jointName, float weight)
453 {
454  int index = rns->getRobotNodeIndex(jointName);
455  if (index < 0)
456  {
457  throw LocalException("RobotNodeSet has no joint ") << jointName;
458  }
459  setWeight(index, weight);
460 }
461 
462 void
463 CompositeDiffIK::NullspaceJointLimitAvoidance::setWeight(const VirtualRobot::RobotNodePtr& rn,
464  float weight)
465 {
466  int index = rns->getRobotNodeIndex(rn);
467  if (index < 0)
468  {
469  throw LocalException("RobotNodeSet has no joint ") << rn->getName();
470  }
471  setWeight(index, weight);
472 }
473 
474 void
475 CompositeDiffIK::NullspaceJointLimitAvoidance::setWeights(const VirtualRobot::RobotNodeSetPtr& rns,
476  float weight)
477 {
478  for (const VirtualRobot::RobotNodePtr& rn : rns->getAllRobotNodes())
479  {
480  setWeight(rn, weight);
481  }
482 }
483 
484 void
486 {
487 }
488 
489 Eigen::VectorXf
491 {
492  Eigen::VectorXf r(rns->getSize());
493  for (size_t i = 0; i < rns->getSize(); i++)
494  {
495  VirtualRobot::RobotNodePtr rn = rns->getNode(i);
496  if (rn->isLimitless())
497  {
498  r(i) = 0;
499  }
500  else
501  {
502  float f = math::Helpers::ILerp(
503  rn->getJointLimitLo(), rn->getJointLimitHi(), rn->getJointValue());
504  r(i) = cos(f * M_PI);
505  //r(i) = math::MathUtils::Lerp(1.f, -1.f, f);
506  }
507  }
508  return r.cwiseProduct(weight);
509 }
510 
513 {
514  return tcp->getPoseInRootFrame().inverse() * target;
515 }
516 
517 Eigen::Vector3f
519 {
520  return (tcp->getPoseInRootFrame().inverse() * target).topRightCorner<3, 1>();
521 }
522 
523 auto
525 {
526  return simox::math::delta_angle(tcp->getPoseInRootFrame(), target);
527 }
armarx::CompositeDiffIK::TargetStep
Definition: CompositeDiffIK.h:140
armarx::CompositeDiffIK::Target::Target
Target(const VirtualRobot::RobotNodeSetPtr &rns, const VirtualRobot::RobotNodePtr &tcp, const Eigen::Matrix4f &target, VirtualRobot::IKSolver::CartesianSelection mode)
Definition: CompositeDiffIK.cpp:324
Eigen
Definition: Elements.h:32
armarx::CompositeDiffIK::Target::getPosError
Eigen::Vector3f getPosError() const
Definition: CompositeDiffIK.cpp:518
GfxTL::Orientation
ScalarT Orientation(const VectorXD< 2, ScalarT > &p1, const VectorXD< 2, ScalarT > &p2, const VectorXD< 2, ScalarT > &c)
Definition: Orientation.h:10
armarx::CompositeDiffIK::Parameters::resetRnsValues
bool resetRnsValues
Definition: CompositeDiffIK.h:54
index
uint8_t index
Definition: EtherCATFrame.h:59
armarx::CompositeDiffIK::Result::reached
bool reached
Definition: CompositeDiffIK.h:181
armarx::CompositeDiffIK::NullspaceJointLimitAvoidance::init
void init(Parameters &) override
Definition: CompositeDiffIK.cpp:485
armarx::CompositeDiffIK::Parameters::jointRegularizationTranslation
float jointRegularizationTranslation
Definition: CompositeDiffIK.h:56
GfxTL::Matrix4f
MatrixXX< 4, 4, float > Matrix4f
Definition: MatrixXX.h:650
armarx::CompositeDiffIK::NullspaceJointLimitAvoidance::getGradient
Eigen::VectorXf getGradient(Parameters &params) override
Definition: CompositeDiffIK.cpp:490
boost::target
Vertex target(const detail::edge_base< Directed, Vertex > &e, const PCG &)
Definition: point_cloud_graph.h:668
armarx::CartesianVelocityController::calculateRegularization
Eigen::VectorXf calculateRegularization(VirtualRobot::IKSolver::CartesianSelection mode)
Definition: CartesianVelocityController.cpp:246
armarx::CompositeDiffIK::NullspaceJointLimitAvoidance::setWeight
void setWeight(int index, float weight)
Definition: CompositeDiffIK.cpp:446
armarx::CompositeDiffIK::Parameters::stepSize
float stepSize
Definition: CompositeDiffIK.h:53
armarx::CompositeDiffIK::NullspaceJointTarget::getGradient
Eigen::VectorXf getGradient(Parameters &params) override
Definition: CompositeDiffIK.cpp:427
armarx::CompositeDiffIK::NullspaceJointTarget::set
void set(int index, float target, float weight)
Definition: CompositeDiffIK.cpp:391
armarx::CartesianVelocityController
Definition: CartesianVelocityController.h:36
armarx::CompositeDiffIK::SolveState
Definition: CompositeDiffIK.h:187
armarx::CompositeDiffIK::NullspaceTarget::NullspaceTarget
NullspaceTarget(const VirtualRobot::RobotNodeSetPtr &rns, const VirtualRobot::RobotNodePtr &tcp, const Eigen::Matrix4f &target, VirtualRobot::IKSolver::CartesianSelection mode)
Definition: CompositeDiffIK.cpp:333
armarx::CompositeDiffIK::Parameters::steps
size_t steps
Definition: CompositeDiffIK.h:50
armarx::CompositeDiffIK::solve
Result solve(Parameters params)
Definition: CompositeDiffIK.cpp:80
armarx::CompositeDiffIK::NullspaceTargetPtr
std::shared_ptr< class NullspaceTarget > NullspaceTargetPtr
Definition: CompositeDiffIK.h:98
armarx::CompositeDiffIK::addTarget
void addTarget(const TargetPtr &target)
Definition: CompositeDiffIK.cpp:45
armarx::CompositeDiffIK::NullspaceJointTarget::init
void init(Parameters &) override
Definition: CompositeDiffIK.cpp:422
GfxTL::Identity
void Identity(MatrixXX< N, N, T > *a)
Definition: MatrixXX.h:570
M_PI
#define M_PI
Definition: MathTools.h:17
armarx::CompositeDiffIK::Target::jacobi
Eigen::MatrixXf jacobi
Definition: CompositeDiffIK.h:158
armarx::NJointTaskSpaceDMPControllerMode::CartesianSelection
CartesianSelection
Definition: ControllerInterface.ice:34
armarx::CompositeDiffIK::step
void step(Parameters &params, SolveState &s, int stepNr)
Definition: CompositeDiffIK.cpp:205
armarx::CompositeDiffIK::TargetPtr
std::shared_ptr< Target > TargetPtr
Definition: CompositeDiffIK.h:170
armarx::CompositeDiffIK::CalculateNullspaceLU
static Eigen::MatrixXf CalculateNullspaceLU(const Eigen::Matrix4f &jacobi)
Definition: CompositeDiffIK.cpp:187
armarx::CompositeDiffIK::Target::getPoseError
Eigen::Matrix4f getPoseError() const
Definition: CompositeDiffIK.cpp:512
armarx::CompositeDiffIK::NullspaceTarget
Definition: CompositeDiffIK.h:79
armarx::CompositeDiffIK::NullspaceJointLimitAvoidance::NullspaceJointLimitAvoidance
NullspaceJointLimitAvoidance(const VirtualRobot::RobotNodeSetPtr &rns)
Definition: CompositeDiffIK.cpp:432
armarx::CompositeDiffIK::Result::jointLimitMargins
Eigen::VectorXf jointLimitMargins
Definition: CompositeDiffIK.h:182
armarx::CompositeDiffIK::LimitInfNormTo
static Eigen::VectorXf LimitInfNormTo(Eigen::VectorXf vec, float maxValue)
Definition: CompositeDiffIK.cpp:366
armarx::CompositeDiffIK::NullspaceGradientPtr
std::shared_ptr< class NullspaceGradient > NullspaceGradientPtr
Definition: CompositeDiffIK.h:68
armarx::CompositeDiffIK::Result::minimumJointLimitMargin
float minimumJointLimitMargin
Definition: CompositeDiffIK.h:183
armarx::CompositeDiffIK::CalculateNullspaceSVD
static Eigen::MatrixXf CalculateNullspaceSVD(const Eigen::Matrix4f &jacobi)
Definition: CompositeDiffIK.cpp:179
armarx::CompositeDiffIK::NullspaceTarget::getGradient
Eigen::VectorXf getGradient(Parameters &params) override
Definition: CompositeDiffIK.cpp:348
armarx::CompositeDiffIK::NullspaceTarget::init
void init(Parameters &) override
Definition: CompositeDiffIK.cpp:342
armarx::CompositeDiffIK::Result
Definition: CompositeDiffIK.h:172
set
set(LIBS ArmarXCoreInterfaces ${CMAKE_THREAD_LIBS_INIT} ${dl_LIBRARIES} ${rt_LIBRARIES} ${QT_LIBRARIES} ${Boost_LIBRARIES} BoostAssertionHandler ArmarXCPPUtility SimoxUtility) set(LIB_FILES ArmarXManager.cpp ArmarXMultipleObjectsScheduler.cpp ArmarXObjectScheduler.cpp ManagedIceObject.cpp ManagedIceObjectPlugin.cpp Component.cpp ComponentPlugin.cpp IceGridAdmin.cpp ArmarXObjectObserver.cpp IceManager.cpp PackagePath.cpp RemoteReferenceCount.cpp logging/LoggingUtil.cpp logging/Logging.cpp logging/LogSender.cpp logging/ArmarXLogBuf.cpp system/ArmarXDataPath.cpp system/DynamicLibrary.cpp system/ProcessWatcher.cpp system/FactoryCollectionBase.cpp system/cmake/CMakePackageFinder.cpp system/cmake/CMakePackageFinderCache.cpp system/cmake/ArmarXPackageToolInterface.cpp system/RemoteObjectNode.cpp services/sharedmemory/HardwareId.cpp services/tasks/RunningTask.cpp services/tasks/ThreadList.cpp services/tasks/ThreadPool.cpp services/profiler/Profiler.cpp services/profiler/FileLoggingStrategy.cpp services/profiler/IceLoggingStrategy.cpp application/Application.cpp application/ApplicationOptions.cpp application/ApplicationProcessFacet.cpp application/ApplicationNetworkStats.cpp application/properties/PropertyUser.cpp application/properties/Property.cpp application/properties/PropertyDefinition.cpp application/properties/PropertyDefinitionContainer.cpp application/properties/PropertyDefinitionHelpFormatter.cpp application/properties/PropertyDefinitionConfigFormatter.cpp application/properties/PropertyDefinitionBriefHelpFormatter.cpp application/properties/PropertyDefinitionXmlFormatter.cpp application/properties/PropertyDefinitionDoxygenFormatter.cpp application/properties/PropertyDefinitionDoxygenComponentPagesFormatter.cpp application/properties/PropertyDefinitionContainerBriefHelpFormatter.cpp application/properties/IceProperties.cpp exceptions/Exception.cpp exceptions/local/UnexpectedEnumValueException.cpp util/FileSystemPathBuilder.cpp util/StringHelpers.cpp util/IceReportSkipper.cpp util/Throttler.cpp util/distributed/AMDCallbackCollection.cpp util/distributed/RemoteHandle/ClientSideRemoteHandleControlBlock.cpp util/distributed/RemoteHandle/RemoteHandle.cpp util/distributed/RemoteHandle/RemoteHandleControlBlock.cpp time/ice_conversions.cpp time/json_conversions.cpp time/CallbackWaitLock.cpp time/Clock.cpp time/ClockType.cpp time/ClockTypeNames.cpp time/CycleUtil.cpp time/DateTime.cpp time/Duration.cpp time/Frequency.cpp time/LocalTimeServer.cpp time/Metronome.cpp time/ScopedStopWatch.cpp time/StopWatch.cpp time/Timer.cpp time/TimeKeeper.cpp time/TimeUtil.cpp csv/CsvWriter.cpp csv/CsvReader.cpp eigen/conversions.cpp eigen/ice_conversions.cpp) set(LIB_HEADERS ArmarXManager.h ArmarXDummyManager.h ArmarXMultipleObjectsScheduler.h ArmarXObjectObserver.h ArmarXObjectScheduler.h ArmarXFwd.h Component.h ComponentPlugin.h ComponentFactories.h CoreObjectFactories.h IceGridAdmin.h IceManager.h IceManagerImpl.h json_conversions.h ManagedIceObject.h ManagedIceObjectPlugin.h ManagedIceObjectImpl.h ManagedIceObjectDependency.h ManagedIceObjectRegistryInterface.h PackagePath.h RemoteReferenceCount.h system/ImportExport.h system/ImportExportComponent.h system/AbstractFactoryMethod.h system/FactoryCollectionBase.h system/Synchronization.h system/ArmarXDataPath.h system/DynamicLibrary.h system/ProcessWatcher.h system/ConditionSynchronization.h system/cmake/CMakePackageFinder.h system/cmake/CMakePackageFinderCache.h system/cmake/FindPackageX.cmake system/cmake/ArmarXPackageToolInterface.h system/RemoteObjectNode.h logging/LoggingUtil.h logging/LogSender.h logging/Logging.h logging/ArmarXLogBuf.h logging/SpamFilterData.h services/tasks/RunningTask.h services/tasks/PeriodicTask.h services/tasks/ThreadList.h services/tasks/TaskUtil.h services/tasks/ThreadPool.h services/sharedmemory/SharedMemoryProvider.h services/sharedmemory/SharedMemoryConsumer.h services/sharedmemory/IceSharedMemoryProvider.h services/sharedmemory/IceSharedMemoryConsumer.h services/sharedmemory/HardwareIdentifierProvider.h services/sharedmemory/HardwareId.h services/sharedmemory/exceptions/SharedMemoryExceptions.h services/profiler/Profiler.h services/profiler/LoggingStrategy.h services/profiler/FileLoggingStrategy.h services/profiler/IceLoggingStrategy.h application/Application.h application/ApplicationOptions.h application/ApplicationProcessFacet.h application/ApplicationNetworkStats.h application/properties/forward_declarations.h application/properties/Properties.h application/properties/Property.h application/properties/PluginEigen.h application/properties/PluginEnumNames.h application/properties/PluginCfgStruct.h application/properties/PluginAll.h application/properties/PropertyUser.h application/properties/PropertyDefinition.h application/properties/PropertyDefinition.hpp application/properties/PropertyDefinitionInterface.h application/properties/PropertyDefinitionContainer.h application/properties/PropertyDefinitionFormatter.h application/properties/PropertyDefinitionContainerFormatter.h application/properties/PropertyDefinitionConfigFormatter.h application/properties/PropertyDefinitionHelpFormatter.h application/properties/PropertyDefinitionBriefHelpFormatter.h application/properties/PropertyDefinitionXmlFormatter.h application/properties/PropertyDefinitionDoxygenFormatter.h application/properties/PropertyDefinitionDoxygenComponentPagesFormatter.h application/properties/PropertyDefinitionContainerBriefHelpFormatter.h application/properties/ProxyPropertyDefinition.h application/properties/IceProperties.h exceptions/Exception.h exceptions/LocalException.h exceptions/local/DynamicLibraryException.h exceptions/local/ExpressionException.h exceptions/local/FileIOException.h exceptions/local/InvalidPropertyValueException.h exceptions/local/MissingRequiredPropertyException.h exceptions/local/PropertyInheritanceCycleException.h exceptions/local/ProxyNotInitializedException.h exceptions/local/UnexpectedEnumValueException.h exceptions/local/UnmappedValueException.h exceptions/local/ValueRangeExceededException.h exceptions/user/NotImplementedYetException.h rapidxml/rapidxml.hpp rapidxml/rapidxml_print.hpp rapidxml/rapidxml_iterators.hpp rapidxml/rapidxml_utils.hpp rapidxml/wrapper/RapidXmlReader.h rapidxml/wrapper/RapidXmlWriter.h rapidxml/wrapper/DefaultRapidXmlReader.h rapidxml/wrapper/MultiNodeRapidXMLReader.h util/IceBlobToObject.h util/ObjectToIceBlob.h util/FileSystemPathBuilder.h util/FiniteStateMachine.h util/StringHelpers.h util/StringHelperTemplates.h util/algorithm.h util/OnScopeExit.h util/Predicates.h util/Preprocessor.h util/PropagateConst.h util/Registrar.h util/TemplateMetaProgramming.h util/TripleBuffer.h util/IceReportSkipper.h util/Throttler.h util/distributed/AMDCallbackCollection.h util/distributed/RemoteHandle/ClientSideRemoteHandleControlBlock.h util/distributed/RemoteHandle/RemoteHandle.h util/distributed/RemoteHandle/RemoteHandleControlBlock.h util/SimpleStatemachine.h time.h time_minimal.h time/forward_declarations.h time/ice_conversions.h time/json_conversions.h time/CallbackWaitLock.h time/Clock.h time/ClockType.h time/ClockTypeNames.h time/CycleUtil.h time/DateTime.h time/Duration.h time/Frequency.h time/LocalTimeServer.h time/Metronome.h time/ScopedStopWatch.h time/StopWatch.h time/Timer.h time/TimeUtil.h time/TimeKeeper.h csv/CsvWriter.h csv/CsvReader.h eigen/conversions.h eigen/ice_conversions.h ice_conversions.h ice_conversions/ice_conversions_boost_templates.h ice_conversions/ice_conversions_templates.h ice_conversions/ice_conversions_templates.tpp $
Definition: CMakeLists.txt:12
armarx::CompositeDiffIK::CartesianSelectionToSize
int CartesianSelectionToSize(VirtualRobot::IKSolver::CartesianSelection mode)
Definition: CompositeDiffIK.cpp:309
cv
Definition: helper.h:34
armarx::CompositeDiffIK::Parameters::jointRegularizationRotation
float jointRegularizationRotation
Definition: CompositeDiffIK.h:57
armarx::CompositeDiffIK::Parameters
Definition: CompositeDiffIK.h:43
armarx::CompositeDiffIK::Parameters::returnIKSteps
bool returnIKSteps
Definition: CompositeDiffIK.h:55
armarx::navigation::core::Position
Eigen::Vector3f Position
Definition: basic_types.h:36
armarx::CompositeDiffIK::Parameters::maxJointAngleStep
float maxJointAngleStep
Definition: CompositeDiffIK.h:52
min
T min(T t1, T t2)
Definition: gdiam.h:44
armarx::CompositeDiffIK::Result::jointValues
Eigen::VectorXf jointValues
Definition: CompositeDiffIK.h:174
armarx::CompositeDiffIK::NullspaceJointLimitAvoidance::setWeights
void setWeights(const VirtualRobot::RobotNodeSetPtr &rns, float weight)
Definition: CompositeDiffIK.cpp:475
armarx::CompositeDiffIK::addNullspacePositionTarget
NullspaceTargetPtr addNullspacePositionTarget(const VirtualRobot::RobotNodePtr &tcp, const Eigen::Vector3f &target)
Definition: CompositeDiffIK.cpp:67
armarx::CompositeDiffIK::NullspaceTargetStep
Definition: CompositeDiffIK.h:70
armarx::CompositeDiffIK::CompositeDiffIK
CompositeDiffIK(const VirtualRobot::RobotNodeSetPtr &rns)
Definition: CompositeDiffIK.cpp:38
armarx::ctrlutil::s
double s(double t, double s0, double v0, double a0, double j)
Definition: CtrlUtil.h:33
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:27
Exception.h
CompositeDiffIK.h
armarx::CompositeDiffIK::addNullspaceGradient
void addNullspaceGradient(const NullspaceGradientPtr &gradient)
Definition: CompositeDiffIK.cpp:61
armarx::CompositeDiffIK::NullspaceJointTarget::NullspaceJointTarget
NullspaceJointTarget(const VirtualRobot::RobotNodeSetPtr &rns)
Definition: CompositeDiffIK.cpp:376
armarx::CompositeDiffIK::Target::getOriError
auto getOriError() const
Definition: CompositeDiffIK.cpp:524