Apollo 11.0
自动驾驶开放平台
apollo::planning::PiecewiseJerkSpeedProblem类 参考

#include <piecewise_jerk_speed_problem.h>

类 apollo::planning::PiecewiseJerkSpeedProblem 继承关系图:
apollo::planning::PiecewiseJerkSpeedProblem 的协作图:

Public 成员函数

 PiecewiseJerkSpeedProblem (const size_t num_of_knots, const double delta_s, const std::array< double, 3 > &x_init)
 
virtual ~PiecewiseJerkSpeedProblem ()=default
 
void set_dx_ref (const double weight_dx_ref, const double dx_ref)
 
void set_dx_ref (const std::vector< double > &weight_dx_ref, const std::vector< double > &dx_ref)
 
void set_penalty_dx (std::vector< double > penalty_dx)
 
- Public 成员函数 继承自 apollo::planning::PiecewiseJerkProblem
 PiecewiseJerkProblem (const size_t num_of_knots, const double delta_s, const std::array< double, 3 > &x_init)
 
virtual ~PiecewiseJerkProblem ()=default
 
void set_x_bounds (std::vector< std::pair< double, double > > x_bounds)
 
void set_x_bounds (const double x_lower_bound, const double x_upper_bound)
 
void set_dx_bounds (std::vector< std::pair< double, double > > dx_bounds)
 
void set_dx_bounds (const double dx_lower_bound, const double dx_upper_bound)
 
void set_ddx_bounds (std::vector< std::pair< double, double > > ddx_bounds)
 
void set_ddx_bounds (const double ddx_lower_bound, const double ddx_upper_bound)
 
void set_dddx_bound (const double dddx_bound)
 
void set_dddx_bound (const double dddx_lower_bound, const double dddx_upper_bound)
 
void set_weight_x (const double weight_x)
 
void set_weight_dx (const double weight_dx)
 
void set_weight_ddx (const double weight_ddx)
 
void set_weight_dddx (const double weight_dddx)
 
void set_scale_factor (const std::array< double, 3 > &scale_factor)
 
void set_x_ref (const double weight_x_ref, std::vector< double > x_ref)
 Set the x ref object and the uniform x_ref weighting
 
void set_x_ref (std::vector< double > weight_x_ref_vec, std::vector< double > x_ref)
 Set the x ref object and piecewised x_ref weightings
 
void set_towing_x_ref (const double weight_towing_x_ref, std::vector< double > towing_x_ref)
 Set towing x ref object and piecewised towing_x_ref weightings
 
void set_towing_x_ref (std::vector< double > weight_towing_x_ref_vec, std::vector< double > towing_x_ref)
 
void set_end_state_ref (const std::array< double, 3 > &weight_end_state, const std::array< double, 3 > &end_state_ref)
 
virtual bool Optimize (const int max_iter=4000)
 
const std::vector< double > & opt_x () const
 
const std::vector< double > & opt_dx () const
 
const std::vector< double > & opt_ddx () const
 

Protected 成员函数

void CalculateKernel (std::vector< c_float > *P_data, std::vector< c_int > *P_indices, std::vector< c_int > *P_indptr) override
 
void CalculateOffset (std::vector< c_float > *q) override
 
OSQPSettings * SolverDefaultSettings () override
 
- Protected 成员函数 继承自 apollo::planning::PiecewiseJerkProblem
virtual void CalculateAffineConstraint (std::vector< c_float > *A_data, std::vector< c_int > *A_indices, std::vector< c_int > *A_indptr, std::vector< c_float > *lower_bounds, std::vector< c_float > *upper_bounds)
 
bool FormulateProblem (OSQPData *data)
 
void FreeData (OSQPData *data)
 
bool CheckLowUpperBound (const std::vector< c_float > &lower, const std::vector< c_float > &upper)
 
template<typename T >
T * CopyData (const std::vector< T > &vec)
 

Protected 属性

bool has_dx_ref_ = false
 
std::vector< double > dx_ref_
 
std::vector< double > weight_dx_ref_
 
std::vector< double > penalty_dx_
 
- Protected 属性 继承自 apollo::planning::PiecewiseJerkProblem
size_t num_of_knots_ = 0
 
std::vector< double > x_
 
std::vector< double > dx_
 
std::vector< double > ddx_
 
std::array< double, 3 > x_init_
 
std::array< double, 3 > scale_factor_ = {{1.0, 1.0, 1.0}}
 
std::vector< std::pair< double, double > > x_bounds_
 
std::vector< std::pair< double, double > > dx_bounds_
 
std::vector< std::pair< double, double > > ddx_bounds_
 
std::pair< double, double > dddx_bound_
 
double weight_x_ = 0.0
 
double weight_dx_ = 0.0
 
double weight_ddx_ = 0.0
 
double weight_dddx_ = 0.0
 
double delta_s_ = 1.0
 
bool has_x_ref_ = false
 
double weight_x_ref_ = 0.0
 
std::vector< double > x_ref_
 
std::vector< double > weight_x_ref_vec_
 
bool has_towing_x_ref_ = false
 
std::vector< double > towing_x_ref_
 
std::vector< double > weight_towing_x_ref_vec_
 
bool has_end_state_ref_ = false
 
std::array< double, 3 > weight_end_state_ = {{0.0, 0.0, 0.0}}
 
std::array< double, 3 > end_state_ref_
 

详细描述

在文件 piecewise_jerk_speed_problem.h48 行定义.

构造及析构函数说明

◆ PiecewiseJerkSpeedProblem()

apollo::planning::PiecewiseJerkSpeedProblem::PiecewiseJerkSpeedProblem ( const size_t  num_of_knots,
const double  delta_s,
const std::array< double, 3 > &  x_init 
)

在文件 piecewise_jerk_speed_problem.cc25 行定义.

28 : PiecewiseJerkProblem(num_of_knots, delta_s, x_init) {
29 penalty_dx_.resize(num_of_knots_, 0.0);
30 dx_ref_.resize(num_of_knots_, 0.0);
31 weight_dx_ref_.resize(num_of_knots_, 0.0);
32}
PiecewiseJerkProblem(const size_t num_of_knots, const double delta_s, const std::array< double, 3 > &x_init)

◆ ~PiecewiseJerkSpeedProblem()

virtual apollo::planning::PiecewiseJerkSpeedProblem::~PiecewiseJerkSpeedProblem ( )
virtualdefault

成员函数说明

◆ CalculateKernel()

void apollo::planning::PiecewiseJerkSpeedProblem::CalculateKernel ( std::vector< c_float > *  P_data,
std::vector< c_int > *  P_indices,
std::vector< c_int > *  P_indptr 
)
overrideprotectedvirtual

实现了 apollo::planning::PiecewiseJerkProblem.

在文件 piecewise_jerk_speed_problem.cc54 行定义.

56 {
57 const int n = static_cast<int>(num_of_knots_);
58 const int kNumParam = 3 * n;
59 const int kNumValue = 4 * n - 1;
60 std::vector<std::vector<std::pair<c_int, c_float>>> columns;
61 columns.resize(kNumParam);
62 int value_index = 0;
63
64 // x(i)^2 * w_x_ref
65 for (int i = 0; i < n - 1; ++i) {
66 columns[i].emplace_back(
68 ++value_index;
69 }
70 // x(n-1)^2 * (w_x_ref + w_end_x)
71 columns[n - 1].emplace_back(n - 1, (weight_x_ref_ + weight_end_state_[0]) /
73 ++value_index;
74
75 // x(i)'^2 * (w_dx_ref + penalty_dx)
76 for (int i = 0; i < n - 1; ++i) {
77 columns[n + i].emplace_back(n + i,
78 (weight_dx_ref_[i] + penalty_dx_[i]) /
80 ++value_index;
81 }
82 // x(n-1)'^2 * (w_dx_ref + penalty_dx + w_end_dx)
83 columns[2 * n - 1].emplace_back(
84 2 * n - 1,
85 (weight_dx_ref_[n - 1] + penalty_dx_[n - 1] + weight_end_state_[1]) /
87 ++value_index;
88
89 auto delta_s_square = delta_s_ * delta_s_;
90 // x(i)''^2 * (w_ddx + 2 * w_dddx / delta_s^2)
91 columns[2 * n].emplace_back(2 * n,
92 (weight_ddx_ + weight_dddx_ / delta_s_square) /
94 ++value_index;
95
96 for (int i = 1; i < n - 1; ++i) {
97 columns[2 * n + i].emplace_back(
98 2 * n + i, (weight_ddx_ + 2.0 * weight_dddx_ / delta_s_square) /
100 ++value_index;
101 }
102
103 columns[3 * n - 1].emplace_back(
104 3 * n - 1,
105 (weight_ddx_ + weight_dddx_ / delta_s_square + weight_end_state_[2]) /
106 (scale_factor_[2] * scale_factor_[2]));
107 ++value_index;
108
109 // -2 * w_dddx / delta_s^2 * x(i)'' * x(i + 1)''
110 for (int i = 0; i < n - 1; ++i) {
111 columns[2 * n + i].emplace_back(2 * n + i + 1,
112 -2.0 * weight_dddx_ / delta_s_square /
113 (scale_factor_[2] * scale_factor_[2]));
114 ++value_index;
115 }
116
117 CHECK_EQ(value_index, kNumValue);
118
119 int ind_p = 0;
120 for (int i = 0; i < kNumParam; ++i) {
121 P_indptr->push_back(ind_p);
122 for (const auto& row_data_pair : columns[i]) {
123 P_data->push_back(row_data_pair.second * 2.0);
124 P_indices->push_back(row_data_pair.first);
125 ++ind_p;
126 }
127 }
128 P_indptr->push_back(ind_p);
129}

◆ CalculateOffset()

void apollo::planning::PiecewiseJerkSpeedProblem::CalculateOffset ( std::vector< c_float > *  q)
overrideprotectedvirtual

实现了 apollo::planning::PiecewiseJerkProblem.

在文件 piecewise_jerk_speed_problem.cc131 行定义.

131 {
132 CHECK_NOTNULL(q);
133 const int n = static_cast<int>(num_of_knots_);
134 const int kNumParam = 3 * n;
135 q->resize(kNumParam);
136 for (int i = 0; i < n; ++i) {
137 if (has_x_ref_) {
138 q->at(i) += -2.0 * weight_x_ref_ * x_ref_[i] / scale_factor_[0];
139 }
140 if (has_dx_ref_) {
141 q->at(n + i) += -2.0 * weight_dx_ref_[i] * dx_ref_[i] / scale_factor_[1];
142 }
143 }
144
145 if (has_end_state_ref_) {
146 q->at(n - 1) +=
148 q->at(2 * n - 1) +=
150 q->at(3 * n - 1) +=
152 }
153}

◆ set_dx_ref() [1/2]

void apollo::planning::PiecewiseJerkSpeedProblem::set_dx_ref ( const double  weight_dx_ref,
const double  dx_ref 
)

在文件 piecewise_jerk_speed_problem.cc34 行定义.

35 {
36 weight_dx_ref_.resize(num_of_knots_, weight_dx_ref);
37 dx_ref_.resize(num_of_knots_, dx_ref);
38 has_dx_ref_ = true;
39}

◆ set_dx_ref() [2/2]

void apollo::planning::PiecewiseJerkSpeedProblem::set_dx_ref ( const std::vector< double > &  weight_dx_ref,
const std::vector< double > &  dx_ref 
)

在文件 piecewise_jerk_speed_problem.cc41 行定义.

43 {
44 weight_dx_ref_ = weight_dx_ref;
45 dx_ref_ = dx_ref;
46 has_dx_ref_ = true;
47}

◆ set_penalty_dx()

void apollo::planning::PiecewiseJerkSpeedProblem::set_penalty_dx ( std::vector< double >  penalty_dx)

在文件 piecewise_jerk_speed_problem.cc49 行定义.

49 {
50 CHECK_EQ(penalty_dx.size(), num_of_knots_);
51 penalty_dx_ = std::move(penalty_dx);
52}

◆ SolverDefaultSettings()

OSQPSettings * apollo::planning::PiecewiseJerkSpeedProblem::SolverDefaultSettings ( )
overrideprotectedvirtual

重载 apollo::planning::PiecewiseJerkProblem .

在文件 piecewise_jerk_speed_problem.cc155 行定义.

155 {
156 // Define Solver default settings
157 OSQPSettings* settings =
158 reinterpret_cast<OSQPSettings*>(c_malloc(sizeof(OSQPSettings)));
159 osqp_set_default_settings(settings);
160 settings->eps_abs = 1e-2;
161 settings->eps_rel = 1e-2;
162 settings->eps_prim_inf = 1e-5;
163 settings->eps_dual_inf = 1e-5;
164 settings->polish = true;
165 settings->verbose = FLAGS_enable_osqp_debug;
166 settings->scaled_termination = true;
167 settings->time_limit = FLAGS_path_speed_osqp_setting_time_limit;
168 return settings;
169}

类成员变量说明

◆ dx_ref_

std::vector<double> apollo::planning::PiecewiseJerkSpeedProblem::dx_ref_
protected

在文件 piecewise_jerk_speed_problem.h73 行定义.

◆ has_dx_ref_

bool apollo::planning::PiecewiseJerkSpeedProblem::has_dx_ref_ = false
protected

在文件 piecewise_jerk_speed_problem.h72 行定义.

◆ penalty_dx_

std::vector<double> apollo::planning::PiecewiseJerkSpeedProblem::penalty_dx_
protected

在文件 piecewise_jerk_speed_problem.h75 行定义.

◆ weight_dx_ref_

std::vector<double> apollo::planning::PiecewiseJerkSpeedProblem::weight_dx_ref_
protected

在文件 piecewise_jerk_speed_problem.h74 行定义.


该类的文档由以下文件生成: