IK.h
Go to the documentation of this file.
1 /*
2  * Copyright 2012-2019 CNRS-UM LIRMM, CNRS-AIST JRL
3  */
4 
5 #pragma once
6 
7 // includes
8 // std
9 #include <vector>
10 
11 // SpaceVecAlg
12 #include <SpaceVecAlg/SpaceVecAlg>
13 
14 #include "Jacobian.h"
15 
16 namespace rbd
17 {
18 class MultiBody;
19 struct MultiBodyConfig;
20 
21 namespace ik
22 {
23 
24 static constexpr int MAX_ITERATIONS = 50;
25 static constexpr double LAMBDA = 0.9;
26 static constexpr double THRESHOLD = 1e-8;
27 static constexpr double ALMOST_ZERO = 1e-8;
28 
29 } // namespace ik
30 
34 class RBDYN_DLLAPI InverseKinematics
35 {
36 public:
38  InverseKinematics(const MultiBody & mb, int ef_index);
49  bool inverseKinematics(const MultiBody & mb, MultiBodyConfig & mbc, const sva::PTransformd & ef_target);
50 
54  bool sInverseKinematics(const MultiBody & mb, MultiBodyConfig & mbc, const sva::PTransformd & ef_target);
60  // @brief Maximum number of iterations
62  // @brief Learning rate
63  double lambda_;
64  // @brief Stopping criterion
65  double threshold_;
66  // @brief Rounding threshold for the Jacobian
67  double almost_zero_;
68 
69 private:
70  // @brief ef_index is the End Effector index used to build jacobian
71  int ef_index_;
72  Jacobian jac_;
73  Eigen::JacobiSVD<Eigen::MatrixXd> svd_;
74 };
75 
76 } // namespace rbd
Jacobian.h
rbd::InverseKinematics
Definition: IK.h:34
rbd::Jacobian
Definition: Jacobian.h:38
rbd::MultiBody
Definition: MultiBody.h:29
rbd::InverseKinematics::almost_zero_
double almost_zero_
Definition: IK.h:67
rbd::InverseKinematics::max_iterations_
int max_iterations_
Find q that minimizes the distance between ef and ef_target.
Definition: IK.h:61
rbd
Definition: common.h:20
rbd::MultiBodyConfig
Definition: MultiBodyConfig.h:23
rbd::InverseKinematics::lambda_
double lambda_
Definition: IK.h:63
rbd::InverseKinematics::threshold_
double threshold_
Definition: IK.h:65