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 #include <VirtualRobot/Robot.h>
27 #include <VirtualRobot/math/Helpers.h>
28 #include <VirtualRobot/RobotNodeSet.h>
29 #include <VirtualRobot/Nodes/RobotNode.h>
30 #include <cfloat>
31 
32 using namespace armarx;
33 
34 CompositeDiffIK::CompositeDiffIK(const VirtualRobot::RobotNodeSetPtr& rns)
35  : rns(rns)
36 {
37  ik.reset(new VirtualRobot::DifferentialIK(rns, rns->getRobot()->getRootNode(), VirtualRobot::JacobiProvider::eSVDDamped));
38 }
39 
41 {
42  targets.emplace_back(target);
43 }
44 
46 {
47  TargetPtr t = std::make_shared<Target>(rns, tcp, target, mode);
48  addTarget(t);
49  return t;
50 }
51 
53 {
54  nullspaceGradients.emplace_back(gradient);
55 }
56 
57 CompositeDiffIK::NullspaceTargetPtr CompositeDiffIK::addNullspacePositionTarget(const VirtualRobot::RobotNodePtr& tcp, const Eigen::Vector3f& target)
58 {
60  math::Helpers::CreatePose(target, Eigen::Matrix3f::Identity()),
63  return nst;
64 }
65 
66 
68 {
69  //ARMARX_IMPORTANT << "###";
70  //ARMARX_IMPORTANT << VAROUT(rns->getJointValuesEigen().transpose());
71  if (params.resetRnsValues)
72  {
73  for (VirtualRobot::RobotNodePtr rn : rns->getAllRobotNodes())
74  {
75  if (rn->isLimitless())
76  {
77  rn->setJointValue(0);
78  }
79  else
80  {
81  rn->setJointValue((rn->getJointLimitHi() + rn->getJointLimitLo()) / 2);
82  }
83  }
84  }
85  //ARMARX_IMPORTANT << VAROUT(rns->getJointValuesEigen().transpose());
86 
87  SolveState s;
88 
89  s.rows = 0;
90  s.cols = rns->getSize();
91 
92  for (const TargetPtr& target : targets)
93  {
94  s.rows += CartesianSelectionToSize(target->mode);
95  }
96 
97  s.jointRegularization = Eigen::VectorXf::Zero(s.cols);
98  for (size_t i = 0; i < rns->getSize(); i++)
99  {
100  s.jointRegularization(i) = rns->getNode(i)->isTranslationalJoint() ? params.jointRegularizationTranslation : params.jointRegularizationRotation;
101  }
102 
103  s.cartesianRegularization = Eigen::VectorXf::Zero(s.rows);
104  {
105  CartesianVelocityController tmpVC(rns);
106  int row = 0;
107  for (const TargetPtr& target : targets)
108  {
109  int h = CartesianSelectionToSize(target->mode);
110  target->jacobi = Eigen::MatrixXf::Zero(h, s.cols);
111  s.cartesianRegularization.block(row, 0, h, 1) = tmpVC.calculateRegularization(target->mode);
112  row += h;
113  }
114  }
115  //ARMARX_IMPORTANT << "START";
116  //ARMARX_INFO << VAROUT(regularization.transpose());
117 
118  s.jointValues = rns->getJointValuesEigen();
119 
120  for (size_t i = 0; i <= params.steps; i++)
121  {
122  step(params, s, i);
123  }
124 
125  bool allReached = true;
126  for (const TargetPtr& target : targets)
127  {
128  allReached = allReached && target->pCtrl.reached(target->target, target->mode, target->maxPosError, target->maxOriError);
129  }
130 
131  //ARMARX_IMPORTANT << "END";
132 
133 
134  //ARMARX_IMPORTANT << ss.str();
135 
136  Result result;
137  result.jointValues = rns->getJointValuesEigen();
138  result.reached = allReached;
139  result.jointLimitMargins = Eigen::VectorXf::Zero(rns->getSize());
140  result.minimumJointLimitMargin = FLT_MAX;
141  for (size_t i = 0; i < rns->getSize(); i++)
142  {
143  VirtualRobot::RobotNodePtr rn = rns->getNode(i);
144  if (rn->isLimitless())
145  {
146  result.jointLimitMargins(i) = M_PI;
147  }
148  else
149  {
150  result.jointLimitMargins(i) = std::min(rn->getJointValue() - rn->getJointLimitLo(), rn->getJointLimitHi() - rn->getJointValue());
152  }
153  }
154 
155  return result;
156 }
157 
159 {
160  Eigen::FullPivLU<Eigen::MatrixXf> lu_decomp(jacobi);
161  Eigen::MatrixXf nullspaceLU = lu_decomp.kernel();
162  return nullspaceLU;
163 }
164 
166 {
167  // cols >= rows
168  int rows = jacobi.rows();
169  int cols = jacobi.cols();
170  Eigen::JacobiSVD<Eigen::MatrixXf> svd(jacobi, Eigen::ComputeFullU | Eigen::ComputeFullV);
171  ///
172  /// \brief V contains right singular vector and nullspace:
173  /// V.shape: (cols,cols)
174  /// singular vectors: V[:,0:rows]
175  /// nullspace: V[:,rows:cols-rows]
176  ///
177  Eigen::MatrixXf V = svd.matrixV();
178  Eigen::MatrixXf nullspaceSVD = V.block(0, rows, cols, cols - rows);
179  return nullspaceSVD;
180 }
181 
183 {
184  //ARMARX_IMPORTANT << VAROUT(i);
185  s.jacobi = Eigen::MatrixXf::Zero(s.rows, s.cols);
186  s.invJac = Eigen::MatrixXf::Zero(s.cols, s.rows);
187 
188  Eigen::VectorXf cartesianVel = Eigen::VectorXf::Zero(s.rows);
189  {
190  int row = 0;
191  for (const TargetPtr& target : targets)
192  {
193  ik->updateJacobianMatrix(target->jacobi, target->tcp, target->mode);
194  int h = CartesianSelectionToSize(target->mode);
195  s.jacobi.block(row, 0, h, s.cols) = target->jacobi;
196  Eigen::VectorXf cv = target->pCtrl.calculate(target->target, target->mode);
197  //ARMARX_INFO << VAROUT(cv.transpose());
198  cartesianVel.block(row, 0, h, 1) = cv;
199  row += h;
200  if (params.returnIKSteps)
201  {
203  step.tcpPose = target->tcp->getPoseInRootFrame();
204  step.cartesianVel = cv;
205  step.posDiff = target->pCtrl.getPositionDiff(target->target);
206  step.oriDiff = target->pCtrl.getOrientationDiff(target->target);
207  target->ikSteps.emplace_back(step);
208  }
209  }
210  }
211  //ARMARX_INFO << VAROUT(cartesianVel.transpose());
212  if (stepNr == 0)
213  {
214  //ARMARX_IMPORTANT << VAROUT(s.jacobi);
215  }
216 
217  for (int row = 0; row < s.rows; row++)
218  {
219  s.jacobi.block(row, 0, 1, s.cols) = s.jacobi.block(row, 0, 1, s.cols).cwiseProduct(s.jointRegularization.transpose());
220  }
221  if (stepNr == 0)
222  {
223  //ARMARX_IMPORTANT << VAROUT(s.jacobi);
224  }
225 
226  ik->updatePseudoInverseJacobianMatrix(s.invJac, s.jacobi, 0, s.cartesianRegularization);
227 
228  Eigen::VectorXf nullspaceVel = Eigen::VectorXf::Zero(s.cols);
229 
230  for (const NullspaceGradientPtr& nsGradient : nullspaceGradients)
231  {
232  Eigen::VectorXf nsgrad = nsGradient->kP * nsGradient->getGradient(params);
233  //ARMARX_INFO << VAROUT(nsgrad.transpose());
234  nullspaceVel += nsgrad;
235  if (stepNr == 0)
236  {
237  //ARMARX_IMPORTANT << VAROUT(nsgrad.transpose());
238  }
239  }
240  //LimitInfNormTo(nullspaceVel, params.maxJointAngleStep);
241 
242 
243 
244  Eigen::JacobiSVD<Eigen::MatrixXf> svd(s.jacobi, Eigen::ComputeFullU | Eigen::ComputeFullV);
245  Eigen::MatrixXf V = svd.matrixV();
246  Eigen::MatrixXf nullspaceSVD = V.block(0, s.rows, s.cols, s.cols - s.rows);
247 
248  s.nullspace = nullspaceSVD; // CalculateNullspaceSVD(s.jacobi);
249 
250  Eigen::VectorXf nsv = Eigen::VectorXf::Zero(s.cols);
251  for (int i = 0; i < s.nullspace.cols(); i++)
252  {
253  float squaredNorm = s.nullspace.col(i).squaredNorm();
254  // Prevent division by zero
255  if (squaredNorm > 1.0e-32f)
256  {
257  nsv += s.nullspace.col(i) * s.nullspace.col(i).dot(nullspaceVel) / s.nullspace.col(i).squaredNorm();
258  }
259  }
260 
261  Eigen::VectorXf jv = s.invJac * cartesianVel;
262  //ARMARX_INFO << VAROUT(jv.transpose());
263  //ARMARX_INFO << VAROUT(nsv.transpose());
264  jv = jv + nsv;
265  jv = jv * params.stepSize;
266  jv = LimitInfNormTo(jv, params.maxJointAngleStep);
267  jv = jv.cwiseProduct(s.jointRegularization);
268 
269  //ARMARX_INFO << VAROUT(jv.transpose());
270 
271  Eigen::VectorXf newJointValues = s.jointValues + jv;
272  if (stepNr == 0)
273  {
274  //ARMARX_IMPORTANT << VAROUT(cartesianVel.transpose());
275  //ARMARX_IMPORTANT << VAROUT(nullspaceVel.transpose());
276 
277  //ARMARX_IMPORTANT << VAROUT(currentJointValues.transpose());
278  //ARMARX_IMPORTANT << VAROUT(newJointValues.transpose());
279  }
280  rns->setJointValues(newJointValues);
281  s.jointValues = newJointValues;
282 }
283 
285 {
286  switch (mode)
287  {
289  return 3;
291  return 3;
292  case VirtualRobot::IKSolver::CartesianSelection::All:
293  return 6;
294  default:
295  throw LocalException("mode not supported: ") << mode;
296  }
297 }
298 
299 
300 CompositeDiffIK::Target::Target(const VirtualRobot::RobotNodeSetPtr& rns, const VirtualRobot::RobotNodePtr& tcp, const Eigen::Matrix4f& target, VirtualRobot::IKSolver::CartesianSelection mode)
301  : tcp(tcp), target(target), mode(mode), pCtrl(tcp)
302 {
303  jacobi = Eigen::MatrixXf::Zero(0, 0);
304 }
305 
306 CompositeDiffIK::NullspaceTarget::NullspaceTarget(const VirtualRobot::RobotNodeSetPtr& rns, const VirtualRobot::RobotNodePtr& tcp, const Eigen::Matrix4f& target, VirtualRobot::IKSolver::CartesianSelection mode)
307  : tcp(tcp), target(target), mode(mode), pCtrl(tcp), vCtrl(rns, tcp)
308 {
309 
310 }
311 
313 {
314  ikSteps.clear();
315 }
316 
318 {
319  Eigen::VectorXf cv = pCtrl.calculate(target, mode);
320  Eigen::VectorXf jv = vCtrl.calculate(cv, mode);
321  if (params.returnIKSteps)
322  {
324  step.tcpPose = tcp->getPoseInRootFrame();
325  step.posDiff = pCtrl.getPositionDiff(target);
326  step.oriDiff = pCtrl.getOrientationDiff(target);
327  step.cartesianVel = cv;
328  step.jointVel = jv;
329  ikSteps.emplace_back(step);
330  }
331  return jv;
332 }
333 
334 Eigen::VectorXf CompositeDiffIK::LimitInfNormTo(Eigen::VectorXf vec, float maxValue)
335 {
336  float infNorm = vec.lpNorm<Eigen::Infinity>();
337  if (infNorm > maxValue)
338  {
339  vec = vec / infNorm * maxValue;
340  }
341  return vec;
342 }
343 
344 CompositeDiffIK::NullspaceJointTarget::NullspaceJointTarget(const VirtualRobot::RobotNodeSetPtr& rns)
345  : rns(rns), target(rns->getJointValuesEigen()), weight(Eigen::VectorXf::Zero(rns->getSize()))
346 {
347 
348 }
349 
350 CompositeDiffIK::NullspaceJointTarget::NullspaceJointTarget(const VirtualRobot::RobotNodeSetPtr& rns, const Eigen::VectorXf& target, const Eigen::VectorXf& weight)
351  : rns(rns), target(target), weight(weight)
352 {
353 
354 }
355 
357 {
358  this->target(index) = target;
359  this->weight(index) = weight;
360 }
361 
362 void CompositeDiffIK::NullspaceJointTarget::set(const std::string& jointName, float target, float weight)
363 {
364  int index = rns->getRobotNodeIndex(jointName);
365  if (index < 0)
366  {
367  throw LocalException("RobotNodeSet has no joint ") << jointName;
368  }
369  set(index, target, weight);
370 }
371 
372 void CompositeDiffIK::NullspaceJointTarget::set(const VirtualRobot::RobotNodePtr& rn, float target, float weight)
373 {
374  int index = rns->getRobotNodeIndex(rn);
375  if (index < 0)
376  {
377  throw LocalException("RobotNodeSet has no joint ") << rn->getName();
378  }
379  set(index, target, weight);
380 }
381 
383 {
384 
385 }
386 
388 {
389  return (target - rns->getJointValuesEigen()).cwiseProduct(weight);
390 }
391 
393  : rns(rns), weight(Eigen::VectorXf::Constant(rns->getSize(), 1))
394 {
395 
396 }
397 
398 CompositeDiffIK::NullspaceJointLimitAvoidance::NullspaceJointLimitAvoidance(const VirtualRobot::RobotNodeSetPtr& rns, const Eigen::VectorXf& weight)
399  : rns(rns), weight(weight)
400 {
401 
402 }
403 
405 {
406  this->weight(index) = weight;
407 }
408 
409 void CompositeDiffIK::NullspaceJointLimitAvoidance::setWeight(const std::string& jointName, float weight)
410 {
411  int index = rns->getRobotNodeIndex(jointName);
412  if (index < 0)
413  {
414  throw LocalException("RobotNodeSet has no joint ") << jointName;
415  }
416  setWeight(index, weight);
417 }
418 
419 void CompositeDiffIK::NullspaceJointLimitAvoidance::setWeight(const VirtualRobot::RobotNodePtr& rn, float weight)
420 {
421  int index = rns->getRobotNodeIndex(rn);
422  if (index < 0)
423  {
424  throw LocalException("RobotNodeSet has no joint ") << rn->getName();
425  }
426  setWeight(index, weight);
427 }
428 
429 void CompositeDiffIK::NullspaceJointLimitAvoidance::setWeights(const VirtualRobot::RobotNodeSetPtr& rns, float weight)
430 {
431  for (const VirtualRobot::RobotNodePtr& rn : rns->getAllRobotNodes())
432  {
433  setWeight(rn, weight);
434  }
435 }
436 
438 {
439 
440 }
441 
443 {
444  Eigen::VectorXf r(rns->getSize());
445  for (size_t i = 0; i < rns->getSize(); i++)
446  {
447  VirtualRobot::RobotNodePtr rn = rns->getNode(i);
448  if (rn->isLimitless())
449  {
450  r(i) = 0;
451  }
452  else
453  {
454  float f = math::Helpers::ILerp(rn->getJointLimitLo(), rn->getJointLimitHi(), rn->getJointValue());
455  r(i) = cos(f * M_PI);
456  //r(i) = math::MathUtils::Lerp(1.f, -1.f, f);
457  }
458  }
459  return r.cwiseProduct(weight);
460 }
armarx::CompositeDiffIK::TargetStep
Definition: CompositeDiffIK.h:131
armarx::CompositeDiffIK::Target::Target
Target(const VirtualRobot::RobotNodeSetPtr &rns, const VirtualRobot::RobotNodePtr &tcp, const Eigen::Matrix4f &target, VirtualRobot::IKSolver::CartesianSelection mode)
Definition: CompositeDiffIK.cpp:300
Eigen
Definition: Elements.h:36
GfxTL::Orientation
ScalarT Orientation(const VectorXD< 2, ScalarT > &p1, const VectorXD< 2, ScalarT > &p2, const VectorXD< 2, ScalarT > &c)
Definition: Orientation.h:9
armarx::CompositeDiffIK::Parameters::resetRnsValues
bool resetRnsValues
Definition: CompositeDiffIK.h:52
index
uint8_t index
Definition: EtherCATFrame.h:59
armarx::CompositeDiffIK::Result::reached
bool reached
Definition: CompositeDiffIK.h:180
armarx::CompositeDiffIK::NullspaceJointLimitAvoidance::init
void init(Parameters &) override
Definition: CompositeDiffIK.cpp:437
armarx::CompositeDiffIK::Parameters::jointRegularizationTranslation
float jointRegularizationTranslation
Definition: CompositeDiffIK.h:54
armarx::CompositeDiffIK::NullspaceJointLimitAvoidance::getGradient
Eigen::VectorXf getGradient(Parameters &params) override
Definition: CompositeDiffIK.cpp:442
boost::target
Vertex target(const detail::edge_base< Directed, Vertex > &e, const PCG &)
Definition: point_cloud_graph.h:688
armarx::CartesianVelocityController::calculateRegularization
Eigen::VectorXf calculateRegularization(VirtualRobot::IKSolver::CartesianSelection mode)
Definition: CartesianVelocityController.cpp:219
armarx::CompositeDiffIK::NullspaceJointLimitAvoidance::setWeight
void setWeight(int index, float weight)
Definition: CompositeDiffIK.cpp:404
armarx::CompositeDiffIK::Parameters::stepSize
float stepSize
Definition: CompositeDiffIK.h:51
armarx::CompositeDiffIK::NullspaceJointTarget::getGradient
Eigen::VectorXf getGradient(Parameters &params) override
Definition: CompositeDiffIK.cpp:387
armarx::CompositeDiffIK::NullspaceJointTarget::set
void set(int index, float target, float weight)
Definition: CompositeDiffIK.cpp:356
armarx::CartesianVelocityController
Definition: CartesianVelocityController.h:36
armarx::CompositeDiffIK::SolveState
Definition: CompositeDiffIK.h:186
armarx::CompositeDiffIK::NullspaceTarget::NullspaceTarget
NullspaceTarget(const VirtualRobot::RobotNodeSetPtr &rns, const VirtualRobot::RobotNodePtr &tcp, const Eigen::Matrix4f &target, VirtualRobot::IKSolver::CartesianSelection mode)
Definition: CompositeDiffIK.cpp:306
armarx::CompositeDiffIK::Parameters::steps
size_t steps
Definition: CompositeDiffIK.h:48
armarx::CompositeDiffIK::solve
Result solve(Parameters params)
Definition: CompositeDiffIK.cpp:67
armarx::CompositeDiffIK::NullspaceTargetPtr
std::shared_ptr< class NullspaceTarget > NullspaceTargetPtr
Definition: CompositeDiffIK.h:92
armarx::CompositeDiffIK::addTarget
void addTarget(const TargetPtr &target)
Definition: CompositeDiffIK.cpp:40
armarx::CompositeDiffIK::NullspaceJointTarget::init
void init(Parameters &) override
Definition: CompositeDiffIK.cpp:382
GfxTL::Identity
void Identity(MatrixXX< N, N, T > *a)
Definition: MatrixXX.h:523
M_PI
#define M_PI
Definition: MathTools.h:17
armarx::CompositeDiffIK::Target::jacobi
Eigen::MatrixXf jacobi
Definition: CompositeDiffIK.h:146
armarx::NJointTaskSpaceDMPControllerMode::CartesianSelection
CartesianSelection
Definition: ControllerInterface.ice:34
armarx::CompositeDiffIK::step
void step(Parameters &params, SolveState &s, int stepNr)
Definition: CompositeDiffIK.cpp:182
armarx::CompositeDiffIK::TargetPtr
std::shared_ptr< Target > TargetPtr
Definition: CompositeDiffIK.h:166
armarx::CompositeDiffIK::CalculateNullspaceLU
static Eigen::MatrixXf CalculateNullspaceLU(const Eigen::Matrix4f &jacobi)
Definition: CompositeDiffIK.cpp:165
armarx::CompositeDiffIK::NullspaceTarget
Definition: CompositeDiffIK.h:76
armarx::CompositeDiffIK::NullspaceJointLimitAvoidance::NullspaceJointLimitAvoidance
NullspaceJointLimitAvoidance(const VirtualRobot::RobotNodeSetPtr &rns)
Definition: CompositeDiffIK.cpp:392
armarx::CompositeDiffIK::Result::jointLimitMargins
Eigen::VectorXf jointLimitMargins
Definition: CompositeDiffIK.h:181
armarx::CompositeDiffIK::LimitInfNormTo
static Eigen::VectorXf LimitInfNormTo(Eigen::VectorXf vec, float maxValue)
Definition: CompositeDiffIK.cpp:334
armarx::CompositeDiffIK::NullspaceGradientPtr
std::shared_ptr< class NullspaceGradient > NullspaceGradientPtr
Definition: CompositeDiffIK.h:66
armarx::CompositeDiffIK::Result::minimumJointLimitMargin
float minimumJointLimitMargin
Definition: CompositeDiffIK.h:182
armarx::CompositeDiffIK::CalculateNullspaceSVD
static Eigen::MatrixXf CalculateNullspaceSVD(const Eigen::Matrix4f &jacobi)
Definition: CompositeDiffIK.cpp:158
armarx::CompositeDiffIK::NullspaceTarget::getGradient
Eigen::VectorXf getGradient(Parameters &params) override
Definition: CompositeDiffIK.cpp:317
armarx::CompositeDiffIK::NullspaceTarget::init
void init(Parameters &) override
Definition: CompositeDiffIK.cpp:312
GfxTL::Matrix4f
MatrixXX< 4, 4, float > Matrix4f
Definition: MatrixXX.h:601
armarx::CompositeDiffIK::Result
Definition: CompositeDiffIK.h:171
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:284
cv
Definition: helper.h:35
armarx::CompositeDiffIK::Parameters::jointRegularizationRotation
float jointRegularizationRotation
Definition: CompositeDiffIK.h:55
armarx::CompositeDiffIK::Parameters
Definition: CompositeDiffIK.h:44
armarx::CompositeDiffIK::Parameters::returnIKSteps
bool returnIKSteps
Definition: CompositeDiffIK.h:53
armarx::navigation::core::Position
Eigen::Vector3f Position
Definition: basic_types.h:36
armarx::CompositeDiffIK::Parameters::maxJointAngleStep
float maxJointAngleStep
Definition: CompositeDiffIK.h:50
min
T min(T t1, T t2)
Definition: gdiam.h:42
armarx::CompositeDiffIK::Result::jointValues
Eigen::VectorXf jointValues
Definition: CompositeDiffIK.h:173
armarx::CompositeDiffIK::NullspaceJointLimitAvoidance::setWeights
void setWeights(const VirtualRobot::RobotNodeSetPtr &rns, float weight)
Definition: CompositeDiffIK.cpp:429
armarx::CompositeDiffIK::addNullspacePositionTarget
NullspaceTargetPtr addNullspacePositionTarget(const VirtualRobot::RobotNodePtr &tcp, const Eigen::Vector3f &target)
Definition: CompositeDiffIK.cpp:57
armarx::CompositeDiffIK::NullspaceTargetStep
Definition: CompositeDiffIK.h:68
armarx::CompositeDiffIK::CompositeDiffIK
CompositeDiffIK(const VirtualRobot::RobotNodeSetPtr &rns)
Definition: CompositeDiffIK.cpp:34
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:28
Exception.h
CompositeDiffIK.h
armarx::CompositeDiffIK::addNullspaceGradient
void addNullspaceGradient(const NullspaceGradientPtr &gradient)
Definition: CompositeDiffIK.cpp:52
armarx::CompositeDiffIK::NullspaceJointTarget::NullspaceJointTarget
NullspaceJointTarget(const VirtualRobot::RobotNodeSetPtr &rns)
Definition: CompositeDiffIK.cpp:344