Go to the documentation of this file.00001
00081 #ifndef _BASE_OF_SUPPORT_H_
00082 #define _BASE_OF_SUPPORT_H_
00083
00084
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
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