aig 2.0.0
Analytical inverse geomery for MPC in bipeds
Loading...
Searching...
No Matches
leg_ig.hpp
Go to the documentation of this file.
1
9
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
20namespace aig {
21
22typedef Eigen::Matrix<double, 6, 1> LegJoints;
23
28public:
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), knee_from_hip(_knee_from_hip),
45 ankle_from_knee(_ankle_from_knee), ankle_from_foot(_ankle_from_foot) {}
46
47 friend std::ostream &operator<<(std::ostream &out, const LegIGSettings &obj) {
48 out << "LegIGSettings:\n"
49 << " hip_from_waist: " << obj.hip_from_waist.transpose() << "\n"
50 << " knee_from_hip: " << obj.knee_from_hip.transpose() << "\n"
51 << " ankle_from_knee: " << obj.ankle_from_knee.transpose() << "\n"
52 << " ankle_from_foot: " << obj.ankle_from_foot.transpose()
53 << std::endl;
54 return out;
55 }
56
57 friend bool operator==(const LegIGSettings &lhs, const LegIGSettings &rhs) {
58 bool test = true;
59 test &= lhs.hip_from_waist == rhs.hip_from_waist;
60 test &= lhs.knee_from_hip == rhs.knee_from_hip;
61 test &= lhs.ankle_from_knee == rhs.ankle_from_knee;
62 test &= lhs.ankle_from_foot == rhs.ankle_from_foot;
63 return test;
64 }
65};
66
70class LegIG {
71private:
72 LegIGSettings settings_;
73
74 // internals
75 Eigen::Vector3d hip_, ankle_, hip_from_ankle_;
76 double epsilon_, c5_;
77 double q2_, q3_, q4_, q5_, q6_, q7_;
78 double sign_hip_from_ankle_z;
79 double a_, b_, c_;
80 Eigen::Matrix3d Rint_, Rext_, R_;
81 LegJoints output_;
82
83public:
84 LegIG();
85 LegIG(const LegIGSettings &settings);
86 void reset_internals();
87 const LegIGSettings &get_settings() { return settings_; }
88 void initialize(const LegIGSettings &settings);
89 LegJoints solve(const pinocchio::SE3 &base,
90 const pinocchio::SE3 &endEffector);
91};
92} // namespace aig
93
94#endif // AIG_LEG_IG
LegJoints solve(const pinocchio::SE3 &base, const pinocchio::SE3 &endEffector)
Definition leg_ig.cpp:34
const LegIGSettings & get_settings()
Definition leg_ig.hpp:87
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
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:57
Eigen::Vector3d hip_from_waist
Definition leg_ig.hpp:29
LegIGSettings()
Definition leg_ig.hpp:34
friend std::ostream & operator<<(std::ostream &out, const LegIGSettings &obj)
Definition leg_ig.hpp:47