Galaxis Codebase  1.0.0
Team Galaxis software stack for the Carolo Cup 2023 - ROS2 based software
main_test.cpp File Reference
#include <unistd.h>
#include <Localization/Localizer.hpp>
#include <Decision/AutoPilot.hpp>
#include <polyfit/galaxis_polyfit.h>
#include <utils/poly.hpp>
Include dependency graph for main_test.cpp:

Go to the source code of this file.

Functions

double eval_poly (DynamicPolynom p_polynom, double p_x)
 
int main ()
 

Function Documentation

◆ eval_poly()

double eval_poly ( DynamicPolynom  p_polynom,
double  p_x 
)

Definition at line 32 of file main_test.cpp.

32  {
33  double value = 0.0;
34  double iValue;
35  for(size_t i = 0; i < p_polynom->size(); ++i) {
36  iValue = 1;
37  // x^i
38  for(size_t j = 0; j < i; ++j) {
39  iValue *= p_x;
40  }
41  value += p_polynom->at(i) * iValue;
42  }
43  return value;
44 }

Referenced by main().

Here is the caller graph for this function:

◆ main()

int main ( )

Definition at line 46 of file main_test.cpp.

46  {
47  std::vector<double> m_polynomPointsXVector;
48  std::vector<double> m_polynomPointsYVector;
49 
50  std::shared_ptr<DriveInformation_t> m_lastDriveInformationSPtr = std::make_shared<DriveInformation_t>();
51  rclcpp::Clock time;
52  m_lastDriveInformationSPtr->polynom = std::make_shared<std::vector<double>>();
53  m_lastDriveInformationSPtr->polynom->push_back(0);
54  m_lastDriveInformationSPtr->polynom->push_back(0);
55  m_lastDriveInformationSPtr->polynom->push_back(0);
56  m_lastDriveInformationSPtr->polynom->push_back(0.1);
57  m_lastDriveInformationSPtr->positionTimepoint.timestamp = time.now();
58  m_lastDriveInformationSPtr->positionTimepoint.speed = 1e9;
59  m_lastDriveInformationSPtr->positionTimepoint.orientation = 0;
60 
61  sleep(1);
62  std::shared_ptr<PositionTimepoint> positionTimepoint = std::make_shared<PositionTimepoint>();
63  positionTimepoint->timestamp = time.now();
64  positionTimepoint->speed = 1e9;
65  positionTimepoint->orientation = 0;
66 
67  // eval poly at estimated position // get time diff and multiply with velocity
68  // eval poly at estimated position // get time diff and multiply with velocity
69  auto timestamp = positionTimepoint->timestamp - m_lastDriveInformationSPtr->positionTimepoint.timestamp;
70  float drivenDistanceM = (m_lastDriveInformationSPtr->velocityReference * 1e9) / timestamp.nanoseconds(); // velocityReference is m/s (m/s * 1e9 = nm/s)
71 
72  // use drivenDistance as approximation of x-shift in polynom
73  Vector2f newPosition = Vector2f(drivenDistanceM, eval_poly(m_lastDriveInformationSPtr->polynom, drivenDistanceM)); // nm / 1e9 = m
74 
75  float gradient = static_cast<float>(galaxis::utils::calculate_gradient(m_lastDriveInformationSPtr->polynom, newPosition[0]));
76  float rotationClockwise = std::atan(gradient);
77  Eigen::Rotation2Df rotationMat(-rotationClockwise); // because Eigen is CC
78 
79  // get points of last polynom
80  // polynom is in meter => we want to get cm precision for new poly
81  for(float x = 0.01; x < 150 / 100.f; x += 0.01) {
82  // eval poly and direct shift
83  // calulate pos on polynom + shift to new position
84  Vector2f newPoint = Vector2f(x, eval_poly(m_lastDriveInformationSPtr->polynom, x)) - newPosition;
85  newPoint = rotationMat * newPoint;
86 
87  m_polynomPointsXVector.push_back(newPoint[0]);
88  m_polynomPointsYVector.push_back(newPoint[1]);
89  }
90 
91  // TODO reenable
92  std::cout << m_lastDriveInformationSPtr->polynom->at(0) << " + " << m_lastDriveInformationSPtr->polynom->at(1) << "x + " << m_lastDriveInformationSPtr->polynom->at(2) << "x^2 + " << m_lastDriveInformationSPtr->polynom->at(3) << "x^3" <<std::endl;
93 
94  m_lastDriveInformationSPtr->polynom = galaxis_polyfit(m_polynomPointsXVector, m_polynomPointsYVector, m_polynomPointsXVector.size() * 0.9, 20, 3);
95  std::cout << m_lastDriveInformationSPtr->polynom->at(0) << " + " << m_lastDriveInformationSPtr->polynom->at(1) << "x + " << m_lastDriveInformationSPtr->polynom->at(2) << "x^2 + " << m_lastDriveInformationSPtr->polynom->at(3) << "x^3" <<std::endl;
96 
97  return 0;
98 }

References galaxis::utils::calculate_gradient(), and eval_poly().

Here is the call graph for this function:
galaxis::lina::Vector2f
Eigen::Vector2f Vector2f
Definition: linatypes.hpp:14
galaxis::utils::calculate_gradient
float calculate_gradient(std::vector< float > const &p_polynomRef, float p_x)
Definition: poly.cpp:60
eval_poly
double eval_poly(DynamicPolynom p_polynom, double p_x)
Definition: main_test.cpp:32