Rokubimini.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include <atomic>
4 #include <functional>
5 #include <mutex>
6 #include <string>
7 
8 #include <rokubimini/Reading.hpp>
13 #include <utility>
14 
17 #include <ros/node_handle.h>
18 
19 namespace rokubimini
20 {
28 {
29 public:
30  using NodeHandlePtr = std::shared_ptr<ros::NodeHandle>;
31  using DiagnosticsUpdaterPtr = std::shared_ptr<diagnostic_updater::Updater>;
32  using RosPublisherPtr = std::shared_ptr<ros::Publisher>;
33  using TimerPtr = std::shared_ptr<ros::Timer>;
34  using ReadingCb = std::function<void(const std::string&, const Reading&)>;
35  using ErrorCb = std::function<void(const std::string&)>;
36  using ErrorRecoveredCb = std::function<void(const std::string&)>;
37  using FatalCb = std::function<void(const std::string&)>;
38  using FatalRecoveredCb = std::function<void(const std::string&)>;
39  using DeviceDisconnectedCb = std::function<void(const std::string&)>;
40  using DeviceReconnectedCb = std::function<void(const std::string&)>;
41 
42  // Anonymous callbacks do not include the name of the device.
43  using AnonymousReadingCb = std::function<void(const Reading&)>;
44  using AnonymousErrorCb = std::function<void(void)>;
45 
52  Rokubimini() = default;
53 
60  Rokubimini(const std::string& name, NodeHandlePtr nh) : name_(name), nh_(std::move(nh)){ /* do nothing */ };
61  virtual ~Rokubimini() = default;
62 
70  std::string getName() const
71  {
72  return name_;
73  }
74 
83  {
84  return configuration_;
85  }
86 
95  {
96  return configuration_;
97  }
98 
107  void addReadingCb(const ReadingCb& readingCb, const int priority = 0)
108  {
109  readingCbs_.insert({ priority, readingCb });
110  }
111 
120  void addErrorCb(const ErrorCb& errorCb, const int priority = 0)
121  {
122  errorCbs_.insert({ priority, errorCb });
123  }
124 
133  void addErrorRecoveredCb(const ErrorRecoveredCb& errorRecoveredCb, const int priority = 0)
134  {
135  errorRecoveredCbs_.insert({ priority, errorRecoveredCb });
136  }
137 
146  void addFatalCb(const FatalCb& fatalCb, const int priority = 0)
147  {
148  fatalCbs_.insert({ priority, fatalCb });
149  }
150 
159  void addFatalRecoveredCb(const FatalRecoveredCb& fatalRecoveredCb, const int priority = 0)
160  {
161  fatalRecoveredCbs_.insert({ priority, fatalRecoveredCb });
162  }
163 
173  {
174  deviceDisconnectedCbs_.insert({ priority, deviceDisconnectedCb });
175  }
176 
186  {
187  deviceReconnectedCbs_.insert({ priority, deviceReconnectedCb });
188  }
189 
198 
208 
218  virtual void updateProcessReading() = 0;
219 
230  virtual void shutdownWithCommunication() = 0;
231 
242  virtual void shutdownWithoutCommunication(){ /* do nothing */ };
243 
252  void clearGoalStateEnum();
253 
260  void errorCb();
261 
268  void errorRecoveredCb();
269 
277  bool deviceIsInErrorState();
278 
285  void fatalCb();
286 
293  void fatalRecoveredCb();
294 
302  bool deviceIsInFatalState();
303 
310  void deviceDisconnectedCb();
311 
318  void deviceReconnectedCb();
319 
326  virtual bool deviceIsMissing() const = 0;
327 
337  {
338  return statusword_;
339  }
340 
351  virtual bool getSerialNumber(unsigned int& serialNumber) = 0;
352 
364  virtual bool getForceTorqueSamplingRate(int& samplingRate) = 0;
365 
377  virtual bool setForceTorqueFilter(const configuration::ForceTorqueFilter& filter) = 0;
378 
389  virtual bool setAccelerationFilter(const unsigned int filter) = 0;
390 
401  virtual bool setAngularRateFilter(const unsigned int filter) = 0;
402 
413  virtual bool setAccelerationRange(const unsigned int range) = 0;
414 
425  virtual bool setAngularRateRange(const unsigned int range) = 0;
426 
437  virtual bool setForceTorqueOffset(const Eigen::Matrix<double, 6, 1>& forceTorqueOffset) = 0;
438 
449  virtual bool setSensorConfiguration(const configuration::SensorConfiguration& sensorConfiguration) = 0;
450 
461  virtual bool setSensorCalibration(const calibration::SensorCalibration& sensorCalibration) = 0;
462 
472  virtual bool saveConfigParameter() = 0;
473 
481  Reading getReading() const;
482 
491  void getReading(Reading& reading) const;
492 
506  void setNodeHandle(const NodeHandlePtr& nh)
507  {
508  nh_ = nh;
509  }
510 
518  virtual void createRosPublishers() = 0;
519 
526  virtual void createRosServices() = 0;
527 
536  virtual void publishRosMessages() = 0;
537 
545  virtual void load();
546 
554  std::string getProductName() const
555  {
556  return productName_;
557  }
558 
566  virtual void createRosDiagnostics() = 0;
567 
576  virtual void publishRosDiagnostics() = 0;
577 
578 protected:
587  virtual void preSetupConfiguration() = 0;
588 
597  virtual void postSetupConfiguration() = 0;
598 
609  void setStatusword(Statusword& statusword);
610 
617  static constexpr double NAN_VALUE = std::numeric_limits<double>::quiet_NaN();
618 
625  std::string name_;
626 
634 
642 
649  std::atomic<bool> statuswordRequested_{ false };
650 
657  mutable std::recursive_mutex readingMutex_;
658 
666 
674 
681  std::string productName_;
682 
689  std::multimap<int, ReadingCb, std::greater<int>> readingCbs_;
690 
697  std::multimap<int, ErrorCb, std::greater<int>> errorCbs_;
698 
705  std::multimap<int, ErrorRecoveredCb, std::greater<int>> errorRecoveredCbs_;
706 
713  std::multimap<int, FatalCb, std::greater<int>> fatalCbs_;
714 
721  std::multimap<int, FatalRecoveredCb, std::greater<int>> fatalRecoveredCbs_;
722 
729  std::multimap<int, DeviceDisconnectedCb, std::greater<int>> deviceDisconnectedCbs_;
730 
737  std::multimap<int, DeviceReconnectedCb, std::greater<int>> deviceReconnectedCbs_;
738 
746 
754 
762 };
763 
764 } // namespace rokubimini
rokubimini::Rokubimini::DeviceDisconnectedCb
std::function< void(const std::string &)> DeviceDisconnectedCb
Definition: Rokubimini.hpp:39
rokubimini::Rokubimini::setAngularRateFilter
virtual bool setAngularRateFilter(const unsigned int filter)=0
Sets an angular rate filter to the device. It's virtual since it's implementation-specific.
rokubimini::Rokubimini::deviceIsInErrorState
bool deviceIsInErrorState()
Checks if the device is in error state.
Definition: Rokubimini.cpp:97
rokubimini::Rokubimini::startupWithoutCommunication
void startupWithoutCommunication()
Starts up a Rokubimini device before communication has been established by the BusManager.
Definition: Rokubimini.cpp:71
node_handle.h
rokubimini::Rokubimini::statuswordRequested_
std::atomic< bool > statuswordRequested_
Flag indicating if a statusword has been actively requested.
Definition: Rokubimini.hpp:649
rokubimini::Rokubimini::dataFlagsDiagnosticsPublisher_
RosPublisherPtr dataFlagsDiagnosticsPublisher_
The Publisher for publishing Data Flags Diagnostics.
Definition: Rokubimini.hpp:761
rokubimini::Rokubimini::addDeviceDisconnectedCb
void addDeviceDisconnectedCb(const DeviceDisconnectedCb &deviceDisconnectedCb, const int priority=0)
Adds a device disconnencted callback to a list.
Definition: Rokubimini.hpp:172
SensorConfiguration.hpp
Statusword.hpp
rokubimini::Rokubimini::getConfiguration
configuration::Configuration & getConfiguration()
Non-const version of getConfiguration() const. Gets the Configuration of the device.
Definition: Rokubimini.hpp:82
rokubimini::Rokubimini::setForceTorqueOffset
virtual bool setForceTorqueOffset(const Eigen::Matrix< double, 6, 1 > &forceTorqueOffset)=0
Sets a force torque offset to the device. It's virtual since it's implementation-specific.
rokubimini::Rokubimini::reading_
Reading reading_
The reading of the device.
Definition: Rokubimini.hpp:665
rokubimini::Rokubimini::getSerialNumber
virtual bool getSerialNumber(unsigned int &serialNumber)=0
Gets the serial number of the device. It's virtual since it's implementation-specific.
rokubimini::Rokubimini::setAccelerationFilter
virtual bool setAccelerationFilter(const unsigned int filter)=0
Sets an acceleration filter to the device. It's virtual since it's implementation-specific.
rokubimini::Rokubimini::addDeviceReconnectedCb
void addDeviceReconnectedCb(const DeviceReconnectedCb &deviceReconnectedCb, const int priority=0)
Adds a device reconnected callback to a list.
Definition: Rokubimini.hpp:185
rokubimini::Rokubimini::load
virtual void load()
Loads the rokubimini configuration from the parameter server.
Definition: Rokubimini.cpp:8
rokubimini::Rokubimini
Class representing a rokubi mini device.
Definition: Rokubimini.hpp:27
rokubimini::Rokubimini::getName
std::string getName() const
Gets the name of the device.
Definition: Rokubimini.hpp:70
rokubimini::Rokubimini::errorRecoveredCb
void errorRecoveredCb()
Calls the callbacks in the error recovered callbacks list.
Definition: Rokubimini.cpp:88
rokubimini::Rokubimini::fatalRecoveredCb
void fatalRecoveredCb()
Calls the callbacks in the fatal recovered callbacks list.
Definition: Rokubimini.cpp:111
rokubimini::Rokubimini::postSetupConfiguration
virtual void postSetupConfiguration()=0
Post-setup configuration hook.
rokubimini::Rokubimini::publishRosMessages
virtual void publishRosMessages()=0
Publishes ROS messages with data from the rokubimini device. It's virtual because it's implementation...
rokubimini::Rokubimini::startupWithCommunication
void startupWithCommunication()
Starts up a Rokubimini device after communication has been established.
Definition: Rokubimini.cpp:24
rokubimini::Rokubimini::dataFlagsDiagnosticsTimer_
TimerPtr dataFlagsDiagnosticsTimer_
A timer for running the Data Flags Diagnostics update callback.
Definition: Rokubimini.hpp:753
rokubimini::Rokubimini::setForceTorqueFilter
virtual bool setForceTorqueFilter(const configuration::ForceTorqueFilter &filter)=0
Sets a force torque filter to the device. It's virtual since it's implementation-specific.
rokubimini::Rokubimini::getReading
Reading getReading() const
Gets the reading from the Rokubimini device.
Definition: Rokubimini.cpp:179
rokubimini::Rokubimini::fatalCb
void fatalCb()
Calls the callbacks in the fatal callbacks list.
Definition: Rokubimini.cpp:103
rokubimini::Rokubimini::productName_
std::string productName_
The product name of the rokubimini.
Definition: Rokubimini.hpp:681
publisher.h
rokubimini::Rokubimini::addErrorCb
void addErrorCb(const ErrorCb &errorCb, const int priority=0)
Adds an error callback to a list.
Definition: Rokubimini.hpp:120
rokubimini::Rokubimini::Rokubimini
Rokubimini(const std::string &name, NodeHandlePtr nh)
Definition: Rokubimini.hpp:60
diagnostic_updater.h
rokubimini::Reading
Class representing the readings received from the rokubi mini devices.
Definition: Reading.hpp:35
rokubimini::Rokubimini::createRosPublishers
virtual void createRosPublishers()=0
Creates ROS publishers for the rokubimini device. It's virtual because it's implementation specific.
rokubimini::Rokubimini::shutdownWithCommunication
virtual void shutdownWithCommunication()=0
Shuts down a Rokubimini device before communication has been closed.
rokubimini::Rokubimini::addFatalCb
void addFatalCb(const FatalCb &fatalCb, const int priority=0)
Adds an fatal callback to a list.
Definition: Rokubimini.hpp:146
rokubimini::Rokubimini::TimerPtr
std::shared_ptr< ros::Timer > TimerPtr
Definition: Rokubimini.hpp:33
rokubimini::Rokubimini::name_
std::string name_
The name of the device.
Definition: Rokubimini.hpp:625
rokubimini::Rokubimini::Rokubimini
Rokubimini()=default
Default constructor.
rokubimini::Rokubimini::addReadingCb
void addReadingCb(const ReadingCb &readingCb, const int priority=0)
Adds a reading callback to a list.
Definition: Rokubimini.hpp:107
rokubimini::configuration::ForceTorqueFilter
Class holding the force-torque filter settings.
Definition: ForceTorqueFilter.hpp:17
rokubimini::Rokubimini::fatalCbs_
std::multimap< int, FatalCb, std::greater< int > > fatalCbs_
Definition: Rokubimini.hpp:713
rokubimini::Rokubimini::deviceDisconnectedCb
void deviceDisconnectedCb()
Calls the callbacks in the device disconnected callbacks list.
Definition: Rokubimini.cpp:126
rokubimini::Rokubimini::setSensorCalibration
virtual bool setSensorCalibration(const calibration::SensorCalibration &sensorCalibration)=0
Sets a sensor calibration to the device. It's virtual since it's implementation-specific.
rokubimini
Tests Configuration.
Definition: ForceTorqueCalibration.hpp:5
ForceTorqueFilter.hpp
rokubimini::Rokubimini::DeviceReconnectedCb
std::function< void(const std::string &)> DeviceReconnectedCb
Definition: Rokubimini.hpp:40
rokubimini::Rokubimini::statusword_
Statusword statusword_
The current statusword.
Definition: Rokubimini.hpp:641
rokubimini::Rokubimini::deviceIsMissing
virtual bool deviceIsMissing() const =0
Checks if the device is missing.
rokubimini::Rokubimini::deviceDisconnectedCbs_
std::multimap< int, DeviceDisconnectedCb, std::greater< int > > deviceDisconnectedCbs_
Definition: Rokubimini.hpp:729
rokubimini::Rokubimini::updateProcessReading
virtual void updateProcessReading()=0
Updates the Rokubimini object with new measurements.
rokubimini::Rokubimini::AnonymousErrorCb
std::function< void(void)> AnonymousErrorCb
Definition: Rokubimini.hpp:44
rokubimini::Rokubimini::errorCb
void errorCb()
Calls the callbacks in the error callbacks list.
Definition: Rokubimini.cpp:80
rokubimini::Rokubimini::errorRecoveredCbs_
std::multimap< int, ErrorRecoveredCb, std::greater< int > > errorRecoveredCbs_
Definition: Rokubimini.hpp:705
rokubimini::Rokubimini::getStatusword
Statusword getStatusword() const
Gets the statusword of the device.
Definition: Rokubimini.hpp:336
rokubimini::Rokubimini::RosPublisherPtr
std::shared_ptr< ros::Publisher > RosPublisherPtr
Definition: Rokubimini.hpp:32
rokubimini::Rokubimini::ErrorRecoveredCb
std::function< void(const std::string &)> ErrorRecoveredCb
Definition: Rokubimini.hpp:36
rokubimini::Rokubimini::connectionStatusUpdater_
DiagnosticsUpdaterPtr connectionStatusUpdater_
The Connection Status diagnostics updater.
Definition: Rokubimini.hpp:745
rokubimini::Rokubimini::ErrorCb
std::function< void(const std::string &)> ErrorCb
Definition: Rokubimini.hpp:35
rokubimini::Rokubimini::nh_
NodeHandlePtr nh_
The node handle of the ROS node, used by the publishers.
Definition: Rokubimini.hpp:673
rokubimini::Rokubimini::errorCbs_
std::multimap< int, ErrorCb, std::greater< int > > errorCbs_
Definition: Rokubimini.hpp:697
rokubimini::Rokubimini::getProductName
std::string getProductName() const
Gets the product name of the device.
Definition: Rokubimini.hpp:554
rokubimini::Rokubimini::createRosDiagnostics
virtual void createRosDiagnostics()=0
Creates ROS diagnostics for the rokubimini device. It's virtual because it's implementation specific.
rokubimini::Rokubimini::getConfiguration
const configuration::Configuration & getConfiguration() const
Definition: Rokubimini.hpp:94
rokubimini::Rokubimini::setStatusword
void setStatusword(Statusword &statusword)
Sets the statusword of the device.
Definition: Rokubimini.cpp:191
rokubimini::configuration::Configuration
Class holding the configuration of the sensor.
Definition: Configuration.hpp:24
Configuration.hpp
std
rokubimini::Rokubimini::~Rokubimini
virtual ~Rokubimini()=default
rokubimini::Rokubimini::shutdownWithoutCommunication
virtual void shutdownWithoutCommunication()
Definition: Rokubimini.hpp:242
rokubimini::Rokubimini::NAN_VALUE
static constexpr double NAN_VALUE
NaN abbreviation for convenience.
Definition: Rokubimini.hpp:617
rokubimini::Rokubimini::deviceIsInFatalState
bool deviceIsInFatalState()
Checks if the device is in fatal state.
Definition: Rokubimini.cpp:120
rokubimini::configuration::SensorConfiguration
Class holding the sensor configuration settings.
Definition: SensorConfiguration.hpp:17
rokubimini::Rokubimini::publishRosDiagnostics
virtual void publishRosDiagnostics()=0
Publishes ROS diagnostics from the rokubimini device. It's virtual because it's implementation specif...
rokubimini::Rokubimini::AnonymousReadingCb
std::function< void(const Reading &)> AnonymousReadingCb
Definition: Rokubimini.hpp:43
rokubimini::Rokubimini::preSetupConfiguration
virtual void preSetupConfiguration()=0
Pre-setup configuration hook.
rokubimini::Rokubimini::setNodeHandle
void setNodeHandle(const NodeHandlePtr &nh)
Sets the nodeHandle of the device.
Definition: Rokubimini.hpp:506
rokubimini::Rokubimini::setAngularRateRange
virtual bool setAngularRateRange(const unsigned int range)=0
Sets an angular rate range to the device. It's virtual since it's implementation-specific.
rokubimini::Rokubimini::addErrorRecoveredCb
void addErrorRecoveredCb(const ErrorRecoveredCb &errorRecoveredCb, const int priority=0)
Adds an error recovered callback to a list.
Definition: Rokubimini.hpp:133
rokubimini::Rokubimini::FatalCb
std::function< void(const std::string &)> FatalCb
Definition: Rokubimini.hpp:37
rokubimini::Rokubimini::getForceTorqueSamplingRate
virtual bool getForceTorqueSamplingRate(int &samplingRate)=0
Gets the force torque sampling rate of the device. It's virtual since it's implementation-specific.
rokubimini::Rokubimini::configuration_
configuration::Configuration configuration_
The Configuration of the device.
Definition: Rokubimini.hpp:633
rokubimini::calibration::SensorCalibration
The SensorCalibration class is used for holding the calibration information of each rokubi mini senso...
Definition: SensorCalibration.hpp:16
rokubimini::Rokubimini::readingMutex_
std::recursive_mutex readingMutex_
The mutex for accessing the reading.
Definition: Rokubimini.hpp:657
rokubimini::Rokubimini::setAccelerationRange
virtual bool setAccelerationRange(const unsigned int range)=0
Sets an acceleration range to the device. It's virtual since it's implementation-specific.
rokubimini::Rokubimini::fatalRecoveredCbs_
std::multimap< int, FatalRecoveredCb, std::greater< int > > fatalRecoveredCbs_
Definition: Rokubimini.hpp:721
rokubimini::Rokubimini::createRosServices
virtual void createRosServices()=0
Creates ROS services for the rokubimini device. It's virtual because it's implementation specific.
rokubimini::Rokubimini::saveConfigParameter
virtual bool saveConfigParameter()=0
Saves the current configuration to the device. It's virtual since it's implementation-specific.
rokubimini::Rokubimini::deviceReconnectedCb
void deviceReconnectedCb()
Calls the callbacks in the device reconnected callbacks list.
Definition: Rokubimini.cpp:170
rokubimini::Rokubimini::NodeHandlePtr
std::shared_ptr< ros::NodeHandle > NodeHandlePtr
Definition: Rokubimini.hpp:30
rokubimini::Statusword
Class representing the different states the communication or the sensors can be in.
Definition: Statusword.hpp:20
rokubimini::Rokubimini::clearGoalStateEnum
void clearGoalStateEnum()
Clears the goal state enumeration.
Definition: Rokubimini.hpp:242
rokubimini::Rokubimini::ReadingCb
std::function< void(const std::string &, const Reading &)> ReadingCb
Definition: Rokubimini.hpp:34
rokubimini::Rokubimini::readingCbs_
std::multimap< int, ReadingCb, std::greater< int > > readingCbs_
Definition: Rokubimini.hpp:689
rokubimini::Rokubimini::DiagnosticsUpdaterPtr
std::shared_ptr< diagnostic_updater::Updater > DiagnosticsUpdaterPtr
Definition: Rokubimini.hpp:31
rokubimini::Rokubimini::FatalRecoveredCb
std::function< void(const std::string &)> FatalRecoveredCb
Definition: Rokubimini.hpp:38
Reading.hpp
rokubimini::Rokubimini::deviceReconnectedCbs_
std::multimap< int, DeviceReconnectedCb, std::greater< int > > deviceReconnectedCbs_
Definition: Rokubimini.hpp:737
rokubimini::Rokubimini::setSensorConfiguration
virtual bool setSensorConfiguration(const configuration::SensorConfiguration &sensorConfiguration)=0
Sets a sensor configuration to the device. It's virtual since it's implementation-specific.
rokubimini::Rokubimini::addFatalRecoveredCb
void addFatalRecoveredCb(const FatalRecoveredCb &fatalRecoveredCb, const int priority=0)
Adds an fatal recovered callback to a list.
Definition: Rokubimini.hpp:159


rokubimini
Author(s):
autogenerated on Sat Apr 15 2023 02:53:52