63 const Eigen::MatrixXd& ego,
64 const Eigen::MatrixXd& xWS,
65 const Eigen::MatrixXd& uWS,
66 const Eigen::MatrixXd& l_warm_up,
67 const Eigen::MatrixXd& n_warm_up,
68 const Eigen::MatrixXd& s_warm_up,
69 const Eigen::MatrixXd& x0,
70 const Eigen::MatrixXd& xf,
71 const Eigen::MatrixXd& last_time_u,
72 const std::vector<double>& XYbounds,
73 const Eigen::MatrixXi& obstacles_edges_num,
74 const size_t obstacles_num,
75 const Eigen::MatrixXd& obstacles_A,
76 const Eigen::MatrixXd& obstacles_b,
87 IndexStyleEnum& index_style)
override;
90 bool get_bounds_info(
int n,
double* x_l,
double* x_u,
int m,
double* g_l,
double* g_u)
override;
102 double* lambda)
override;
105 bool eval_f(
int n,
const double* x,
bool new_x,
double& obj_value)
override;
108 bool eval_grad_f(
int n,
const double* x,
bool new_x,
double* grad_f)
override;
111 bool eval_g(
int n,
const double* x,
bool new_x,
int m,
double* g)
override;
114 bool check_g(
int n,
const double* x,
int m,
const double* g);
120 bool eval_jac_g(
int n,
const double* x,
bool new_x,
int m,
int nele_jac,
int* iRow,
int* jCol,
double* values)
124 bool eval_jac_g_ser(
int n,
const double* x,
bool new_x,
int m,
int nele_jac,
int* iRow,
int* jCol,
double* values)
138 const double* lambda,
143 double* values)
override;
149 Ipopt::SolverReturn status,
156 const double* lambda,
158 const Ipopt::IpoptData* ip_data,
159 Ipopt::IpoptCalculatedQuantities* ip_cq)
override;
162 Eigen::MatrixXd* state_result,
163 Eigen::MatrixXd* control_result,
164 Eigen::MatrixXd* time_result,
165 Eigen::MatrixXd* dual_l_result,
166 Eigen::MatrixXd* dual_n_result)
const override;
171 void eval_obj(
int n,
const T* x, T* obj_value);
178 void generate_tapes(
int n,
int m,
int* nnz_jac_g,
int* nnz_h_lag);
182 int num_of_variables_ = 0;
183 int num_of_constraints_ = 0;
185 int lambda_horizon_ = 0;
186 int miu_horizon_ = 0;
187 int slack_horizon_ = 0;
190 Eigen::MatrixXd ego_;
191 Eigen::MatrixXd xWS_;
192 Eigen::MatrixXd uWS_;
193 Eigen::MatrixXd l_warm_up_;
194 Eigen::MatrixXd n_warm_up_;
195 Eigen::MatrixXd slack_warm_up_;
198 Eigen::MatrixXd last_time_u_;
199 std::vector<double> XYbounds_;
202 bool enable_constraint_check_;
205 double weight_state_x_ = 0.0;
206 double weight_state_y_ = 0.0;
207 double weight_state_phi_ = 0.0;
208 double weight_state_v_ = 0.0;
209 double weight_input_steer_ = 0.0;
210 double weight_input_a_ = 0.0;
211 double weight_rate_steer_ = 0.0;
212 double weight_rate_a_ = 0.0;
213 double weight_stitching_steer_ = 0.0;
214 double weight_stitching_a_ = 0.0;
215 double weight_first_order_time_ = 0.0;
216 double weight_second_order_time_ = 0.0;
217 double weight_end_state_ = 0.0;
218 double weight_slack_ = 0.0;
222 std::vector<double> g_;
223 double offset_ = 0.0;
224 Eigen::MatrixXi obstacles_edges_num_;
225 int obstacles_num_ = 0;
226 int obstacles_edges_sum_ = 0;
227 double wheelbase_ = 0.0;
229 Eigen::MatrixXd state_result_;
230 Eigen::MatrixXd dual_l_result_;
231 Eigen::MatrixXd dual_n_result_;
232 Eigen::MatrixXd control_result_;
233 Eigen::MatrixXd time_result_;
234 Eigen::MatrixXd slack_result_;
237 Eigen::MatrixXd obstacles_A_;
240 Eigen::MatrixXd obstacles_b_;
243 bool use_fix_time_ =
false;
246 int state_start_index_ = 0;
249 int control_start_index_ = 0;
252 int time_start_index_ = 0;
255 int l_start_index_ = 0;
258 int n_start_index_ = 0;
261 int slack_index_ = 0;
263 double min_safety_distance_ = 0.0;
265 double max_safety_distance_ = 0.0;
267 double max_steer_angle_ = 0.0;
269 double max_speed_forward_ = 0.0;
271 double max_speed_reverse_ = 0.0;
273 double max_acceleration_forward_ = 0.0;
275 double max_acceleration_reverse_ = 0.0;
277 double min_time_sample_scaling_ = 0.0;
279 double max_time_sample_scaling_ = 0.0;
281 double max_steer_rate_ = 0.0;
283 double max_lambda_ = 0.0;
285 double max_miu_ = 0.0;
287 bool enable_jacobian_ad_ =
false;
297 unsigned int* rind_g;
298 unsigned int* cind_g;
300 unsigned int* rind_L;
301 unsigned int* cind_L;
312 const size_t horizon,
314 const Eigen::MatrixXd& ego,
315 const Eigen::MatrixXd& xWS,
316 const Eigen::MatrixXd& uWS,
317 const Eigen::MatrixXd& l_warm_up,
318 const Eigen::MatrixXd& n_warm_up,
319 const Eigen::MatrixXd& s_warm_up,
320 const Eigen::MatrixXd& x0,
321 const Eigen::MatrixXd& xf,
322 const Eigen::MatrixXd& last_time_u,
323 const std::vector<double>& XYbounds,
324 const Eigen::MatrixXi& obstacles_edges_num,
325 const size_t obstacles_num,
326 const Eigen::MatrixXd& obstacles_A,
327 const Eigen::MatrixXd& obstacles_b,
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
This method is called when the algorithm is complete so the TNLP can store/write the solution