Formula Student Autonomous Systems
The code for the main driverless system
Loading...
Searching...
No Matches
smoothing.hpp
Go to the documentation of this file.
1#ifndef SRC_PLANNING_INCLUDE_PLANNING_SMOOTHING2_HPP_
2#define SRC_PLANNING_INCLUDE_PLANNING_SMOOTHING2_HPP_
3
4#include <osqp.h>
5
6#include <Eigen/Dense>
7#include <cmath>
8#include <functional>
9#include <map>
10#include <vector>
11
14#include "utils/splines.hpp"
15
17
23public:
28 PathSmoothing() = default;
29
34 explicit PathSmoothing(PathSmoothingConfig config) : config_(config) {}
35
43 std::vector<PathPoint> smooth_path(const std::vector<PathPoint>& path, bool is_path_closed) const;
44
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;
59
60private:
66
73 std::vector<PathPoint> filter_path(const std::vector<PathPoint>& path) const;
74
87 std::vector<PathPoint> osqp_optimization(const std::vector<PathPoint>& center,
88 const std::vector<PathPoint>& left,
89 const std::vector<PathPoint>& right) const;
90
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;
100
107 void add_slack_penalty_terms(int num_path_points,
108 const std::function<void(int, int, double)>& add_coefficient) const;
109
117 void add_slack_penalty_terms(std::map<std::pair<int, int>, double>& quadratic_terms,
118 int num_path_points,
119 const std::function<void(int, int, double)>& add_coefficient) const;
120
135 void add_boundary_constraints(std::vector<OSQPFloat>& constraint_values,
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;
143
155 void add_slack_nonnegativity_constraints(std::vector<OSQPFloat>& constraint_values,
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;
161
174 void convert_to_csc_format(const std::vector<OSQPFloat>& values,
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;
179};
180
181#endif // SRC_PLANNING_INCLUDE_PLANNING_SMOOTHING2_HPP_
class that defines the path smoothing algorithm
Definition smoothing.hpp:22
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.
Definition smoothing.cpp:3
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 > &center, 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.
Definition smoothing.cpp:42
std::vector< PathPoint > filter_path(const std::vector< PathPoint > &path) const
Filters path points using a minimum spacing constraint.
Definition smoothing.cpp:31
PathSmoothingConfig config_
configuration of the smoothing algorithm
Definition smoothing.hpp:65
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.
Definition smoothing.cpp:89
PathSmoothing(PathSmoothingConfig config)
Construct a new Path Smoothing object with a given configuration.
Definition smoothing.hpp:34
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.
Definition smoothing.cpp:78
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...
Definition smoothing.cpp:14
Configuration parameters for the Path Smoothing class.