17 #ifndef __sot_torque_control_base_estimator_H__
18 #define __sot_torque_control_base_estimator_H__
25 #if defined(base_estimator_EXPORTS)
26 #define TALOS_BASE_ESTIMATOR_EXPORT __declspec(dllexport)
28 #define TALOS_BASE_ESTIMATOR_EXPORT __declspec(dllimport)
31 #define TALOS_BASE_ESTIMATOR_EXPORT
37 #include <pinocchio/fwd.hpp>
39 #include <dynamic-graph/signal-helper.h>
42 #include <sot/core/matrix-geometry.hh>
43 #include <sot/core/robot-utils.hh>
45 #include "boost/assign.hpp"
47 #include <boost/math/distributions/normal.hpp>
50 #include <pinocchio/algorithm/kinematics.hpp>
51 #include <pinocchio/multibody/model.hpp>
52 #include <pinocchio/parsers/urdf.hpp>
56 namespace talos_balance {
63 void se3Interp(
const pinocchio::SE3& s1,
const pinocchio::SE3& s2,
64 const double alpha, pinocchio::SE3& s12);
67 void rpyToMatrix(
double r,
double p,
double y, Eigen::Matrix3d& R);
70 void rpyToMatrix(
const Eigen::Vector3d& rpy, Eigen::Matrix3d& R);
73 void matrixToRpy(
const Eigen::Matrix3d& M, Eigen::Vector3d& rpy);
87 double wEulerMean(
double a1,
double a2,
double w1,
double w2);
90 :
public ::dynamicgraph::Entity {
92 typedef pinocchio::SE3 SE3;
93 typedef Eigen::Vector2d Vector2;
94 typedef Eigen::Vector3d
Vector3;
95 typedef Eigen::Vector4d Vector4;
97 typedef Vector7d Vector7;
98 typedef Eigen::Matrix3d Matrix3;
99 typedef boost::math::normal normal;
101 DYNAMIC_GRAPH_ENTITY_DECL();
104 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
109 void init(
const double&
dt,
const std::string& urdfFile);
111 void set_fz_stable_windows_size(
const int& ws);
112 void set_alpha_w_filter(
const double& a);
113 void set_alpha_DC_acc(
const double& a);
114 void set_alpha_DC_vel(
const double& a);
115 void reset_foot_positions();
116 void set_imu_weight(
const double& w);
117 void set_zmp_std_dev_right_foot(
const double& std_dev);
118 void set_zmp_std_dev_left_foot(
const double& std_dev);
119 void set_normal_force_std_dev_right_foot(
const double& std_dev);
120 void set_normal_force_std_dev_left_foot(
const double& std_dev);
125 void set_zmp_margin_right_foot(
const double& margin);
126 void set_zmp_margin_left_foot(
const double& margin);
127 void set_normal_force_margin_right_foot(
const double& margin);
128 void set_normal_force_margin_left_foot(
const double& margin);
130 void reset_foot_positions_impl(
const Vector6& ftlf,
const Vector6& ftrf);
131 void compute_zmp(
const Vector6& w, Vector2& zmp);
132 double compute_zmp_weight(
const Vector2& zmp,
const Vector4& foot_sizes,
133 double std_dev,
double margin);
134 double compute_force_weight(
double fz,
double std_dev,
double margin);
135 void kinematics_estimation(
const Vector6& ft,
const Vector6&
K,
137 const pinocchio::FrameIndex foot_id, SE3& oMff,
138 SE3& oMfa, SE3& fsMff);
187 DECLARE_SIGNAL_OUT(a_ac,
189 DECLARE_SIGNAL_OUT(v_ac,
216 virtual void display(std::ostream& os)
const;
227 bool m_right_foot_is_stable;
229 int m_fz_stable_windows_size;
231 int m_lf_fz_stable_cpt;
233 int m_rf_fz_stable_cpt;
239 double m_zmp_std_dev_lf;
241 double m_fz_std_dev_rf;
243 double m_fz_std_dev_lf;
245 Vector4 m_left_foot_sizes;
247 Vector4 m_right_foot_sizes;
249 double m_zmp_margin_lf;
258 Eigen::VectorXd m_v_flex;
260 Eigen::VectorXd m_v_imu;
262 Eigen::VectorXd m_v_gyr;
272 double m_alpha_DC_vel;
280 double m_w_rf_filtered;
296 SE3 m_oMrfs_default_ref;
330 #endif // #ifndef __sot_torque_control_free_flyer_locator_H__