ocra-wbi-plugins
Doxygen documentation for the ocra-wbi-plugins repository
ocra-wbi-plugins/ocra-icub-clients/walking-client/include/walking-client/BaseOfSupport.h
Go to the documentation of this file.
00001 
00081 #ifndef _BASE_OF_SUPPORT_H_
00082 #define _BASE_OF_SUPPORT_H_
00083 
00084 // Boost headers
00085 #include <boost/geometry.hpp>
00086 #include <boost/geometry/geometries/polygon.hpp>
00087 #include <boost/geometry/geometries/box.hpp>
00088 #include <boost/geometry/geometries/adapted/boost_tuple.hpp>
00089 #include "unsupported/Eigen/MatrixFunctions"
00090 // Eigen headers
00091 #include <Eigen/Core>
00092 #include <walking-client/MIQPState.h>
00093 #include <walking-client/StepController.h>
00094 #include <walking-client/utils.h>
00095 #include <ocra-recipes/TaskConnection.h>
00096 
00097 BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
00098 typedef boost::tuple<double, double> point;
00099 typedef boost::geometry::model::polygon<point> Polygon;
00100 typedef boost::geometry::model::box<point> Box;
00101 
00102 class BaseOfSupport {
00103 private:
00116     Eigen::MatrixXd _Ab;
00117     
00135     Eigen::VectorXd _b;
00136 
00147     Eigen::MatrixXd _Cp;
00148 
00165     Eigen::MatrixXd _Ci;
00166     
00180     Eigen::VectorXd _f;
00181 
00196     Eigen::MatrixXd _A;
00197     
00212     Eigen::VectorXd _fbar;
00213     
00228     Eigen::MatrixXd _B;
00229     
00239     Eigen::VectorXd _rhs;
00240     
00244     Polygon _poly;
00248     Box _bbox;
00256     std::shared_ptr<StepController> _stepController;
00257     
00274     Eigen::MatrixXd _Q;
00275     
00294     Eigen::MatrixXd _T;
00295     
00299     MIQPParameters _miqpParams;
00300     
00301 public:
00308     BaseOfSupport(std::shared_ptr<StepController> stepController, const Eigen::MatrixXd& Q, const Eigen::MatrixXd& T, MIQPParameters miqpParams);
00309     
00313     virtual ~BaseOfSupport ();
00314     
00328     bool update(const Eigen::VectorXd& xi_k);
00329     
00339     void computeBoundingBox(const Eigen::MatrixXd &feetCorners, Eigen::Matrix2d &minMaxBoundingBox);
00340     
00347     void getA(Eigen::MatrixXd& A);
00348     
00355     void getrhs(Eigen::VectorXd& rhs);
00356     
00357 protected:
00358     
00359     
00364     void buildAb();
00365     
00372     void buildb(const Eigen::Matrix2d& minMaxBoundingBox);
00373     
00381     void buildCp(double cz, double g);
00382     
00390     void buildCi(const Eigen::MatrixXd& Ab, const Eigen::MatrixXd& Cp);
00391     
00396     void buildf();
00397     
00404     void buildfbar(const Eigen::VectorXd& f);
00405     
00413     void buildB(const Eigen::MatrixXd& Ci, const Eigen::MatrixXd& Q);
00414     
00423     void buildA(const Eigen::MatrixXd& Ci, const Eigen::MatrixXd& Q, const Eigen::MatrixXd& T);
00424 };
00425 
00426 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines