BusManager.cpp
Go to the documentation of this file.
1 
3 
4 namespace rokubimini
5 {
7 {
8  std::string setup_file;
9 
10  name_ = ros::this_node::getName().substr(1);
11  if (!load())
12  {
13  ROS_ERROR("[%s] Could not load bus configuration", name_.c_str());
14  return false;
15  }
16 
17  if (!startup())
18  {
19  ROS_WARN("[%s] Bus Manager could not startup", name_.c_str());
20  return false;
21  }
25  std::vector<std::shared_ptr<Rokubimini>> rokubiminis;
26  if (getRokubiminis().empty())
27  {
28  ROS_ERROR("[%s] No rokubimini available", name_.c_str());
29  return false;
30  }
32  options.callback_ = std::bind(&RokubiminiBusManager::update, this, std::placeholders::_1);
33  options.defaultPriority_ = 10; // this has high priority
34  options.name_ = "RokubiminiBusManager::updateWorker";
35  options.timeStep_ = loadTimeStep();
36  if (options.timeStep_ != 0)
37  {
38  if (!this->addWorker(options))
39  {
40  ROS_ERROR_STREAM("[RokubiminiBusManager] Worker " << options.name_ << "could not be added!");
41  return false;
42  }
43  }
44  return true;
45 }
46 
48 {
49  if (isRunning_)
50  {
51  ROS_WARN_STREAM("Cannot start up, Rokubimini Bus Manager is already running.");
52  return false;
53  }
54  ROS_DEBUG_STREAM("Starting up Rokubimini Bus Manager ...");
56  if (!startupCommunication())
57  {
59  return false;
60  }
61  setConfigMode();
63  setRunMode();
64  isRunning_ = true;
65  return true;
66 }
67 
69 {
70  ROS_DEBUG("[RokubiminiBusManager]: update called");
71  readBus();
73  writeToBus();
77  return true;
78 }
79 
81 {
82  shutdown();
83 }
84 
86 {
87  if (!isRunning_)
88  {
89  ROS_WARN_STREAM("Cannot shut down, Rokubimini Bus Manager is not running.");
90  return;
91  }
93  shutdownBus();
95  isRunning_ = false;
96 }
97 
98 bool RokubiminiBusManager::addRokubiminiToBus(const std::shared_ptr<Rokubimini>& rokubimini) const
99 {
100  return true;
101 };
103 {
104  if (!loadBusParameters())
105  {
106  ROS_ERROR("[%s] Could not load bus parameters", name_.c_str());
107  return false;
108  }
110  {
111  ROS_ERROR("[%s] Could not create rokubiminis from parameter server", name_.c_str());
112  return false;
113  }
114  return true;
115 }
116 
118 {
119  std::vector<std::string> keys;
120  std::string rokubimini_name;
121  nh_->getParamNames(keys);
122  for (const auto& key : keys)
123  {
124  // append only parameter names with "/bus_name/rokubiminis" and have "/name"
125  if (key.find(nh_->getNamespace() + "/rokubiminis") != std::string::npos && key.find("/name") != std::string::npos)
126  {
127  nh_->getParam(key, rokubimini_name);
128  ROS_DEBUG("[%s] Key is: %s and name is: %s", name_.c_str(), key.c_str(), rokubimini_name.c_str());
129  if (!createRokubimini(rokubimini_name))
130  {
131  ROS_ERROR("[%s] Could not create rokubimini", name_.c_str());
132  return false;
133  };
134  ROS_DEBUG("[%s] Successfully created rokubimini with name: %s", name_.c_str(), rokubimini_name.c_str());
135  }
136  }
137  return true;
138 }
139 } // namespace rokubimini
void updateProcessReading() const
Updates all Rokubimini instances with new measurements.
Definition: BusManager.hpp:497
bool init() override
Initializes the Bus Manager Node.
Definition: BusManager.hpp:103
std::vector< std::shared_ptr< Rokubimini > > getRokubiminis() const
Definition: BusManager.hpp:343
virtual bool load()
Loads the configuration of the bus (bus parameters and rokubiminis).
Definition: BusManager.cpp:102
virtual bool update(const bota_worker::WorkerEvent &event)
Updates with new values from/to the Rokubiminis.
Definition: BusManager.cpp:68
std::atomic< bool > isRunning_
Boolean that specifies if the Manager is already running.
Definition: BusManager.hpp:546
virtual bool createRokubimini(const std::string &rokubiminiName)=0
Creates an implementation-specific Rokubimini instance.
Definition: BusManager.hpp:220
void createRokubiminiRosPublishers() const
Creates ROS Publishers for each attached rokubimini.
Definition: BusManager.hpp:354
ROSCPP_DECL const std::string & getName()
#define ROS_WARN(...)
void createRokubiminiRosServices() const
Creates ROS Services for each attached rokubimini.
Definition: BusManager.hpp:368
virtual bool createRokubiminisFromParamServer()
Creates rokubiminis from the parameter server.
Definition: BusManager.cpp:117
virtual double loadTimeStep()=0
Loads the time_step from the Parameter Server.
void publishRosMessages() const
Publishes the ROS messages for each attached rokubimini.
Definition: BusManager.hpp:395
void startupWithoutCommunication() const
Starts up all Rokubimini devices before communication has been established by the Bus Manager...
Definition: BusManager.hpp:429
virtual bool loadBusParameters()=0
Loads bus-specific parameters from parameter server. It&#39;s pure virtual since it&#39;s implementation-spec...
virtual void readBus()
Reads the bus.
Definition: BusManager.hpp:196
virtual bool startupCommunication()
Starts the communication through the bus.
Definition: BusManager.hpp:100
std::string name_
The name of the bus.
Definition: BusManager.hpp:529
std::atomic< double > timeStep_
void shutdownWithCommunication() const
Shuts down every Rokubimini device after communication has been closed.
Definition: BusManager.hpp:465
virtual void setConfigMode()
Sets the devices controlled from the BusManager to config mode.
Definition: BusManager.hpp:208
void createRokubiminiRosDiagnostics() const
Creates ROS Diagnostics for each attached rokubimini.
Definition: BusManager.hpp:382
void publishRokubiminiRosDiagnostics() const
Publishes the ROS Diagnostics for each attached rokubimini.
Definition: BusManager.hpp:416
void cleanup() override
Cleans up the Bus Manager Node.
Definition: BusManager.cpp:80
#define ROS_WARN_STREAM(args)
NodeHandlePtr nh_
The internal NodeHandle variable.
Definition: BusManager.hpp:536
#define ROS_DEBUG_STREAM(args)
virtual bool addRokubiminiToBus(const std::shared_ptr< Rokubimini > &rokubimini) const
Adds a Rokubimini to Bus.
Definition: BusManager.cpp:98
bool addWorker(const std::string &name, const double timestep, bool(T::*fp)(const bota_worker::WorkerEvent &), T *obj, const int priority=0)
void startupWithCommunication() const
Starts up all Rokubimini devices after communication has been established from the Bus Manager...
Definition: BusManager.hpp:481
virtual void shutdownBus()
Shuts down the bus.
Definition: BusManager.hpp:173
virtual void shutdown()
Shuts down everything.
Definition: BusManager.cpp:85
virtual void publishBusManagerRosDiagnostics()=0
Publish the ROS Diagnostics for the Bus Manager. It&#39;s virtual since it&#39;s implementation specific...
virtual bool startup()
Starts the communication with all the Rokubimini devices.
Definition: BusManager.cpp:47
#define ROS_ERROR_STREAM(args)
virtual void setRunMode()
Sets the devices controlled from the BusManager to run mode.
Definition: BusManager.hpp:220
#define ROS_ERROR(...)
virtual void writeToBus()
Writes to the buses.
Definition: BusManager.hpp:185
#define ROS_DEBUG(...)


rokubimini_bus_manager
Author(s):
autogenerated on Sat Apr 15 2023 02:51:30