10#ifndef BIPED_STABILIZER_COP_STABILIZER 11#define BIPED_STABILIZER_COP_STABILIZER 26typedef std::vector<eMatrixHom, Eigen::aligned_allocator<eMatrixHom>>
28typedef std::vector<eVector2, Eigen::aligned_allocator<eVector2>>
eVector2s;
29typedef std::vector<eVector3, Eigen::aligned_allocator<eVector3>>
eVector3s;
33 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
53 test &= this->height == rhs.
height;
57 test &= this->dt == rhs.
dt;
62 test &= this->g == rhs.
g;
71 std::ostringstream oss;
72 oss <<
"CopStabilizerSettings:" << std::endl;
73 oss <<
" - height = " << this->height << std::endl;
74 oss <<
" - foot_length = " << this->foot_length << std::endl;
75 oss <<
" - foot_width = " << this->foot_width << std::endl;
76 oss <<
" - robot_mass = " << this->robot_mass << std::endl;
77 oss <<
" - dt = " << this->dt << std::endl;
78 oss <<
" - cop_x_gains = " << this->cop_x_gains.transpose() << std::endl;
79 oss <<
" - cop_y_gains = " << this->cop_y_gains.transpose() << std::endl;
80 oss <<
" - cop_p_cc_gain = " << this->cop_p_cc_gain << std::endl;
81 oss <<
" - integral_gain = " << this->integral_gain.transpose()
83 oss <<
" - g = " << this->g << std::endl;
84 oss <<
" - cop_control_type = " << this->cop_control_type << std::endl;
85 oss <<
" - saturate_cop = " << this->saturate_cop << std::endl;
86 oss <<
" - use_rate_limited_dcm = " << this->use_rate_limited_dcm
99 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
116 [[deprecated(
"The usage of the eVector3 for the CoP is deprecated, use " 117 "the eVector2 version instead.")]]
131 [[deprecated(
"The usage of the eVector3 for the CoP is deprecated, use " 132 "the eVector2 version instead.")]]
146 [[deprecated(
"The usage of the eVector3 for the CoP is deprecated, use " 147 "the eVector2 version instead.")]]
160 [[deprecated(
"The usage of the eVector3 for the CoP is deprecated, use " 161 "the eVector2 version instead.")]]
174 [[deprecated(
"The usage of the eVector3 for the CoP is deprecated, use " 175 "the eVector2 version instead.")]]
188 [[deprecated(
"The usage of the eVector3 for the CoP is deprecated, use " 189 "the eVector2 version instead.")]]
203 [[deprecated(
"The usage of the eVector3 for the CoP is deprecated, use " 204 "the eVector2 version instead.")]]
206 const double LF_force_z,
const eVector2 LF_torque_xy,
207 const eVector2 RF_xy,
const double RF_force_z,
286 const double LF_force_z,
const eVector2 LF_torque_xy,
287 const eVector2 RF_xy,
const double RF_force_z,
290 std::array<eVector3, 3>
getStableCoMs(
const double &com_height);
299 void computeSupportPolygon(
const eMatrixHoms &stance_poses,
302 void projectCOPinSupportPolygon(
const eVector2 &target_cop_unclamped,
316 Eigen::Vector3d getActualCOM_acc(
const Eigen::Vector3d &externalForce);
327 template <
typename T,
typename vec_T>
328 T movingAverage(
const T x,
const unsigned long nb_samples, vec_T &queue);
330 void getNonLinearPart(
const eVector6 &leftFootWrench,
332 const Eigen::Vector2d &leftFootPlace,
333 const Eigen::Vector2d &rightFootPlace,
334 const Eigen::Vector2d &CoM,
335 const Eigen::Vector2d &lateral_gravity,
336 const Eigen::Vector2d &externalForce,
eVector3 &n);
338 void getNonLinearPart(
const eVector6 &leftFootWrench,
340 const Eigen::Vector2d &leftFootPlace,
341 const Eigen::Vector2d &rightFootPlace,
342 const Eigen::Vector2d &CoM,
343 const Eigen::Vector2d &CoM_acc,
eVector3 &n);
345 void getNonLinearPart(
const eVector6 &leftFootWrench,
347 const Eigen::Vector2d &leftFootPlace_c,
348 const Eigen::Vector2d &rightFootPlace_c,
349 const Eigen::Vector2d &CoM_acc,
eVector3 &n);
356 double estimateCopDisturbance(
const eVector2 ¤tTrackingError,
360 double estimateJerkDisturbance(
const eVector3 ¤tTrackingError,
364 bool configured_, first_iter_;
367 Eigen::Matrix2d A22_;
372 Eigen::Matrix2d RotPi_2_;
377 Eigen::Matrix3d S_coms_j_;
378 Eigen::Matrix<double, 3, 2> S_coms_;
379 Eigen::Vector3d U_coms_, U_coms_j_;
381 Eigen::Vector3d old_reference_com_acc_;
383 eVector2 oldTrackingError2_x_, oldTrackingError2_y_;
384 eVector3 oldTrackingError_x_, oldTrackingError_y_;
386 eVector3 actualState3d_x_, actualState3d_y_;
387 eVector2 actualState2d_x_, actualState2d_y_;
394 std::vector<wykobi::point2d<double>> wykobi_foot_description_;
std::array< eVector3, 3 > getStableCoMs(const double &com_height)
Definition cop_stabilizer.cpp:794
Eigen::Vector3d target_com_
Definition cop_stabilizer.hpp:408
void stabilizeCOP(const eVector3 &actual_com, const eVector3 &actual_com_vel, const eVector3 &actual_com_acc, const eVector3 &actual_cop, const Polygon2D &support_polygon, const eVector3 &reference_com, const eVector3 &reference_com_vel, const eVector3 &reference_com_acc, eVector3 &desired_com, eVector3 &desired_com_vel, eVector3 &desired_com_acc, eVector3 &desired_icp, eVector3 &actual_icp, eVector3 &desired_cop_reference, eVector3 &desired_cop_computed)
Definition cop_stabilizer.cpp:241
double distributeForces(const eVector3 &desired_cop, const eVector2 LF_xy, const double LF_force_z, const eVector2 LF_torque_xy, const eVector2 RF_xy, const double RF_force_z, const eVector2 RF_torque_xy)
Definition cop_stabilizer.cpp:776
const CopStabilizerSettings & getSettings()
Definition cop_stabilizer.hpp:114
eVector2 desired_uncampled_cop_
Definition cop_stabilizer.hpp:410
Eigen::Vector3d target_com_acc_
Definition cop_stabilizer.hpp:408
EIGEN_MAKE_ALIGNED_OPERATOR_NEW CopStabilizer()
Definition cop_stabilizer.cpp:9
eVector2 estimated_disturbance_
Definition cop_stabilizer.hpp:413
Eigen::Vector3d target_com_jerk_
Definition cop_stabilizer.hpp:409
void setIntegralGains(const eVector2 &integral_gains)
Definition cop_stabilizer.cpp:951
eVector2 cop_clamped
Definition cop_stabilizer.hpp:412
void setPCCgains(const double cop_pcc_gains)
Definition cop_stabilizer.cpp:945
void stabilizeApproximateAcceleration(const eVector3 &actual_com, const eVector3 &actual_com_vel, const eVector3 &actual_com_acc, const eVector3 &actual_cop, const Polygon2D &support_polygon, const eVector3 &reference_com, const eVector3 &reference_com_vel, const eVector3 &reference_com_acc, eVector3 &desired_com, eVector3 &desired_com_vel, eVector3 &desired_com_acc, eVector3 &desired_icp, eVector3 &actual_icp, eVector3 &desired_cop_reference, eVector3 &desired_cop_computed)
Definition cop_stabilizer.cpp:379
eVector2 target_cop_
Definition cop_stabilizer.hpp:410
virtual ~CopStabilizer()
Definition cop_stabilizer.cpp:19
void setCOPgains(const eVector3 &cop_x_gains, const eVector3 &cop_y_gains)
Definition cop_stabilizer.cpp:937
Eigen::Vector3d target_com_vel_
Definition cop_stabilizer.hpp:408
void stabilizeJerk(const eVector3 &actual_com, const eVector3 &actual_com_vel, const eVector3 &actual_com_acc, const eVector3 &actual_cop, const Polygon2D &support_polygon, const eVector3 &reference_com, const eVector3 &reference_com_vel, const eVector3 &reference_com_acc, const eVector3 &reference_com_jerk, eVector3 &desired_com, eVector3 &desired_com_vel, eVector3 &desired_com_acc, eVector3 &desired_icp, eVector3 &actual_icp, eVector3 &desired_cop_reference, eVector3 &desired_cop_computed)
Definition cop_stabilizer.cpp:640
void stabilizeP_CC(const eVector3 &actual_com, const eVector3 &actual_com_vel, const eVector3 &actual_com_acc, const eVector3 &actual_cop, const Polygon2D &support_polygon, const eVector3 &reference_com, const eVector3 &reference_com_vel, const eVector3 &reference_com_acc, eVector3 &desired_com, eVector3 &desired_com_vel, eVector3 &desired_com_acc, eVector3 &desired_icp, eVector3 &actual_icp, eVector3 &desired_cop_reference, eVector3 &desired_cop_computed)
Definition cop_stabilizer.cpp:516
Eigen::Vector3d non_linear_
Definition cop_stabilizer.hpp:409
virtual void configure(const CopStabilizerSettings &settings)
Definition cop_stabilizer.cpp:21
void stabilize(const eVector3 &actual_com, const eVector3 &actual_com_vel, const eVector3 &actual_com_acc, const eVector3 &actual_cop, const eMatrixHoms &actual_stance_poses, const eVector3 &reference_com, const eVector3 &reference_com_vel, const eVector3 &reference_com_acc, const eVector3 &reference_com_jerk, eVector3 &desired_com, eVector3 &desired_com_vel, eVector3 &desired_com_acc, eVector3 &desired_icp, eVector3 &actual_icp, eVector3 &desired_cop_reference, eVector3 &desired_cop_computed)
Definition cop_stabilizer.cpp:128
eVector2 errorSum_
Definition cop_stabilizer.hpp:411
Definition wykobi.hpp:383
Definition cop_stabilizer.hpp:18
Eigen::Isometry3d eMatrixHom
Definition cop_stabilizer.hpp:24
Eigen::Matrix< double, 2, 1 > eVector2
Definition cop_stabilizer.hpp:21
Eigen::Matrix< double, 3, 1 > eVector3
Definition cop_stabilizer.hpp:22
std::vector< eVector3, Eigen::aligned_allocator< eVector3 > > eVector3s
Definition cop_stabilizer.hpp:29
wykobi::polygon< double, 2 > Polygon2D
Definition cop_stabilizer.hpp:20
Eigen::Matrix< double, 6, 1 > eVector6
Definition cop_stabilizer.hpp:23
std::vector< eMatrixHom, Eigen::aligned_allocator< eMatrixHom > > eMatrixHoms
Definition cop_stabilizer.hpp:27
Eigen::Matrix3d eMatrixRot
Definition cop_stabilizer.hpp:25
std::vector< eVector2, Eigen::aligned_allocator< eVector2 > > eVector2s
Definition cop_stabilizer.hpp:28
Definition cop_stabilizer.hpp:31
EIGEN_MAKE_ALIGNED_OPERATOR_NEW double height
Definition cop_stabilizer.hpp:35
eVector3 cop_y_gains
Definition cop_stabilizer.hpp:41
double g
Definition cop_stabilizer.hpp:46
eVector2 integral_gain
Definition cop_stabilizer.hpp:43
bool operator==(const CopStabilizerSettings &rhs) const
Definition cop_stabilizer.hpp:51
std::ostream & operator<<(std::ostream &out)
Definition cop_stabilizer.hpp:91
bool saturate_cop
Definition cop_stabilizer.hpp:48
double foot_width
Definition cop_stabilizer.hpp:37
eVector3 cop_x_gains
Definition cop_stabilizer.hpp:40
double cop_p_cc_gain
Definition cop_stabilizer.hpp:42
double robot_mass
Definition cop_stabilizer.hpp:38
bool operator!=(const CopStabilizerSettings &rhs)
Definition cop_stabilizer.hpp:68
std::string to_string()
Definition cop_stabilizer.hpp:70
double foot_length
Definition cop_stabilizer.hpp:36
bool use_rate_limited_dcm
Definition cop_stabilizer.hpp:49
std::string cop_control_type
Definition cop_stabilizer.hpp:47
double dt
Definition cop_stabilizer.hpp:39