Manager.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include <vector>
4 #include <mutex>
5 #include <unordered_map>
6 #include <bota_worker/Worker.hpp>
7 
9 #include <rokubimini/setup/Rokubimini.hpp>
10 
13 using NodeHandlePtr = std::shared_ptr<ros::NodeHandle>;
14 namespace rokubimini
15 {
29 {
30 public:
40 
41  virtual ~BaseManager() = default;
42 
53  virtual bool loadSetup() = 0;
54 
65  virtual bool startup() = 0;
66 
77  virtual bool update() = 0;
78 
88  virtual void shutdown() = 0;
89 };
90 
106 {
107 public:
108  RokubiminiManager() = delete;
109 
128  RokubiminiManager(const bool standalone, const bool installSignalHandler, const double timeStep = 0.01,
129  const NodeHandlePtr nh = nullptr);
130 
131  ~RokubiminiManager() override = default;
132 
144  std::shared_ptr<Rokubimini> getRokubimini(const std::string& name) const;
145 
157  std::vector<std::shared_ptr<Rokubimini>> getRokubiminis() const;
158 
176  bool loadSetup() override;
177 
189  bool startup() override;
190 
203  bool update() override;
204 
217  void shutdown() override;
218 
229  void updateProcessReadings();
230 
242 
253 
262  void setNodeHandle(const std::shared_ptr<ros::NodeHandle>& nh) const;
263 
271  void createRokubiminiRosPublishers() const;
272 
280  void createRokubiminiRosServices() const;
281 
288  void publishRosMessages() const;
289 
290 protected:
299  bool addRokubimini(const std::shared_ptr<Rokubimini>& rokubimini);
300 
310  bool rokubiminiExists(const std::string& name) const;
311 
323  bool updateWorkerCb(const bota_worker::WorkerEvent& event);
324 
334  void requestShutdown();
335 
346 
354  bool loadBusManagersSetup();
355 
367  bool createAndConfigureRokubimini(const std::shared_ptr<rokubimini::setup::Rokubimini>& rokubiminiSetup);
368 
377  std::shared_ptr<bota_worker::Worker> updateWorker_{ nullptr };
378 
387  std::atomic<bool> isRunning_{ false };
388 
397  std::atomic<bool> shutdownRequested_{ false };
398 
407  std::vector<std::shared_ptr<Rokubimini>> rokubiminis_;
408  // std::unordered_map<std::unique_ptr<RokubiminiBusManager>, std::vector<std::unique_ptr<Rokubimini>>>
409  // mapOfRokubiminisToBusManagers_;
410 
418  std::vector<std::unique_ptr<RokubiminiBusManager>> busManagers_;
419 
429  void handleSignal(const int signum);
430 
431 private:
432  bool standalone_{ true };
433  double timeStep_{ 0.0 };
434  std::string configurationFile_{ "" };
436 };
437 } // namespace rokubimini
setup
rokubimini::RokubiminiManager::standalone_
bool standalone_
Definition: Manager.hpp:432
rokubimini::RokubiminiManager::update
bool update() override
Updates with new values from/to the Rokubiminis.
Definition: Manager.cpp:198
Worker.hpp
rokubimini::RokubiminiManager::shutdownRequested_
std::atomic< bool > shutdownRequested_
Boolean that specifies if shutdown has been requested.
Definition: Manager.hpp:397
rokubimini::RokubiminiManager::updateWorkerCb
bool updateWorkerCb(const bota_worker::WorkerEvent &event)
Callback method which when triggered calls the update() method.
Definition: Manager.cpp:267
rokubimini::RokubiminiManager::createRokubiminiRosPublishers
void createRokubiminiRosPublishers() const
Creates ROS Publishers for each attached rokubimini.
Definition: Manager.cpp:117
rokubimini::RokubiminiManager::configurationFile_
std::string configurationFile_
Definition: Manager.hpp:434
rokubimini::RokubiminiManager::updateProcessReadings
void updateProcessReadings()
Gets the Readings from each Rokubimini device.
Definition: Manager.cpp:212
NodeHandlePtr
std::shared_ptr< ros::NodeHandle > NodeHandlePtr
Setup.hpp
rokubimini::RokubiminiManager::shutdown
void shutdown() override
Shuts down everything.
Definition: Manager.cpp:227
rokubimini::BaseManager::shutdown
virtual void shutdown()=0
Shuts down the communication with the devices.
rokubimini::RokubiminiManager::busManagers_
std::vector< std::unique_ptr< RokubiminiBusManager > > busManagers_
Definition: Manager.hpp:418
rokubimini::RokubiminiManager::updateCommunicationManagerWriteMessages
void updateCommunicationManagerWriteMessages()
Instructs each BusManager to write the messages.
Definition: Manager.cpp:220
rokubimini::RokubiminiManager::getRokubimini
std::shared_ptr< Rokubimini > getRokubimini(const std::string &name) const
Returns the Rokubimini instance with name name.
Definition: Manager.cpp:18
rokubimini::RokubiminiManager::isRunning_
std::atomic< bool > isRunning_
Boolean that specifies if the Manager is already running.
Definition: Manager.hpp:387
rokubimini::RokubiminiManager::handleSignal
void handleSignal(const int signum)
Handles the signal received. Specifically requests shuts down if the signum is SIGSEGV.
Definition: Manager.cpp:276
rokubimini::BaseManager::loadSetup
virtual bool loadSetup()=0
Loads the Setup.
rokubimini::RokubiminiManager::addRokubimini
bool addRokubimini(const std::shared_ptr< Rokubimini > &rokubimini)
Adds a Rokubimini instance to the list.
Definition: Manager.cpp:87
rokubimini::RokubiminiManager
The Rokubimini Manager class.
Definition: Manager.hpp:105
rokubimini::RokubiminiManager::loadBusManagersSetup
bool loadBusManagersSetup()
Calls the loadSetup() of each Bus Manager.
Definition: Manager.cpp:63
rokubimini::RokubiminiManager::requestShutdown
void requestShutdown()
Sets a flag that represents that shutdown has been requested.
Definition: Manager.cpp:271
rokubimini
rokubimini::RokubiminiManager::createRokubiminisFromSetup
bool createRokubiminisFromSetup(const rokubimini::setup::SetupPtr &setup)
Creates the Rokubimini instances from a Setup.
Definition: Manager.cpp:50
rokubimini::setup::SetupPtr
std::shared_ptr< Setup > SetupPtr
rokubimini::RokubiminiManager::publishRosMessages
void publishRosMessages() const
Publishes the ROS messages for each attached rokubimini.
Definition: Manager.cpp:131
rokubimini::RokubiminiManager::rokubiminiExists
bool rokubiminiExists(const std::string &name) const
Decides if a specific Rokubimini instance exists in the list.
Definition: Manager.cpp:98
bota_worker::WorkerEvent
Rokubimini.hpp
rokubimini::RokubiminiManager::loadSetup
bool loadSetup() override
Loads the Setup from the parameter server.
Definition: Manager.cpp:40
rokubimini::RokubiminiManager::rokubiminis_
std::vector< std::shared_ptr< Rokubimini > > rokubiminis_
Definition: Manager.hpp:407
rokubimini::RokubiminiManager::timeStep_
double timeStep_
Definition: Manager.hpp:433
rokubimini::RokubiminiManager::createAndConfigureRokubimini
bool createAndConfigureRokubimini(const std::shared_ptr< rokubimini::setup::Rokubimini > &rokubiminiSetup)
Creates an implementation-specific Rokubimini instance (through the rokubimini_factory),...
rokubimini::RokubiminiManager::~RokubiminiManager
~RokubiminiManager() override=default
rokubimini::BaseManager::~BaseManager
virtual ~BaseManager()=default
rokubimini::BaseManager
The Base Manager class.
Definition: Manager.hpp:28
rokubimini::RokubiminiManager::nh_
NodeHandlePtr nh_
Definition: Manager.hpp:435
rokubimini::BaseManager::startup
virtual bool startup()=0
Starts up the communication with the devices.
rokubimini::BaseManager::BaseManager
BaseManager()
Default constructor.
Definition: Manager.hpp:39
rokubimini::RokubiminiManager::setNodeHandle
void setNodeHandle(const std::shared_ptr< ros::NodeHandle > &nh) const
Sets the ROS NodeHandle to each rokubimini.
Definition: Manager.cpp:110
rokubimini::RokubiminiManager::RokubiminiManager
RokubiminiManager()=delete
rokubimini::RokubiminiManager::updateWorker_
std::shared_ptr< bota_worker::Worker > updateWorker_
A Worker instance that handles the update process.
Definition: Manager.hpp:377
rokubimini::RokubiminiManager::updateCommunicationManagerReadMessages
void updateCommunicationManagerReadMessages()
Instructs each BusManager to read the messages.
Definition: Manager.cpp:205
BusManager.hpp
rokubimini::RokubiminiManager::getRokubiminis
std::vector< std::shared_ptr< Rokubimini > > getRokubiminis() const
Definition: Manager.cpp:30
rokubimini::RokubiminiManager::createRokubiminiRosServices
void createRokubiminiRosServices() const
Creates ROS Services for each attached rokubimini.
Definition: Manager.cpp:124
rokubimini::RokubiminiManager::startup
bool startup() override
Starts the communication with all the Rokubimini devices.
Definition: Manager.cpp:139
rokubimini::BaseManager::update
virtual bool update()=0
Updates (Readings) the communication with the devices.


rokubimini_manager
Author(s):
autogenerated on Wed Mar 3 2021 03:52:22