10 #include <rclcpp/rclcpp.hpp>
12 #include <boost/circular_buffer.hpp>
23 double orientation = 0;
29 boost::circular_buffer<PositionTimepoint>
data;
31 unsigned int dataSize = 0;
35 data(p_size), dataSize(p_size) {}
43 data.push_back(element);
49 m_mutex.lock_shared();
52 log_warning(
"[Localizer] Position History Lookup failed. ");
53 throw std::runtime_error(
"Localizer.hpp/PositionTimepointBuffer: Lookup failed!");
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())) {
65 m_mutex.unlock_shared();
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");
77 m_mutex.lock_shared();
78 auto returnPoint = data.back();
79 m_mutex.unlock_shared();
85 m_mutex.lock_shared();
86 bool isEmpty = data.empty();
87 m_mutex.unlock_shared();
97 void init(rclcpp::Time& timestamp,
double orientationRad);
99 void add_position_timepoint(rclcpp::Time& timestamp,
galaxis::lina::Vector2f positionMillimeter,
double speedMillimeterPerSec,
double orientationRad);
100 void add_state(rclcpp::Time& timestamp,
double speedMillimeterPerSec,
double orientationRad);
102 std::shared_ptr<PositionTimepoint> get_latest_position_timepoint();
103 std::shared_ptr<PositionTimepoint> get_position_timepoint_by_time(rclcpp::Time& timestamp);
109 #endif // LOCALIZER_HPP