26 #include <adolc/adolc.h> 27 #include <adolc/adolc_sparse.h> 29 #include <coin/IpTNLP.hpp> 30 #include <coin/IpTypes.hpp> 32 #include "Eigen/Dense" 34 #include "modules/common/configs/proto/vehicle_config.pb.h" 36 #include "modules/planning/proto/planner_open_space_config.pb.h" 49 size_t horizon,
double ts,
const Eigen::MatrixXd& ego,
50 const Eigen::MatrixXi& obstacles_edges_num,
const size_t obstacles_num,
51 const Eigen::MatrixXd& obstacles_A,
const Eigen::MatrixXd& obstacles_b,
52 const Eigen::MatrixXd& xWS,
53 const PlannerOpenSpaceConfig& planner_open_space_config);
58 Eigen::MatrixXd* n_warm_up)
const;
61 const Eigen::MatrixXd& n_warm_up);
64 bool get_nlp_info(
int& n,
int& m,
int& nnz_jac_g,
int& nnz_h_lag,
65 IndexStyleEnum& index_style)
override;
68 bool get_bounds_info(
int n,
double* x_l,
double* x_u,
int m,
double* g_l,
69 double* g_u)
override;
73 double* z_L,
double* z_U,
int m,
bool init_lambda,
74 double* lambda)
override;
77 bool eval_f(
int n,
const double* x,
bool new_x,
double& obj_value)
override;
80 bool eval_grad_f(
int n,
const double* x,
bool new_x,
double* grad_f)
override;
83 bool eval_g(
int n,
const double* x,
bool new_x,
int m,
double* g)
override;
89 bool eval_jac_g(
int n,
const double* x,
bool new_x,
int m,
int nele_jac,
90 int* iRow,
int* jCol,
double* values)
override;
97 bool eval_h(
int n,
const double* x,
bool new_x,
double obj_factor,
int m,
98 const double* lambda,
bool new_lambda,
int nele_hess,
int* iRow,
99 int* jCol,
double* values)
override;
105 const double* z_L,
const double* z_U,
int m,
106 const double* g,
const double* lambda,
107 double obj_value,
const Ipopt::IpoptData* ip_data,
108 Ipopt::IpoptCalculatedQuantities* ip_cq)
override;
113 bool eval_obj(
int n,
const T* x, T* obj_value);
124 int num_of_variables_;
125 int num_of_constraints_;
128 Eigen::MatrixXd ego_;
129 int lambda_horizon_ = 0;
130 int miu_horizon_ = 0;
131 int dual_formulation_horizon_ = 0;
133 Eigen::MatrixXd l_warm_up_;
134 Eigen::MatrixXd n_warm_up_;
139 std::vector<double> g_;
141 Eigen::MatrixXi obstacles_edges_num_;
143 int obstacles_edges_sum_;
146 int l_start_index_ = 0;
149 int n_start_index_ = 0;
152 int d_start_index_ = 0;
155 Eigen::MatrixXd obstacles_A_;
158 Eigen::MatrixXd obstacles_b_;
161 Eigen::MatrixXd xWS_;
163 double min_safety_distance_;
167 unsigned int* rind_L;
168 unsigned int* cind_L;
bool eval_g(int n, const double *x, bool new_x, int m, double *g) override
bool eval_f(int n, const double *x, bool new_x, double &obj_value) override
DualVariableWarmStartIPOPTQPInterface(size_t horizon, double ts, const Eigen::MatrixXd &ego, const Eigen::MatrixXi &obstacles_edges_num, const size_t obstacles_num, const Eigen::MatrixXd &obstacles_A, const Eigen::MatrixXd &obstacles_b, const Eigen::MatrixXd &xWS, const PlannerOpenSpaceConfig &planner_open_space_config)
PlanningContext is the runtime context in planning. It is persistent across multiple frames...
Definition: atomic_hash_map.h:25
bool eval_h(int n, const double *x, bool new_x, double obj_factor, int m, const double *lambda, bool new_lambda, int nele_hess, int *iRow, int *jCol, double *values) override
virtual ~DualVariableWarmStartIPOPTQPInterface()=default
Planning module main class. It processes GPS and IMU as input, to generate planning info...
Definition: dual_variable_warm_start_ipopt_qp_interface.h:46
bool eval_jac_g(int n, const double *x, bool new_x, int m, int nele_jac, int *iRow, int *jCol, double *values) override
void get_optimization_results(Eigen::MatrixXd *l_warm_up, Eigen::MatrixXd *n_warm_up) const
bool eval_grad_f(int n, const double *x, bool new_x, double *grad_f) override
bool get_starting_point(int n, bool init_x, double *x, bool init_z, double *z_L, double *z_U, int m, bool init_lambda, double *lambda) override
void generate_tapes(int n, int m, int *nnz_h_lag)
bool get_nlp_info(int &n, int &m, int &nnz_jac_g, int &nnz_h_lag, IndexStyleEnum &index_style) override
bool get_bounds_info(int n, double *x_l, double *x_u, int m, double *g_l, double *g_u) override
bool eval_obj(int n, const T *x, T *obj_value)
void finalize_solution(Ipopt::SolverReturn status, int n, const double *x, const double *z_L, const double *z_U, int m, const double *g, const double *lambda, double obj_value, const Ipopt::IpoptData *ip_data, Ipopt::IpoptCalculatedQuantities *ip_cq) override
bool eval_constraints(int n, const T *x, int m, T *g)
void check_solution(const Eigen::MatrixXd &l_warm_up, const Eigen::MatrixXd &n_warm_up)