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__