Apollo  6.0
Open source self driving car software
distance_approach_interface.h
Go to the documentation of this file.
1 /******************************************************************************
2  * Copyright 2019 The Apollo Authors. All Rights Reserved.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *****************************************************************************/
16 
17 /*
18  * @file
19  */
20 
21 #pragma once
22 
23 #include <adolc/adolc.h>
24 #include <adolc/adolc_openmp.h>
25 #include <adolc/adolc_sparse.h>
26 #include <adolc/adouble.h>
27 #include <omp.h>
28 
29 #include <coin/IpTNLP.hpp>
30 #include <coin/IpTypes.hpp>
31 
32 #include "Eigen/Dense"
33 #include "cyber/common/log.h"
34 #include "cyber/common/macros.h"
35 #include "modules/common/configs/proto/vehicle_config.pb.h"
40 #include "modules/planning/proto/planner_open_space_config.pb.h"
41 
42 #define tag_f 1
43 #define tag_g 2
44 #define tag_L 3
45 #define HPOFF 30
46 
47 namespace apollo {
48 namespace planning {
49 
50 class DistanceApproachInterface : public Ipopt::TNLP {
51  public:
52  virtual ~DistanceApproachInterface() = default;
53 
55  virtual bool get_nlp_info(int& n, int& m, int& nnz_jac_g, // NOLINT
56  int& nnz_h_lag, // NOLINT
57  IndexStyleEnum& index_style) = 0; // NOLINT
58 
60  virtual bool get_bounds_info(int n, double* x_l, double* x_u, int m,
61  double* g_l, double* g_u) = 0;
62 
64  virtual bool get_starting_point(int n, bool init_x, double* x, bool init_z,
65  double* z_L, double* z_U, int m,
66  bool init_lambda, double* lambda) = 0;
67 
69  virtual bool eval_f(int n, const double* x, bool new_x, // NOLINT
70  double& obj_value) = 0; // NOLINT
71 
73  virtual bool eval_grad_f(int n, const double* x, bool new_x,
74  double* grad_f) = 0;
75 
77  virtual bool eval_g(int n, const double* x, bool new_x, int m, double* g) = 0;
78 
80  virtual bool check_g(int n, const double* x, int m, const double* g) = 0;
81 
86  virtual bool eval_jac_g(int n, const double* x, bool new_x, int m,
87  int nele_jac, int* iRow, int* jCol,
88  double* values) = 0;
89  // sequential implementation to jac_g
90  virtual bool eval_jac_g_ser(int n, const double* x, bool new_x, int m,
91  int nele_jac, int* iRow, int* jCol,
92  double* values) = 0;
93 
99  virtual bool eval_h(int n, const double* x, bool new_x, double obj_factor,
100  int m, const double* lambda, bool new_lambda,
101  int nele_hess, int* iRow, int* jCol, double* values) = 0;
102 
106  virtual void finalize_solution(Ipopt::SolverReturn status, int n,
107  const double* x, const double* z_L,
108  const double* z_U, int m, const double* g,
109  const double* lambda, double obj_value,
110  const Ipopt::IpoptData* ip_data,
111  Ipopt::IpoptCalculatedQuantities* ip_cq) = 0;
112 
113  virtual void get_optimization_results(
114  Eigen::MatrixXd* state_result, Eigen::MatrixXd* control_result,
115  Eigen::MatrixXd* time_result, Eigen::MatrixXd* dual_l_result,
116  Eigen::MatrixXd* dual_n_result) const = 0;
117 };
118 
119 } // namespace planning
120 } // namespace apollo
virtual bool check_g(int n, const double *x, int m, const double *g)=0
PlanningContext is the runtime context in planning. It is persistent across multiple frames...
Definition: atomic_hash_map.h:25
virtual 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)=0
virtual bool get_bounds_info(int n, double *x_l, double *x_u, int m, double *g_l, double *g_u)=0
virtual bool eval_jac_g_ser(int n, const double *x, bool new_x, int m, int nele_jac, int *iRow, int *jCol, double *values)=0
Planning module main class. It processes GPS and IMU as input, to generate planning info...
virtual 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)=0
Definition: distance_approach_interface.h:50
virtual 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)=0
virtual void get_optimization_results(Eigen::MatrixXd *state_result, Eigen::MatrixXd *control_result, Eigen::MatrixXd *time_result, Eigen::MatrixXd *dual_l_result, Eigen::MatrixXd *dual_n_result) const =0
virtual bool get_nlp_info(int &n, int &m, int &nnz_jac_g, int &nnz_h_lag, IndexStyleEnum &index_style)=0
Math-related util functions.
virtual bool eval_f(int n, const double *x, bool new_x, double &obj_value)=0
virtual bool eval_g(int n, const double *x, bool new_x, int m, double *g)=0
virtual bool eval_jac_g(int n, const double *x, bool new_x, int m, int nele_jac, int *iRow, int *jCol, double *values)=0
virtual bool eval_grad_f(int n, const double *x, bool new_x, double *grad_f)=0
Some util functions.