RokubiminiSerial.hpp
Go to the documentation of this file.
1 #pragma once
2 
5 #include <utility>
6 #include <rokubimini_msgs/FirmwareUpdateSerial.h>
7 #include <rokubimini_msgs/ResetWrench.h>
8 #include <geometry_msgs/Wrench.h>
9 #include <thread>
10 #include <Eigen/Dense>
11 namespace rokubimini
12 {
13 namespace serial
14 {
28 {
29 public:
37  RokubiminiSerial() = default;
38 
45  RokubiminiSerial(const std::string& name, NodeHandlePtr nh) : Rokubimini(name, std::move(nh)){ /* do nothing */ };
46  ~RokubiminiSerial() override = default;
47 
54  void preSetupConfiguration() override;
55 
63  void postSetupConfiguration() override;
64 
75  bool setPublishMode(double timeStep);
76 
86  bool init();
87 
97  void updateProcessReading() override;
98 
106  bool deviceIsMissing() const override;
107 
119  void shutdownWithCommunication() override;
120 
136  {
137  implPtr_ = implPtr;
138  }
139 
151  // Missing: Methods for calling SDO
152  bool getSerialNumber(unsigned int& serialNumber) override;
153 
166  bool getForceTorqueSamplingRate(int& samplingRate) override;
167 
180  bool setForceTorqueFilter(const configuration::ForceTorqueFilter& filter) override;
181 
193  bool setAccelerationFilter(const unsigned int filter) override;
194 
206  bool setAngularRateFilter(const unsigned int filter) override;
207 
219  bool setAccelerationRange(const unsigned int range) override;
220 
232  bool setAngularRateRange(const unsigned int range) override;
233 
245  bool setForceTorqueOffset(const Eigen::Matrix<double, 6, 1>& forceTorqueOffset) override;
246 
258  bool setSensorConfiguration(const configuration::SensorConfiguration& sensorConfiguration) override;
259 
271  bool setSensorCalibration(const calibration::SensorCalibration& sensorCalibration) override;
272 
280  bool setConfigMode();
281 
289  bool setRunMode();
290 
299  bool setHardwareReset();
300 
309  bool setInitMode();
310 
320  bool saveConfigParameter() override;
321 
329  bool loadConfig();
330 
338  bool printUserConfig();
339 
346  void createRosPublishers() override;
347 
354  void createRosDiagnostics() override;
355 
362  void publishRosDiagnostics() override;
363 
371 
378  void signalShutdown();
379 
390  bool firmwareUpdateCallback(rokubimini_msgs::FirmwareUpdateSerial::Request& request,
391  rokubimini_msgs::FirmwareUpdateSerial::Response& response);
392 
403  bool resetWrenchCallback(rokubimini_msgs::ResetWrench::Request& request,
404  rokubimini_msgs::ResetWrench::Response& response);
411  void createRosServices() override;
412 
420  void publishRosMessages() override;
421 
429  void update();
430 
439  void parseCommunicationMsgs();
440 
449  void publishDataFlagsDiagnostics(const ros::TimerEvent& event);
450 
460 
461 protected:
470 
471  using RosPublisherPtr = std::shared_ptr<ros::Publisher>;
480 
488 
496 
504 
512 
519  uint64_t noFrameSyncCounter_{ 0 };
520 
528  std::atomic<bool> computeMeanWrenchFlag_{ false };
529 
537  std::atomic<uint32_t> wrenchMessageCount_{ 0 };
538 
545  mutable std::recursive_mutex meanWrenchOffsetMutex_;
546 
554  const static uint32_t TOTAL_NUMBER_OF_WRENCH_MESSAGES = 50;
555 
562  Eigen::Matrix<double, 6, Eigen::Dynamic> resetServiceWrenchSamples_;
563 
570  std::thread publishingThread_;
571 
578  bool publishersSet_ = false;
579 
586  bool rosDiagnosticsSet_ = false;
587 };
588 
589 } // namespace serial
590 } // namespace rokubimini
rokubimini::serial::RokubiminiSerial::setForceTorqueFilter
bool setForceTorqueFilter(const configuration::ForceTorqueFilter &filter) override
Sets a force torque filter to the device.
Definition: RokubiminiSerial.cpp:135
rokubimini::serial::RokubiminiSerial::publishConnectionStatusDiagnostics
void publishConnectionStatusDiagnostics()
Publishes the Connection Status Diagnostics to the "/diagnostics" topic.
Definition: RokubiminiSerial.cpp:442
rokubimini::serial::RokubiminiSerial::loadConfig
bool loadConfig()
Loads the configuration of the device.
Definition: RokubiminiSerial.cpp:200
rokubimini::serial::RokubiminiSerial::createRosPublishers
void createRosPublishers() override
Adds ROS publishers related to the device.
Definition: RokubiminiSerial.cpp:223
rokubimini::serial::RokubiminiSerial::resetWrenchCallback
bool resetWrenchCallback(rokubimini_msgs::ResetWrench::Request &request, rokubimini_msgs::ResetWrench::Response &response)
The callback for the reset wrench ROS service.
Definition: RokubiminiSerial.cpp:306
rokubimini::serial::RokubiminiSerial::publishRosDiagnostics
void publishRosDiagnostics() override
Publish ROS diagnostics related to the operation of rokubimini.
Definition: RokubiminiSerial.cpp:437
rokubimini::serial::RokubiminiSerial::implPtr_
RokubiminiSerialImplPtr implPtr_
The pointer to implementation.
Definition: RokubiminiSerial.hpp:469
rokubimini::serial::RokubiminiSerial::RokubiminiSerial
RokubiminiSerial()=default
Default constructor.
rokubimini::serial::RokubiminiSerial::deviceIsMissing
bool deviceIsMissing() const override
Checks if the device is missing.
Definition: RokubiminiSerial.cpp:120
rokubimini::serial::RokubiminiSerial::updateProcessReading
void updateProcessReading() override
Updates the RokubiminiSerial object with new measurements.
Definition: RokubiminiSerial.cpp:85
rokubimini::serial::RokubiminiSerial::init
bool init()
Initializes communication with a Rokubimini Serial device.
Definition: RokubiminiSerial.cpp:68
rokubimini::Rokubimini
rokubimini::serial::RokubiminiSerial::wrenchPublisher_
RosPublisherPtr wrenchPublisher_
The sensor_msgs::Wrench publisher.
Definition: RokubiminiSerial.hpp:487
rokubimini::serial::RokubiminiSerial::setAngularRateFilter
bool setAngularRateFilter(const unsigned int filter) override
Sets an angular rate filter to the device.
Definition: RokubiminiSerial.cpp:145
rokubimini::serial::RokubiminiSerial::createRosDiagnostics
void createRosDiagnostics() override
Adds ROS diagnostics related to the operation of rokubimini.
Definition: RokubiminiSerial.cpp:424
rokubimini::serial::RokubiminiSerial::publishingThread_
std::thread publishingThread_
The thread that publishes the sensor messages to ROS.
Definition: RokubiminiSerial.hpp:570
rokubimini::serial::RokubiminiSerial::publishersSet_
bool publishersSet_
Flag to check whether publishers are ready.
Definition: RokubiminiSerial.hpp:578
ros::ServiceServer
rokubimini::serial::RokubiminiSerial::resetServiceWrenchSamples_
Eigen::Matrix< double, 6, Eigen::Dynamic > resetServiceWrenchSamples_
The wrench samples used by the "reset service" callback for calculating the mean wrench offset.
Definition: RokubiminiSerial.hpp:562
rokubimini::serial::RokubiminiSerial::setAccelerationRange
bool setAccelerationRange(const unsigned int range) override
Sets an acceleration range to the device.
Definition: RokubiminiSerial.cpp:150
rokubimini::serial::RokubiminiSerial::setSensorCalibration
bool setSensorCalibration(const calibration::SensorCalibration &sensorCalibration) override
Sets a sensor calibration to the device.
Definition: RokubiminiSerial.cpp:175
rokubimini::serial::RokubiminiSerial::setConfigMode
bool setConfigMode()
Sets the device in config mode.
Definition: RokubiminiSerial.cpp:185
rokubimini::serial::RokubiminiSerial::postSetupConfiguration
void postSetupConfiguration() override
Post-setup configuration hook.
Definition: RokubiminiSerial.cpp:12
rokubimini::serial::RokubiminiSerial::computeMeanWrenchFlag_
std::atomic< bool > computeMeanWrenchFlag_
The flag for enabling the computation of the mean of the wrench measurements. Used withing the "reset...
Definition: RokubiminiSerial.hpp:528
rokubimini::serial::RokubiminiSerial::shutdownWithCommunication
void shutdownWithCommunication() override
Shuts down a Rokubimini Serial device before communication has been closed.
Definition: RokubiminiSerial.cpp:105
rokubimini::configuration::ForceTorqueFilter
rokubimini::serial::RokubiminiSerial::~RokubiminiSerial
~RokubiminiSerial() override=default
rokubimini::serial::RokubiminiSerial::resetWrenchService_
ros::ServiceServer resetWrenchService_
The service for resetting the sensor wrench measurements.
Definition: RokubiminiSerial.hpp:511
rokubimini::serial::RokubiminiSerial
The Rokubimini Serial class.
Definition: RokubiminiSerial.hpp:27
rokubimini::serial::RokubiminiSerial::signalShutdown
void signalShutdown()
Signals shutdown for the ROS node. It's used if a firmware update was successful.
Definition: RokubiminiSerial.cpp:286
rokubimini::serial::RokubiminiSerial::publishRosMessages
void publishRosMessages() override
Publishes ROS messages with data from the rokubimini device.
Definition: RokubiminiSerial.cpp:238
rokubimini::serial::RokubiminiSerial::rosDiagnosticsSet_
bool rosDiagnosticsSet_
Flag to check whether ros diagnostics are ready.
Definition: RokubiminiSerial.hpp:586
rokubimini::serial::RokubiminiSerial::setRunMode
bool setRunMode()
Sets the device in run mode.
Definition: RokubiminiSerial.cpp:190
rokubimini::serial::RokubiminiSerial::firmwareUpdateCallback
bool firmwareUpdateCallback(rokubimini_msgs::FirmwareUpdateSerial::Request &request, rokubimini_msgs::FirmwareUpdateSerial::Response &response)
The callback for the firmware update ROS service.
Definition: RokubiminiSerial.cpp:293
rokubimini::serial::RokubiminiSerial::setPublishMode
bool setPublishMode(double timeStep)
Sets the publishing mode (synchronous or async) of the serial device.
Definition: RokubiminiSerial.cpp:52
rokubimini
System dependencies.
rokubimini::serial::RokubiminiSerial::preSetupConfiguration
void preSetupConfiguration() override
Post-setup configuration hook.
Definition: RokubiminiSerial.cpp:33
rokubimini::serial::RokubiminiSerial::update
void update()
Updates the internal Reading with new measurements and publishes them to ROS.
Definition: RokubiminiSerial.cpp:73
rokubimini::serial::RokubiminiSerial::setForceTorqueOffset
bool setForceTorqueOffset(const Eigen::Matrix< double, 6, 1 > &forceTorqueOffset) override
Sets a force torque offset to the device.
Definition: RokubiminiSerial.cpp:160
ros::TimerEvent
rokubimini::serial::RokubiminiSerial::getSerialNumber
bool getSerialNumber(unsigned int &serialNumber) override
Gets the serial number of the device.
Definition: RokubiminiSerial.cpp:125
Rokubimini.hpp
rokubimini::Rokubimini::RosPublisherPtr
std::shared_ptr< ros::Publisher > RosPublisherPtr
rokubimini::serial::RokubiminiSerial::temperaturePublisher_
RosPublisherPtr temperaturePublisher_
The sensor_msgs::Temperature publisher.
Definition: RokubiminiSerial.hpp:495
rokubimini::serial::RokubiminiSerial::saveConfigParameter
bool saveConfigParameter() override
Saves the current configuration to the device.
Definition: RokubiminiSerial.cpp:195
rokubimini::serial::RokubiminiSerial::setAngularRateRange
bool setAngularRateRange(const unsigned int range) override
Sets an angular rate range to the device.
Definition: RokubiminiSerial.cpp:155
rokubimini::serial::RokubiminiSerial::setAccelerationFilter
bool setAccelerationFilter(const unsigned int filter) override
Sets an acceleration filter to the device.
Definition: RokubiminiSerial.cpp:140
rokubimini::serial::RokubiminiSerial::setImplPointer
void setImplPointer(const RokubiminiSerialImplPtr &implPtr)
Sets a pointer to the implementation.
Definition: RokubiminiSerial.hpp:135
rokubimini::serial::RokubiminiSerial::noFrameSyncCounter_
uint64_t noFrameSyncCounter_
The counter for measuring failed frame synchronizations.
Definition: RokubiminiSerial.hpp:519
RokubiminiSerialImpl.hpp
rokubimini::serial::RokubiminiSerial::updateConnectionStatus
void updateConnectionStatus(diagnostic_updater::DiagnosticStatusWrapper &stat)
Updates the Connection Status of the device and adds it to the diagnostics status.
Definition: RokubiminiSerial.cpp:419
std
rokubimini::serial::RokubiminiSerial::readingPublisher_
RosPublisherPtr readingPublisher_
The rokubimini_msgs::Reading publisher.
Definition: RokubiminiSerial.hpp:479
rokubimini::serial::RokubiminiSerial::printUserConfig
bool printUserConfig()
Prints all the user configurable parameters.
Definition: RokubiminiSerial.cpp:205
rokubimini::serial::RokubiminiSerialImplPtr
std::shared_ptr< RokubiminiSerialImpl > RokubiminiSerialImplPtr
Definition: RokubiminiSerialImpl.hpp:1373
rokubimini::serial::RokubiminiSerial::RokubiminiSerial
RokubiminiSerial(const std::string &name, NodeHandlePtr nh)
Definition: RokubiminiSerial.hpp:45
rokubimini::serial::RokubiminiSerial::createRosServices
void createRosServices() override
Adds ROS services related to the device.
Definition: RokubiminiSerial.cpp:412
diagnostic_updater::DiagnosticStatusWrapper
rokubimini::configuration::SensorConfiguration
rokubimini::calibration::SensorCalibration
rokubimini::serial::RokubiminiSerial::publishDataFlagsDiagnostics
void publishDataFlagsDiagnostics(const ros::TimerEvent &event)
Publishes the Data Flags Diagnostics to the "/diagnostics" topic.
Definition: RokubiminiSerial.cpp:447
rokubimini::serial::RokubiminiSerial::parseCommunicationMsgs
void parseCommunicationMsgs()
Parses the incoming communication msgs from the device.
Definition: RokubiminiSerial.cpp:38
rokubimini::serial::RokubiminiSerial::getForceTorqueSamplingRate
bool getForceTorqueSamplingRate(int &samplingRate) override
Gets the force torque sampling rate of the device.
Definition: RokubiminiSerial.cpp:130
rokubimini::serial::RokubiminiSerial::TOTAL_NUMBER_OF_WRENCH_MESSAGES
const static uint32_t TOTAL_NUMBER_OF_WRENCH_MESSAGES
Definition: RokubiminiSerial.hpp:554
rokubimini::Rokubimini::NodeHandlePtr
std::shared_ptr< ros::NodeHandle > NodeHandlePtr
rokubimini::serial::RokubiminiSerial::meanWrenchOffsetMutex_
std::recursive_mutex meanWrenchOffsetMutex_
The mutex for accessing the mean of the wrench measurements. Used for the "reset service" callback.
Definition: RokubiminiSerial.hpp:545
rokubimini::serial::RokubiminiSerial::setInitMode
bool setInitMode()
Triggers a software reset of the sensor bringing it to a known state.
Definition: RokubiminiSerial.cpp:215
rokubimini::serial::RokubiminiSerial::setSensorConfiguration
bool setSensorConfiguration(const configuration::SensorConfiguration &sensorConfiguration) override
Sets a sensor configuration to the device.
Definition: RokubiminiSerial.cpp:165
rokubimini::serial::RokubiminiSerial::wrenchMessageCount_
std::atomic< uint32_t > wrenchMessageCount_
The counter that is used for the computation of the mean of the wrench measurements....
Definition: RokubiminiSerial.hpp:537
rokubimini::serial::RokubiminiSerial::setHardwareReset
bool setHardwareReset()
Triggers a hardware reset of the sensor.
Definition: RokubiminiSerial.cpp:210
rokubimini::serial::RokubiminiSerial::firmwareUpdateService_
ros::ServiceServer firmwareUpdateService_
The service for firmware updates.
Definition: RokubiminiSerial.hpp:503


rokubimini_serial
Author(s):
autogenerated on Sat Apr 15 2023 02:53:58