00001 #ifndef _TYPES_H_ 00002 #define _TYPES_H_ 00003 00004 #include <Eigen/Core> 00005 #include <vector> 00006 #include <iostream> 00007 00008 #define LOG(X) std::cout << X << std::endl; 00009 00010 namespace MPC { 00011 00012 typedef Eigen::MatrixXf MatrixT; 00013 typedef Eigen::VectorXf VectorT; 00014 00015 struct DDPParams { 00016 float zMin; 00017 float lamInit; 00018 float lambdaFactor; 00019 float lambdaMax; 00020 float lambdaMin; 00021 float tolFun; 00022 float tolGrad; 00023 float dlamInit; 00024 00025 DDPParams() { 00026 zMin = 0.2; 00027 lamInit = 1; 00028 lambdaFactor = 1.2; 00029 lambdaMax = 1e10; 00030 lambdaMin = 1e-6; 00031 tolFun = 1e-9; 00032 tolGrad = 1e-6; 00033 dlamInit = 1; 00034 } 00035 00036 }; 00037 00038 struct Trajectory { 00039 EIGEN_MAKE_ALIGNED_OPERATOR_NEW; 00040 00041 MatrixT x; 00042 MatrixT u; 00043 VectorT cost; 00044 bool started; 00045 00046 Trajectory() { 00047 started = false; 00048 } 00049 }; 00050 00051 struct Deriv { 00052 EIGEN_MAKE_ALIGNED_OPERATOR_NEW; 00053 00054 MatrixT fx; 00055 MatrixT fu; 00056 std::vector<MatrixT> fxx; 00057 std::vector<MatrixT> fxu; 00058 std::vector<MatrixT> fuu; 00059 VectorT cx; 00060 VectorT cu; 00061 MatrixT cxx; 00062 MatrixT cxu; 00063 MatrixT cuu; 00064 }; 00065 00066 struct LocalValueFunction { 00067 EIGEN_MAKE_ALIGNED_OPERATOR_NEW; 00068 00069 MatrixT V; // TODO: we do not actually compute this right now do we ? 00070 MatrixT Vx; 00071 std::vector<MatrixT> Vxx; 00072 VectorT dV; 00073 00074 MatrixT l; 00075 std::vector<MatrixT> L; 00076 }; 00077 00078 00079 typedef std::vector<Deriv> TrajectoryDeriv; 00080 00081 typedef std::function<float(const VectorT &, const VectorT &)> CostFunction; 00082 typedef std::function<void(const VectorT &, const VectorT &, Deriv &)> CostFunctionD; 00083 typedef std::function<void(const VectorT &, const VectorT &, VectorT &)> Dynamics; 00084 typedef std::function<void(const VectorT &, const VectorT &, Deriv &)> DynamicsD; 00085 00086 } 00087 00088 #endif