1#ifndef SRC_PLANNING_INCLUDE_PLANNING_SMOOTHING2_HPP_
2#define SRC_PLANNING_INCLUDE_PLANNING_SMOOTHING2_HPP_
43 std::vector<PathPoint>
smooth_path(
const std::vector<PathPoint>& path,
bool is_path_closed)
const;
56 std::vector<PathPoint>
optimize_path(
const std::vector<PathPoint>& path,
57 const std::vector<PathPoint>& yellow_cones,
58 const std::vector<PathPoint>& blue_cones)
const;
73 std::vector<PathPoint>
filter_path(
const std::vector<PathPoint>& path)
const;
88 const std::vector<PathPoint>& left,
89 const std::vector<PathPoint>& right)
const;
98 void add_curvature_terms(
int num_path_points,
const std::function<
int(
int)>& circular_index,
99 const std::function<
void(
int,
int,
double)>& add_coefficient)
const;
108 const std::function<
void(
int,
int,
double)>& add_coefficient)
const;
119 const std::function<
void(
int,
int,
double)>& add_coefficient)
const;
136 std::vector<OSQPInt>& constraint_row_indices,
137 std::vector<OSQPInt>& constraint_col_indices,
138 std::vector<OSQPFloat>& constraint_lower_bounds,
139 std::vector<OSQPFloat>& constraint_upper_bounds,
140 int& constraint_count,
const std::vector<PathPoint>& left,
141 const std::vector<PathPoint>& right,
int num_path_points,
142 double safety_margin)
const;
156 std::vector<OSQPInt>& constraint_row_indices,
157 std::vector<OSQPInt>& constraint_col_indices,
158 std::vector<OSQPFloat>& constraint_lower_bounds,
159 std::vector<OSQPFloat>& constraint_upper_bounds,
160 int& constraint_count,
int num_path_points)
const;
175 const std::vector<OSQPInt>& row_indices,
176 const std::vector<OSQPInt>& col_indices,
int total_variables,
177 std::vector<OSQPFloat>& csc_x, std::vector<OSQPInt>& csc_i,
178 std::vector<OSQPInt>& csc_p)
const;
class that defines the path smoothing algorithm
void add_slack_penalty_terms(std::map< std::pair< int, int >, double > &quadratic_terms, int num_path_points, const std::function< void(int, int, double)> &add_coefficient) const
Adds penalty terms for slack variables to the quadratic objective function.
std::vector< PathPoint > smooth_path(const std::vector< PathPoint > &path, bool is_path_closed) const
Smooths a path by fitting a B-spline through the input points.
void convert_to_csc_format(const std::vector< OSQPFloat > &values, const std::vector< OSQPInt > &row_indices, const std::vector< OSQPInt > &col_indices, int total_variables, std::vector< OSQPFloat > &csc_x, std::vector< OSQPInt > &csc_i, std::vector< OSQPInt > &csc_p) const
Converts sparse matrix data from coordinate format to Compressed Sparse Column (CSC) format.
std::vector< PathPoint > osqp_optimization(const std::vector< PathPoint > ¢er, const std::vector< PathPoint > &left, const std::vector< PathPoint > &right) const
Optimizes a path using quadratic programming (OSQP) to balance smoothness, curvature,...
PathSmoothing()=default
Construct a new default Path Smoothing object.
void add_curvature_terms(int num_path_points, const std::function< int(int)> &circular_index, const std::function< void(int, int, double)> &add_coefficient) const
Adds curvature penalty terms to the quadratic objective function.
std::vector< PathPoint > filter_path(const std::vector< PathPoint > &path) const
Filters path points using a minimum spacing constraint.
PathSmoothingConfig config_
configuration of the smoothing algorithm
void add_slack_nonnegativity_constraints(std::vector< OSQPFloat > &constraint_values, std::vector< OSQPInt > &constraint_row_indices, std::vector< OSQPInt > &constraint_col_indices, std::vector< OSQPFloat > &constraint_lower_bounds, std::vector< OSQPFloat > &constraint_upper_bounds, int &constraint_count, int num_path_points) const
Adds non-negativity constraints for slack variables.
void add_boundary_constraints(std::vector< OSQPFloat > &constraint_values, std::vector< OSQPInt > &constraint_row_indices, std::vector< OSQPInt > &constraint_col_indices, std::vector< OSQPFloat > &constraint_lower_bounds, std::vector< OSQPFloat > &constraint_upper_bounds, int &constraint_count, const std::vector< PathPoint > &left, const std::vector< PathPoint > &right, int num_path_points, double safety_margin) const
Adds track boundary constraints to ensure the optimized path stays within the track.
PathSmoothing(PathSmoothingConfig config)
Construct a new Path Smoothing object with a given configuration.
void add_slack_penalty_terms(int num_path_points, const std::function< void(int, int, double)> &add_coefficient) const
Adds penalty terms for slack variables to the quadratic objective function.
std::vector< PathPoint > optimize_path(const std::vector< PathPoint > &path, const std::vector< PathPoint > &yellow_cones, const std::vector< PathPoint > &blue_cones) const
Optimizes a racing line path by fitting splines through track boundaries and applying quadratic progr...
Configuration parameters for the Path Smoothing class.