Galaxis Codebase  1.0.0
Team Galaxis software stack for the Carolo Cup 2023 - ROS2 based software
PositionTimepointBuffer Class Reference

#include <Localizer.hpp>

Public Member Functions

 PositionTimepointBuffer (unsigned int p_size=200)
 
void add (PositionTimepoint const &element)
 
PositionTimepoint get_last_by_time (rclcpp::Time &timestamp)
 
PositionTimepoint get_last ()
 
bool is_empty ()
 

Private Attributes

boost::circular_buffer< PositionTimepoint > data
 
std::shared_mutex m_mutex
 
unsigned int dataSize = 0
 

Detailed Description

Definition at line 27 of file Localizer.hpp.

Constructor & Destructor Documentation

◆ PositionTimepointBuffer()

PositionTimepointBuffer::PositionTimepointBuffer ( unsigned int  p_size = 200)
inline

Definition at line 34 of file Localizer.hpp.

34  :
35  data(p_size), dataSize(p_size) {}

Member Function Documentation

◆ add()

void PositionTimepointBuffer::add ( PositionTimepoint const &  element)
inline

Definition at line 37 of file Localizer.hpp.

37  {
38  m_mutex.lock();
39 
40  if(data.full()) {
41  data.pop_front();
42  }
43  data.push_back(element);
44 
45  m_mutex.unlock();
46  }

Referenced by Localizer::add_position_timepoint(), Localizer::add_state(), and Localizer::init().

Here is the caller graph for this function:

◆ get_last()

PositionTimepoint PositionTimepointBuffer::get_last ( )
inline

Definition at line 76 of file Localizer.hpp.

76  {
77  m_mutex.lock_shared();
78  auto returnPoint = data.back();
79  m_mutex.unlock_shared();
80 
81  return returnPoint;
82  }

Referenced by Localizer::add_state(), and Localizer::get_latest_position_timepoint().

Here is the caller graph for this function:

◆ get_last_by_time()

PositionTimepoint PositionTimepointBuffer::get_last_by_time ( rclcpp::Time &  timestamp)
inline

Definition at line 48 of file Localizer.hpp.

48  {
49  m_mutex.lock_shared();
50 
51  if(data.empty()) {
52  log_warning("[Localizer] Position History Lookup failed. ");
53  throw std::runtime_error("Localizer.hpp/PositionTimepointBuffer: Lookup failed!");
54  }
55 
56  PositionTimepoint& element = data.back();
57  for(int i = data.size() - 2; i >= 0; --i) {
58  if(data[i].timestamp < timestamp) {
59  if(std::abs((timestamp - data[i].timestamp).nanoseconds()) < std::abs((timestamp - element.timestamp).nanoseconds())) {
60  element = data[i];
61  }
62  else {
63  // pass (element remains element)
64  }
65  m_mutex.unlock_shared();
66  return element;
67  }
68  element = data[i];
69  }
70 
71  m_mutex.unlock_shared();
72  log_warning("[Localizer] Position History Lookup fall back: ", std::to_string(data.at(data.size() - 1).timestamp.nanoseconds()), " ", std::to_string(timestamp.nanoseconds()), " - Use oldest \n");
73  return element;
74  }

References galaxis::utils::log_warning(), and PositionTimepoint::timestamp.

Referenced by Localizer::get_position_timepoint_by_time().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ is_empty()

bool PositionTimepointBuffer::is_empty ( )
inline

Definition at line 84 of file Localizer.hpp.

84  {
85  m_mutex.lock_shared();
86  bool isEmpty = data.empty();
87  m_mutex.unlock_shared();
88 
89  return isEmpty;
90  }

Referenced by Localizer::add_state(), and Localizer::is_empty().

Here is the caller graph for this function:

Member Data Documentation

◆ data

boost::circular_buffer<PositionTimepoint> PositionTimepointBuffer::data
private

Definition at line 29 of file Localizer.hpp.

◆ dataSize

unsigned int PositionTimepointBuffer::dataSize = 0
private

Definition at line 31 of file Localizer.hpp.

◆ m_mutex

std::shared_mutex PositionTimepointBuffer::m_mutex
private

Definition at line 30 of file Localizer.hpp.


The documentation for this class was generated from the following file:
PositionTimepointBuffer::data
boost::circular_buffer< PositionTimepoint > data
Definition: Localizer.hpp:29
galaxis::utils::log_warning
void log_warning(const Args &... args)
Definition: logger.hpp:41
PositionTimepoint::timestamp
rclcpp::Time timestamp
Definition: Localizer.hpp:20
PositionTimepointBuffer::dataSize
unsigned int dataSize
Definition: Localizer.hpp:31
PositionTimepointBuffer::m_mutex
std::shared_mutex m_mutex
Definition: Localizer.hpp:30
PositionTimepoint
Definition: Localizer.hpp:19