leg_ig.hpp
Go to the documentation of this file.
1 
10 #ifndef AIG_LEG_IG
11 #define AIG_LEG_IG
12 
13 // clang-format off
14 #include <Eigen/Dense>
15 
16 #include "pinocchio/fwd.hpp"
17 #include "pinocchio/spatial/se3.hpp"
18 // clang-format on
19 
20 namespace aig {
21 
22 typedef Eigen::Matrix<double, 6, 1> LegJoints;
23 
27 struct LegIGSettings {
28  public:
29  Eigen::Vector3d hip_from_waist;
30  Eigen::Vector3d knee_from_hip;
31  Eigen::Vector3d ankle_from_knee;
32  Eigen::Vector3d ankle_from_foot;
33 
35  : hip_from_waist(Eigen::Vector3d::Zero()),
36  knee_from_hip(Eigen::Vector3d::Zero()),
37  ankle_from_knee(Eigen::Vector3d::Zero()),
38  ankle_from_foot(Eigen::Vector3d::Zero()) {}
39 
40  LegIGSettings(const Eigen::Vector3d &_hip_from_waist,
41  const Eigen::Vector3d &_knee_from_hip,
42  const Eigen::Vector3d &_ankle_from_knee,
43  const Eigen::Vector3d &_ankle_from_foot)
44  : hip_from_waist(_hip_from_waist),
45  knee_from_hip(_knee_from_hip),
46  ankle_from_knee(_ankle_from_knee),
47  ankle_from_foot(_ankle_from_foot) {}
48 
49  friend std::ostream &operator<<(std::ostream &out, const LegIGSettings &obj) {
50  out << "LegIGSettings:\n"
51  << " hip_from_waist: " << obj.hip_from_waist.transpose() << "\n"
52  << " knee_from_hip: " << obj.knee_from_hip.transpose() << "\n"
53  << " ankle_from_knee: " << obj.ankle_from_knee.transpose() << "\n"
54  << " ankle_from_foot: " << obj.ankle_from_foot.transpose()
55  << std::endl;
56  return out;
57  }
58 
59  friend bool operator==(const LegIGSettings &lhs, const LegIGSettings &rhs) {
60  bool test = true;
61  test &= lhs.hip_from_waist == rhs.hip_from_waist;
62  test &= lhs.knee_from_hip == rhs.knee_from_hip;
63  test &= lhs.ankle_from_knee == rhs.ankle_from_knee;
64  test &= lhs.ankle_from_foot == rhs.ankle_from_foot;
65  return test;
66  }
67 };
68 
72 class LegIG {
73  private:
74  LegIGSettings settings_;
75 
76  // internals
77  Eigen::Vector3d hip_, ankle_, hip_from_ankle_;
78  double epsilon_, c5_;
79  double q2_, q3_, q4_, q5_, q6_, q7_;
80  double sign_hip_from_ankle_z;
81  double a_, b_, c_;
82  Eigen::Matrix3d Rint_, Rext_, R_;
83  LegJoints output_;
84 
85  public:
86  LegIG();
87  LegIG(const LegIGSettings &settings);
88  void reset_internals();
89  const LegIGSettings &get_settings() { return settings_; }
90  void initialize(const LegIGSettings &settings);
91  LegJoints solve(const pinocchio::SE3 &base,
92  const pinocchio::SE3 &endEffector);
93 };
94 } // namespace aig
95 
96 #endif // AIG_LEG_IG
Definition: leg_ig.hpp:72
const LegIGSettings & get_settings()
Definition: leg_ig.hpp:89
LegJoints solve(const pinocchio::SE3 &base, const pinocchio::SE3 &endEffector)
Definition: leg_ig.cpp:34
void reset_internals()
Definition: leg_ig.cpp:22
LegIG()
Definition: leg_ig.cpp:13
void initialize(const LegIGSettings &settings)
Definition: leg_ig.cpp:17
Definition: arm_ig.hpp:18
Eigen::Matrix< double, 6, 1 > LegJoints
Definition: leg_ig.hpp:22
Definition: leg_ig.hpp:27
Eigen::Vector3d ankle_from_foot
Definition: leg_ig.hpp:32
LegIGSettings(const Eigen::Vector3d &_hip_from_waist, const Eigen::Vector3d &_knee_from_hip, const Eigen::Vector3d &_ankle_from_knee, const Eigen::Vector3d &_ankle_from_foot)
Definition: leg_ig.hpp:40
friend std::ostream & operator<<(std::ostream &out, const LegIGSettings &obj)
Definition: leg_ig.hpp:49
Eigen::Vector3d knee_from_hip
Definition: leg_ig.hpp:30
Eigen::Vector3d ankle_from_knee
Definition: leg_ig.hpp:31
friend bool operator==(const LegIGSettings &lhs, const LegIGSettings &rhs)
Definition: leg_ig.hpp:59
Eigen::Vector3d hip_from_waist
Definition: leg_ig.hpp:29
LegIGSettings()
Definition: leg_ig.hpp:34