28#include <coin/IpTNLP.hpp>
29#include <coin/IpTypes.hpp>
46 void set_start_point(
const double x,
const double y,
const double theta,
47 const double kappa,
const double dkappa);
49 void set_end_point(
const double x,
const double y,
const double theta,
50 const double kappa,
const double dkappa);
61 std::vector<double>* ptr_kappa,
62 std::vector<double>* ptr_dkappa,
63 std::vector<double>* ptr_s,
64 std::vector<double>* ptr_x,
65 std::vector<double>* ptr_y)
const;
68 bool get_nlp_info(
int& n,
int& m,
int& nnz_jac_g,
int& nnz_h_lag,
69 IndexStyleEnum& index_style)
override;
72 bool get_bounds_info(
int n,
double* x_l,
double* x_u,
int m,
double* g_l,
73 double* g_u)
override;
77 double* z_L,
double* z_U,
int m,
bool init_lambda,
78 double* lambda)
override;
81 bool eval_f(
int n,
const double* x,
bool new_x,
double& obj_value)
override;
84 bool eval_grad_f(
int n,
const double* x,
bool new_x,
double* grad_f)
override;
87 bool eval_g(
int n,
const double* x,
bool new_x,
int m,
double* g)
override;
93 bool eval_jac_g(
int n,
const double* x,
bool new_x,
int m,
int nele_jac,
94 int* iRow,
int* jCol,
double* values)
override;
101 bool eval_h(
int n,
const double* x,
bool new_x,
double obj_factor,
int m,
102 const double* lambda,
bool new_lambda,
int nele_hess,
int* iRow,
103 int* jCol,
double* values)
override;
109 const double* z_L,
const double* z_U,
int m,
110 const double* g,
const double* lambda,
111 double obj_value,
const Ipopt::IpoptData* ip_data,
112 Ipopt::IpoptCalculatedQuantities* ip_cq)
override;
115 static constexpr size_t N = 10;
118 void update_piecewise_spiral_paths(
const double* x,
const int n);
120 std::vector<Eigen::Vector2d> init_points_;
122 std::vector<double> opt_theta_;
124 std::vector<double> opt_kappa_;
126 std::vector<double> opt_dkappa_;
128 std::vector<double> opt_s_;
130 std::vector<double> opt_x_;
132 std::vector<double> opt_y_;
134 std::vector<double> point_distances_;
136 int num_of_variables_ = 0;
138 int num_of_constraints_ = 0;
140 int num_of_points_ = 0;
142 double default_max_point_deviation_ = 0.0;
144 const int num_of_internal_points_ = 5;
146 std::vector<double> relative_theta_;
148 std::vector<QuinticSpiralPathWithDerivation<N>> piecewise_paths_;
150 bool has_fixed_start_point_ =
false;
152 double start_x_ = 0.0;
154 double start_y_ = 0.0;
156 double start_theta_ = 0.0;
158 double start_kappa_ = 0.0;
160 double start_dkappa_ = 0.0;
162 bool has_fixed_end_point_ =
false;
168 double end_theta_ = 0.0;
170 double end_kappa_ = 0.0;
172 double end_dkappa_ = 0.0;
174 bool has_fixed_end_point_position_ =
false;
176 double weight_curve_length_ = 1.0;
178 double weight_kappa_ = 1.0;
180 double weight_dkappa_ = 1.0;
void set_start_point(const double x, const double y, const double theta, const double kappa, const double dkappa)
void set_element_weight_curve_length(const double weight_curve_length)
bool eval_f(int n, const double *x, bool new_x, double &obj_value) override
Method to return the objective value
void set_element_weight_kappa(const double weight_kappa)
bool get_bounds_info(int n, double *x_l, double *x_u, int m, double *g_l, double *g_u) override
Method to return the bounds for my problem
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
Method to return: 1) The structure of the hessian of the lagrangian (if "values" is nullptr) 2) The v...
bool eval_grad_f(int n, const double *x, bool new_x, double *grad_f) override
Method to return the gradient of the objective
virtual ~SpiralProblemInterface()=default
void set_end_point(const double x, const double y, const double theta, const double kappa, const double dkappa)
void set_default_max_point_deviation(const double point_max_deviation)
bool eval_jac_g(int n, const double *x, bool new_x, int m, int nele_jac, int *iRow, int *jCol, double *values) override
Method to return: 1) The structure of the jacobian (if "values" is nullptr) 2) The values of the jaco...
void get_optimization_results(std::vector< double > *ptr_theta, std::vector< double > *ptr_kappa, std::vector< double > *ptr_dkappa, std::vector< double > *ptr_s, std::vector< double > *ptr_x, std::vector< double > *ptr_y) const
bool eval_g(int n, const double *x, bool new_x, int m, double *g) override
Method to return the constraint residuals
void set_element_weight_dkappa(const double weight_dkappa)
static constexpr size_t N
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
Method to return the starting point for the algorithm
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
bool get_nlp_info(int &n, int &m, int &nnz_jac_g, int &nnz_h_lag, IndexStyleEnum &index_style) override
Method to return some info about the nlp
void set_end_point_position(const double x, const double y)
Planning module main class.