Galaxis Codebase  1.0.0
Team Galaxis software stack for the Carolo Cup 2023 - ROS2 based software
poly.hpp
Go to the documentation of this file.
1 #ifndef _POLY_HPP_
2 #define _POLY_HPP_
3 
4 #include "control/pose.hpp"
5 
6 #include <vector>
7 #include <memory>
8 #include <tuple>
9 #include <Eigen/Dense>
10 #include <string>
11 
12 using namespace ::std;
13 using namespace ::galaxis;
14 using namespace ::galaxis::control;
15 
16 typedef std::shared_ptr<std::vector<double>> DynamicPolynom;
17 
18 namespace galaxis {
19 
20  typedef std::vector<float> polynom;
21  typedef std::tuple<float, float> interval;
22 
23  std::ostream& operator<<(std::ostream& strm, polynom const& poly);
24  std::ostream& operator<<(std::ostream& strm, interval const& interval);
25 
26  namespace utils {
27  float evaluate_polynom(polynom const& p_polynomRef, float p_x);
28  double evaluate_polynom(std::vector<double> const& p_polynomRef, double p_x);
29 
30  float calculate_gradient(std::vector<float> const& p_polynomRef, float p_x);
31  double calculate_gradient(std::vector<double> const& p_polynomRef, double p_x);
32  double calculate_gradient(DynamicPolynom p_polynomVecSPtr, double p_x);
33  }
34 
35 
36 
37  class PolySpline {
38  public:
39  std::vector<galaxis::interval> m_intervalVec;
40  std::vector<galaxis::polynom> m_polynomVec; // vector[0] + vector[1] * x^1 + ... + vector[n] * x^n
41 
42  PolySpline();
43  PolySpline(std::array<double,4> coeff, double max, double min);
44  void add_polynom(interval const& p_interval, polynom const& p_polynom);
45  void add_polynom(float lowerBound, float upperBound, polynom const& polynom);
46  float evaluate(float p_x) const;
47  void clear();
48 
49 
50  // TODO: add getter for polynom in specific interval
51  };
52 
57  bool isLeftEnabled = false;
58  bool isCenterEnabled = false;
59  bool isRightEnabled = false;
60  };
61 
62  float calculate_error_between_polyspline_point(shared_ptr<PolySpline> p_polySpline, Eigen::Vector2f& p_point);
63  float calculate_error_between_polyspline_point_square(shared_ptr<PolySpline> p_polySpline, Eigen::Vector2f const& p_point);
64  float calculate_error_between_polyspline_poseseries(shared_ptr<PolySpline> p_polySplineSPtr,
65  shared_ptr<galaxis::control::CarPoseSeries> p_poseSeriesSPtr,
66  shared_ptr<line_markings_reference_t> p_lineMarkings,
67  float cross_angle_weight, float cross_line_weight);
68 } // namespace galaxis
69 #endif
galaxis::calculate_error_between_polyspline_poseseries
float calculate_error_between_polyspline_poseseries(shared_ptr< PolySpline > p_polySplineSPtr, shared_ptr< galaxis::control::CarPoseSeries > p_poseSeriesSPtr, shared_ptr< line_markings_reference_t > p_lineMarkings, float cross_angle_weight, float cross_line_weight)
Definition: poly.cpp:136
galaxis::PolySpline::m_intervalVec
std::vector< galaxis::interval > m_intervalVec
Definition: poly.hpp:39
galaxis::line_markings_reference_t::center
PolySpline center
Definition: poly.hpp:54
DynamicPolynom
std::shared_ptr< std::vector< double > > DynamicPolynom
Definition: poly.hpp:16
galaxis::PolySpline
Definition: poly.hpp:37
galaxis::line_markings_reference_t::right
PolySpline right
Definition: poly.hpp:56
galaxis::utils::evaluate_polynom
float evaluate_polynom(polynom const &p_polynomRef, float p_x)
Definition: poly.cpp:50
galaxis::PolySpline::add_polynom
void add_polynom(interval const &p_interval, polynom const &p_polynom)
Definition: poly.cpp:198
galaxis::PolySpline::m_polynomVec
std::vector< galaxis::polynom > m_polynomVec
Definition: poly.hpp:40
galaxis::PolySpline::clear
void clear()
Definition: poly.cpp:219
galaxis::polynom
std::vector< float > polynom
Definition: poly.hpp:20
galaxis::PolySpline::evaluate
float evaluate(float p_x) const
Definition: poly.cpp:209
galaxis::line_markings_reference_t::isCenterEnabled
bool isCenterEnabled
Definition: poly.hpp:58
pose.hpp
galaxis::line_markings_reference_t
Definition: poly.hpp:53
galaxis::interval
std::tuple< float, float > interval
Definition: poly.hpp:21
galaxis::calculate_error_between_polyspline_point
float calculate_error_between_polyspline_point(shared_ptr< PolySpline > p_polySpline, Eigen::Vector2f &p_point)
galaxis::line_markings_reference_t::isLeftEnabled
bool isLeftEnabled
Definition: poly.hpp:57
galaxis
Definition: MapClasses.hpp:10
galaxis::calculate_error_between_polyspline_point_square
float calculate_error_between_polyspline_point_square(shared_ptr< PolySpline > p_polySpline, Eigen::Vector2f const &p_point)
galaxis::operator<<
std::ostream & operator<<(std::ostream &strm, polynom const &poly)
Definition: poly.cpp:11
galaxis::line_markings_reference_t::left
PolySpline left
Definition: poly.hpp:55
galaxis::lina::Vector2f
Eigen::Vector2f Vector2f
Definition: linatypes.hpp:14
galaxis::control
Definition: control.hpp:24
galaxis::PolySpline::PolySpline
PolySpline()
Definition: poly.cpp:187
galaxis::line_markings_reference_t::isRightEnabled
bool isRightEnabled
Definition: poly.hpp:59
galaxis::utils::calculate_gradient
float calculate_gradient(std::vector< float > const &p_polynomRef, float p_x)
Definition: poly.cpp:60