SimpleGridReachability.cpp
Go to the documentation of this file.
2 
4 
5 namespace armarx
6 {
7  SimpleGridReachability::Result
8  SimpleGridReachability::calculateDiffIK(const Eigen::Matrix4f targetPose,
9  const Parameters& params)
10  {
11  VirtualRobot::RobotNodePtr rns = params.nodeSet;
12  VirtualRobot::RobotNodeSetPtr tcp = params.tcp ? params.tcp : rns->getTCP();
13  CartesianVelocityController velocityController(rns);
14  CartesianPositionController positionController(tcp);
15 
16  Eigen::VectorXf initialJV = rns->getJointValuesEigen();
17  for (size_t i = 0; i <= params.stepsInitial + params.stepsFineTune; i++)
18  {
19  Eigen::Vector3f posDiff = positionController.getPositionDiff(targetPose);
20  Eigen::Vector3f oriDiff = positionController.getOrientationDiff(targetPose);
21 
22  //ARMARX_IMPORTANT << VAROUT(posDiff) << VAROUT(oriDiff);
23 
24  Eigen::VectorXf cartesialVel(6);
25  cartesialVel << posDiff(0), posDiff(1), posDiff(2), oriDiff(0), oriDiff(1), oriDiff(2);
26  Eigen::VectorXf jnv =
27  params.jointLimitAvoidanceKp * velocityController.calculateJointLimitAvoidance();
28  Eigen::VectorXf jv =
29  velocityController.calculate(cartesialVel, jnv, VirtualRobot::IKSolver::All);
30 
31 
32  float stepLength =
33  i < params.stepsInitial ? params.ikStepLengthInitial : params.ikStepLengthFineTune;
34  jv = jv * stepLength;
35 
36  for (size_t n = 0; n < rns->getSize(); n++)
37  {
38  rns->getNode(n)->setJointValue(rns->getNode(n)->getJointValue() + jv(n));
39  }
40  }
41 
42  Result result;
43  result.jointValues = rns->getJointValuesEigen();
44  result.posError = positionController.getPositionDiff(targetPose);
45  result.oriError = positionController.getOrientationError(targetPose);
46  result.reached =
47  result.posError < params.maxPosError && result.oriError < params.maxOriError;
48 
49  return result;
50  }
51 } // namespace armarx
GfxTL::Matrix4f
MatrixXX< 4, 4, float > Matrix4f
Definition: MatrixXX.h:650
armarx::skills::gui::Parameters
aron::data::DictPtr Parameters
Definition: SkillManagerWrapper.h:21
magic_enum::detail::n
constexpr auto n() noexcept
Definition: magic_enum.hpp:418
SimpleGridReachability.h
CartesianVelocityController.h
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:27