Galaxis Codebase  1.0.0
Team Galaxis software stack for the Carolo Cup 2023 - ROS2 based software
MapClasses.hpp
Go to the documentation of this file.
1 #ifndef MAP_CLASSES_HPP
2 #define MAP_CLASSES_HPP
3 
4 #include "galaxis/linatypes.hpp"
5 #include "utils/clock.hpp"
6 
7 #include "rclcpp/rclcpp.hpp"
8 
9 #include <vector>
10 #include <map>
11 #include <mutex>
12 
13 using namespace galaxis::lina;
14 
15 namespace map {
16  namespace classes {
17 
18  template <typename T>
19  class LinePoints {
20  private:
21  // Both Maps contain same information but in different representations therefore must be consistent
22  std::map<T, std::vector<T>> m_pointsXY;
23  std::map<T, std::vector<T>> m_pointsYX;
24 
25  std::mutex m_mtx;
26 
27  public:
29 
30  void clear() {
31  m_mtx.lock();
32 
33  m_pointsXY.clear();
34  m_pointsYX.clear();
35 
36  m_mtx.unlock();
37  }
38 
39  void insert(T x, T y) {
40  m_mtx.lock();
41 
42  auto itX = m_pointsXY.find(x);
43  if(itX == m_pointsXY.end()) {
44  // insert new vector
45  m_pointsXY.insert(std::pair<T, std::vector<T>>(x, std::vector<T>{ y }));
46  } else {
47  itX->second.push_back(y);
48  }
49 
50  auto itY = m_pointsYX.find(y);
51  if(itY == m_pointsYX.end()) {
52  // insert new vector
53  m_pointsYX.insert(std::pair<T, std::vector<T>>(y, std::vector<T>{ x }));
54  }
55  else {
56  itY->second.push_back(x);
57  }
58 
59  m_mtx.unlock();
60  }
61 
62  std::map<T, std::vector<T>>& getPointsXY() {
63  return m_pointsXY;
64  }
65  std::map<T, std::vector<T>>& getPointsYX() {
66  return m_pointsYX;
67  }
68  };
69 
70  template <typename T>
71  class LinesObject {
72  public:
76 
78  Eigen::Rotation2Df rotationMatrix;
79  Eigen::Rotation2Df reverseRotationMatrix;
80 
82 
84 
85  void clear() {
86  leftLine.clear();
87  centerLine.clear();
88  rightLine.clear();
89  }
90  };
91 
92  // Obstacles
93  class Obstacle {
94  protected:
95  rclcpp::Time _m_lastUpdateTime;
96  public:
97  rclcpp::Time const& get_last_update() const {
98  return _m_lastUpdateTime;
99  }
100  void update(rclcpp::Time const& lastUpdate) {
101  _m_lastUpdateTime = lastUpdate;
102  }
103  virtual Vector2f get_position_now() const = 0;
104  virtual Vector3f get_dimensions() const = 0;
105  };
106 
107  class StaticObstacle : public Obstacle {
108  private:
110  float m_sizeCM;
111  public:
112  StaticObstacle() = delete;
113  StaticObstacle(rclcpp::Time const& timestamp, Vector2f posCM, float sizeCM) : m_positionCM(posCM), m_sizeCM(sizeCM) {
114  update(timestamp);
115  }
116 
118  return m_positionCM;
119  }
120 
122  return Vector3f(m_sizeCM, m_sizeCM, m_sizeCM);
123  }
124 
125  float get_width() const {
126  return m_sizeCM;
127  }
128 
129  void update_position(rclcpp::Time const& timestamp, Vector2f const& posCM) {
130  m_positionCM = posCM;
131  update(timestamp);
132  }
133  };
134 
135  } // namespace classes
136 } // namespace map
137 
138 #endif
map::classes::StaticObstacle::m_sizeCM
float m_sizeCM
Definition: MapClasses.hpp:110
map::classes::Obstacle
Definition: MapClasses.hpp:93
map::classes::LinesObject
Definition: MapClasses.hpp:71
map::classes::LinesObject::rotationMatrix
Eigen::Rotation2Df rotationMatrix
Definition: MapClasses.hpp:78
map::classes::Obstacle::get_last_update
rclcpp::Time const & get_last_update() const
Definition: MapClasses.hpp:97
map::classes::LinePoints::getPointsYX
std::map< T, std::vector< T > > & getPointsYX()
Definition: MapClasses.hpp:65
map::classes::LinePoints::LinePoints
LinePoints()
Definition: MapClasses.hpp:28
map::classes::LinePoints::clear
void clear()
Definition: MapClasses.hpp:30
map::classes::LinesObject::reverseRotationMatrix
Eigen::Rotation2Df reverseRotationMatrix
Definition: MapClasses.hpp:79
galaxis::lina::Vector3f
Eigen::Vector3f Vector3f
Definition: linatypes.hpp:15
map::classes::Obstacle::update
void update(rclcpp::Time const &lastUpdate)
Definition: MapClasses.hpp:100
map::classes::LinesObject::centerLine
LinePoints< T > centerLine
Definition: MapClasses.hpp:74
clock.hpp
map::classes::LinePoints::m_pointsYX
std::map< T, std::vector< T > > m_pointsYX
Definition: MapClasses.hpp:23
map::classes::StaticObstacle::update_position
void update_position(rclcpp::Time const &timestamp, Vector2f const &posCM)
Definition: MapClasses.hpp:129
map::classes::LinePoints::m_pointsXY
std::map< T, std::vector< T > > m_pointsXY
Definition: MapClasses.hpp:22
map::classes::LinesObject::clear
void clear()
Definition: MapClasses.hpp:85
map::classes::LinePoints::getPointsXY
std::map< T, std::vector< T > > & getPointsXY()
Definition: MapClasses.hpp:62
galaxis::lina
Definition: linatypes.hpp:11
map::classes::Obstacle::_m_lastUpdateTime
rclcpp::Time _m_lastUpdateTime
Definition: MapClasses.hpp:95
map::classes::StaticObstacle::get_position_now
Vector2f get_position_now() const
Definition: MapClasses.hpp:117
map::classes::StaticObstacle::StaticObstacle
StaticObstacle(rclcpp::Time const &timestamp, Vector2f posCM, float sizeCM)
Definition: MapClasses.hpp:113
map::classes::StaticObstacle::get_width
float get_width() const
Definition: MapClasses.hpp:125
map::classes::LinePoints::insert
void insert(T x, T y)
Definition: MapClasses.hpp:39
map::classes::LinesObject::LinesObject
LinesObject()
Definition: MapClasses.hpp:83
map::classes::LinePoints
Definition: MapClasses.hpp:19
galaxis::lina::Vector2f
Eigen::Vector2f Vector2f
Definition: linatypes.hpp:14
linatypes.hpp
map::classes::StaticObstacle::get_dimensions
Vector3f get_dimensions() const
Definition: MapClasses.hpp:121
map::classes::LinesObject::rotateOrientation
double rotateOrientation
Definition: MapClasses.hpp:77
map::classes::LinesObject::rightLine
LinePoints< T > rightLine
Definition: MapClasses.hpp:75
map::classes::StaticObstacle
Definition: MapClasses.hpp:107
map
Definition: MapClasses.hpp:15
galaxis::lina::Vector2i
Eigen::Vector2i Vector2i
Definition: linatypes.hpp:13
map::classes::LinePoints::m_mtx
std::mutex m_mtx
Definition: MapClasses.hpp:25
map::classes::StaticObstacle::m_positionCM
Vector2f m_positionCM
Definition: MapClasses.hpp:109
map::classes::LinesObject::windowSize
Vector2i windowSize
Definition: MapClasses.hpp:81
map::classes::LinesObject::leftLine
LinePoints< T > leftLine
Definition: MapClasses.hpp:73