NaturalDiffIK.h
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 #pragma once
25 
26 #include <VirtualRobot/IK/IKSolver.h>
27 #include <VirtualRobot/VirtualRobot.h>
28 
29 namespace armarx
30 {
32  {
33  public:
34  enum class Mode
35  {
36  Position,
37  All
38  };
39 
40  struct Parameters
41  {
43  {
44  }
45 
46  // IK params
47  float ikStepLengthInitial = 0.2f;
48  float ikStepLengthFineTune = 0.5f;
49  size_t stepsInitial = 25;
50  size_t stepsFineTune = 10;
51  float maxPosError = 10.f;
52  float maxOriError = 0.05f;
53  float jointLimitAvoidanceKp = 0.f;
54  float elbowKp = 1.0f;
55  float maxJointAngleStep = 0.1f;
56  bool resetRnsValues = true;
57  bool returnIKSteps = false;
58  };
59 
60  struct IKStep
61  {
62  Eigen::VectorXf jointValues;
63  Eigen::Vector3f pdTcp;
64  Eigen::Vector3f odTcp;
65  Eigen::Vector3f pdElb;
68  Eigen::VectorXf cartesianVel;
69  Eigen::VectorXf cartesianVelElb;
70  Eigen::VectorXf jvElb;
71  Eigen::VectorXf jvLA;
72  Eigen::VectorXf jv;
73  Eigen::VectorXf jvClamped;
74  };
75 
76  struct Result
77  {
78  Eigen::VectorXf jointValues;
79  Eigen::Vector3f posDiff;
80  Eigen::Vector3f posDiffElbow;
81  Eigen::Vector3f oriDiff;
82  float posError;
84  float oriError;
85  bool reached;
86  Eigen::VectorXf jointLimitMargins;
88  Eigen::Vector3f elbowPosDiff;
89  std::vector<IKStep> ikSteps;
90  };
91 
92  static Eigen::VectorXf LimitInfNormTo(Eigen::VectorXf vec, float maxValue);
93  static Result CalculateDiffIK(const Eigen::Matrix4f& targetPose,
94  const Eigen::Vector3f& elbowTarget,
95  VirtualRobot::RobotNodeSetPtr rns,
96  VirtualRobot::RobotNodePtr tcp,
97  VirtualRobot::RobotNodePtr elbow,
98  Mode setOri,
99  Parameters params = Parameters());
101  };
102 } // namespace armarx
armarx::NaturalDiffIK::Parameters::stepsInitial
size_t stepsInitial
Definition: NaturalDiffIK.h:49
armarx::NaturalDiffIK::Parameters::maxJointAngleStep
float maxJointAngleStep
Definition: NaturalDiffIK.h:55
armarx::NaturalDiffIK::Mode::All
@ All
armarx::NaturalDiffIK::Mode::Position
@ Position
armarx::NaturalDiffIK::LimitInfNormTo
static Eigen::VectorXf LimitInfNormTo(Eigen::VectorXf vec, float maxValue)
Definition: NaturalDiffIK.cpp:39
GfxTL::Matrix4f
MatrixXX< 4, 4, float > Matrix4f
Definition: MatrixXX.h:650
armarx::NaturalDiffIK::IKStep::elbPose
Eigen::Matrix4f elbPose
Definition: NaturalDiffIK.h:67
armarx::NaturalDiffIK::IKStep::pdTcp
Eigen::Vector3f pdTcp
Definition: NaturalDiffIK.h:63
armarx::NaturalDiffIK::IKStep::tcpPose
Eigen::Matrix4f tcpPose
Definition: NaturalDiffIK.h:66
armarx::NaturalDiffIK::Mode
Mode
Definition: NaturalDiffIK.h:34
armarx::NaturalDiffIK::Result::elbowPosDiff
Eigen::Vector3f elbowPosDiff
Definition: NaturalDiffIK.h:88
armarx::NaturalDiffIK::Result::reached
bool reached
Definition: NaturalDiffIK.h:85
armarx::NaturalDiffIK::IKStep::cartesianVelElb
Eigen::VectorXf cartesianVelElb
Definition: NaturalDiffIK.h:69
armarx::NaturalDiffIK
Definition: NaturalDiffIK.h:31
armarx::skills::gui::Parameters
aron::data::DictPtr Parameters
Definition: SkillManagerWrapper.h:21
armarx::NaturalDiffIK::IKStep::odTcp
Eigen::Vector3f odTcp
Definition: NaturalDiffIK.h:64
armarx::NaturalDiffIK::Result::posDiffElbow
Eigen::Vector3f posDiffElbow
Definition: NaturalDiffIK.h:80
armarx::NaturalDiffIK::Result::oriError
float oriError
Definition: NaturalDiffIK.h:84
armarx::NaturalDiffIK::IKStep::jv
Eigen::VectorXf jv
Definition: NaturalDiffIK.h:72
armarx::NaturalDiffIK::Parameters::maxOriError
float maxOriError
Definition: NaturalDiffIK.h:52
armarx::NaturalDiffIK::Parameters::maxPosError
float maxPosError
Definition: NaturalDiffIK.h:51
armarx::NaturalDiffIK::Result::posError
float posError
Definition: NaturalDiffIK.h:82
armarx::NaturalDiffIK::Result::posErrorElbow
float posErrorElbow
Definition: NaturalDiffIK.h:83
armarx::NaturalDiffIK::Result::oriDiff
Eigen::Vector3f oriDiff
Definition: NaturalDiffIK.h:81
armarx::NJointTaskSpaceDMPControllerMode::CartesianSelection
CartesianSelection
Definition: ControllerInterface.ice:34
armarx::NaturalDiffIK::Result::posDiff
Eigen::Vector3f posDiff
Definition: NaturalDiffIK.h:79
armarx::NaturalDiffIK::Result::jointValues
Eigen::VectorXf jointValues
Definition: NaturalDiffIK.h:78
armarx::NaturalDiffIK::Parameters::resetRnsValues
bool resetRnsValues
Definition: NaturalDiffIK.h:56
armarx::NaturalDiffIK::Parameters::ikStepLengthFineTune
float ikStepLengthFineTune
Definition: NaturalDiffIK.h:48
armarx::NaturalDiffIK::Parameters::stepsFineTune
size_t stepsFineTune
Definition: NaturalDiffIK.h:50
armarx::NaturalDiffIK::IKStep::pdElb
Eigen::Vector3f pdElb
Definition: NaturalDiffIK.h:65
armarx::NaturalDiffIK::Parameters::Parameters
Parameters()
Definition: NaturalDiffIK.h:42
armarx::NaturalDiffIK::ModeToCartesianSelection
static VirtualRobot::IKSolver::CartesianSelection ModeToCartesianSelection(Mode mode)
Definition: NaturalDiffIK.cpp:207
armarx::NaturalDiffIK::IKStep::jvElb
Eigen::VectorXf jvElb
Definition: NaturalDiffIK.h:70
armarx::NaturalDiffIK::IKStep::cartesianVel
Eigen::VectorXf cartesianVel
Definition: NaturalDiffIK.h:68
armarx::NaturalDiffIK::Parameters::jointLimitAvoidanceKp
float jointLimitAvoidanceKp
Definition: NaturalDiffIK.h:53
armarx::NaturalDiffIK::CalculateDiffIK
static Result CalculateDiffIK(const Eigen::Matrix4f &targetPose, const Eigen::Vector3f &elbowTarget, VirtualRobot::RobotNodeSetPtr rns, VirtualRobot::RobotNodePtr tcp, VirtualRobot::RobotNodePtr elbow, Mode setOri, Parameters params=Parameters())
Definition: NaturalDiffIK.cpp:50
armarx::NaturalDiffIK::Parameters
Definition: NaturalDiffIK.h:40
armarx::NaturalDiffIK::Result
Definition: NaturalDiffIK.h:76
armarx::NaturalDiffIK::IKStep::jointValues
Eigen::VectorXf jointValues
Definition: NaturalDiffIK.h:62
armarx::NaturalDiffIK::Parameters::returnIKSteps
bool returnIKSteps
Definition: NaturalDiffIK.h:57
armarx::NaturalDiffIK::IKStep
Definition: NaturalDiffIK.h:60
armarx::NaturalDiffIK::Parameters::ikStepLengthInitial
float ikStepLengthInitial
Definition: NaturalDiffIK.h:47
armarx::NaturalDiffIK::Result::ikSteps
std::vector< IKStep > ikSteps
Definition: NaturalDiffIK.h:89
armarx::NaturalDiffIK::Parameters::elbowKp
float elbowKp
Definition: NaturalDiffIK.h:54
armarx::NaturalDiffIK::IKStep::jvLA
Eigen::VectorXf jvLA
Definition: NaturalDiffIK.h:71
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:27
armarx::NaturalDiffIK::Result::minimumJointLimitMargin
float minimumJointLimitMargin
Definition: NaturalDiffIK.h:87
armarx::NaturalDiffIK::IKStep::jvClamped
Eigen::VectorXf jvClamped
Definition: NaturalDiffIK.h:73
armarx::NaturalDiffIK::Result::jointLimitMargins
Eigen::VectorXf jointLimitMargins
Definition: NaturalDiffIK.h:86