mars_lib  0.1.0.3dc76ee85e09
Modular and Robust Sensor-Fusion
sensor_manager.h
Go to the documentation of this file.
1 // Copyright (C) 2024 Christian Brommer and Thomas Jantos, Control of Networked Systems, University of Klagenfurt,
2 // Austria.
3 //
4 // All rights reserved.
5 //
6 // This software is licensed under the terms of the BSD-2-Clause-License with
7 // no commercial use allowed, the full terms of which are made available
8 // in the LICENSE file. No license in patents is granted.
9 //
10 // You can contact the author at <christian.brommer@ieee.org>
11 
12 #ifndef SENSORMANAGER_HPP
13 #define SENSORMANAGER_HPP
14 
16 #include <memory>
17 #include <vector>
18 
19 namespace mars
20 {
22 {
23 public:
24  std::vector<std::shared_ptr<SensorAbsClass>> sensor_list_;
25  SensorManager() = default;
26 
32  bool register_sensor(std::shared_ptr<SensorAbsClass> sensor)
33  {
34  // Check if sensor already exists
35  if (std::find(sensor_list_.begin(), sensor_list_.end(), sensor) != sensor_list_.end())
36  {
37  // Sensor is already registered
38  return false;
39  }
40 
41  sensor_list_.push_back(sensor);
42  std::cout << "Registered sensor [" << sensor->name_ << "] with Sensor Manager" << std::endl;
43  return true;
44  }
45 
52  bool remove_sensor(Buffer& buffer, std::shared_ptr<SensorAbsClass> sensor)
53  {
54  if (!does_sensor_exist(sensor))
55  {
56  // Sensor is not registered
57  return false;
58  }
59  // Deactive the sensor
60  this->deactivate_sensor(buffer, sensor);
61  // Remove the sensor from the list
62  sensor_list_.erase(std::remove(sensor_list_.begin(), sensor_list_.end(), sensor), sensor_list_.end());
63  std::cout << "Removed sensor [" << sensor->name_ << "] from Sensor Manager" << std::endl;
64  return true;
65  }
66 
70  void list_sensors()
71  {
72  std::cout << "Sensor Manager contains " << sensor_list_.size() << " sensors" << std::endl;
73  for (auto& sensor : sensor_list_)
74  {
75  std::cout << *sensor << std::endl;
76  }
77  }
78 
84  bool does_sensor_exist(std::shared_ptr<SensorAbsClass> sensor)
85  {
86  if (std::find(sensor_list_.begin(), sensor_list_.end(), sensor) != sensor_list_.end())
87  {
88  return true;
89  }
90  return false;
91  }
92 
99  bool deactivate_sensor(Buffer& buffer, std::shared_ptr<SensorAbsClass> sensor)
100  {
101  if (!does_sensor_exist(sensor))
102  {
103  // Sensor is not registered
104  return false;
105  }
106 
107  // Reset the sensor
108  sensor->do_update_ = false;
109  sensor->is_initialized_ = false;
110  sensor->ref_to_nav_given_ = false;
111 
112  // Call buffer to clear all entries of the sensor
113  if (buffer.RemoveSensorFromBuffer(sensor))
114  {
115  std::cout << "Removed sensor [" << sensor->name_ << "] from buffer" << std::endl;
116  }
117  else
118  {
119  std::cout << "Could not remove sensor [" << sensor->name_ << "] from buffer as buffer is empty" << std::endl;
120  return false;
121  }
122  return true;
123  }
124 
130  bool activate_sensor(std::shared_ptr<SensorAbsClass> sensor)
131  {
132  if (!does_sensor_exist(sensor))
133  {
134  // Sensor is not registered
135  return false;
136  }
137 
138  sensor->do_update_ = true;
139  std::cout << "Activated sensor [" << sensor->name_ << "]" << std::endl;
140  return true;
141  }
142 };
143 } // namespace mars
144 
145 #endif // SENSORMANAGER_HPP
BufferClass that holds mars::BufferEntryType elements and provides access methods.
Definition: buffer.h:35
bool RemoveSensorFromBuffer(const std::shared_ptr< SensorAbsClass > &sensor_handle)
RemoveSensorFromBuffer Removes all entrys that are associated with the given sensor handle.
Definition: sensor_manager.h:22
std::vector< std::shared_ptr< SensorAbsClass > > sensor_list_
Vector containing all registered sensors.
Definition: sensor_manager.h:24
void list_sensors()
list_sensors Print the information of all registered sensors
Definition: sensor_manager.h:70
SensorManager()=default
bool deactivate_sensor(Buffer &buffer, std::shared_ptr< SensorAbsClass > sensor)
deactivate_sensor Deactivate a sensor
Definition: sensor_manager.h:99
bool does_sensor_exist(std::shared_ptr< SensorAbsClass > sensor)
does_sensor_exist Check if a sensor is registered
Definition: sensor_manager.h:84
bool activate_sensor(std::shared_ptr< SensorAbsClass > sensor)
activate_sensor Activate a sensor
Definition: sensor_manager.h:130
bool register_sensor(std::shared_ptr< SensorAbsClass > sensor)
register_sensor Register a sensor with the sensor manager
Definition: sensor_manager.h:32
bool remove_sensor(Buffer &buffer, std::shared_ptr< SensorAbsClass > sensor)
remove_sensor Remove a sensor from the sensor manager
Definition: sensor_manager.h:52
Definition: buffer.h:27