RokubiminiEthercat.hpp
Go to the documentation of this file.
1 #pragma once
2 
5 #include <utility>
6 #include <rokubimini_msgs/FirmwareUpdateEthercat.h>
7 #include <rokubimini_msgs/ResetWrench.h>
8 #include <Eigen/Dense>
9 namespace rokubimini
10 {
11 namespace ethercat
12 {
26 {
27 public:
36  RokubiminiEthercat() = default;
37 
44  RokubiminiEthercat(const std::string& name, NodeHandlePtr nh) : Rokubimini(name, std::move(nh)){ /* do nothing */ };
45  // RokubiminiEthercat() = default;
46  ~RokubiminiEthercat() override = default;
47 
55  void preSetupConfiguration() override;
56 
65  void postSetupConfiguration() override;
66 
76  void updateProcessReading() override;
77 
85  bool deviceIsMissing() const override;
86 
98  void shutdownWithCommunication() override;
99 
115  {
116  slavePtr_ = slavePtr;
117  }
118 
129  void setState(const uint16_t state)
130  {
131  slavePtr_->setState(state);
132  }
133 
144  bool waitForState(const uint16_t state)
145  {
146  return slavePtr_->waitForState(state);
147  }
148 
159  // Missing: Methods for calling SDO
160  bool getSerialNumber(unsigned int& samplingRate) override;
161 
174  bool getForceTorqueSamplingRate(int& samplingRate) override;
175 
188  bool setForceTorqueFilter(const configuration::ForceTorqueFilter& filter) override;
189 
201  bool setAccelerationFilter(const unsigned int filter) override;
202 
214  bool setAngularRateFilter(const unsigned int filter) override;
215 
227  bool setAccelerationRange(const unsigned int range) override;
228 
240  bool setAngularRateRange(const unsigned int range) override;
241 
253  bool setForceTorqueOffset(const Eigen::Matrix<double, 6, 1>& forceTorqueOffset) override;
254 
266  bool setSensorConfiguration(const configuration::SensorConfiguration& sensorConfiguration) override;
267 
279  bool setSensorCalibration(const calibration::SensorCalibration& sensorCalibration) override;
280 
288  bool setConfigMode();
289 
297  bool setRunMode();
307  bool saveConfigParameter() override;
308 
315  void createRosPublishers() override;
316 
323  void signalShutdown();
324 
335  bool firmwareUpdateCallback(rokubimini_msgs::FirmwareUpdateEthercat::Request& request,
336  rokubimini_msgs::FirmwareUpdateEthercat::Response& response);
337 
348  bool resetWrenchCallback(rokubimini_msgs::ResetWrench::Request& request,
349  rokubimini_msgs::ResetWrench::Response& response);
356  void createRosServices() override;
357 
365  void publishRosMessages() override;
366 
373  void createRosDiagnostics() override;
374 
381  void publishRosDiagnostics() override;
382 
390 
404  void setRunsAsync(bool runsAsync);
405 
415 
424  void publishDataFlagsDiagnostics(const ros::TimerEvent& event);
425 
426  template <typename Value>
427  bool sendSdoRead(const uint16_t index, const uint8_t subindex, const bool completeAccess, Value& value);
428 
442  bool sendSdoReadGeneric(const std::string& indexString, const std::string& subindexString,
443  const std::string& valueTypeString, std::string& valueString);
444 
458  template <typename Value>
459  bool sendSdoWrite(const uint16_t index, const uint8_t subindex, const bool completeAccess, const Value value);
460 
475  bool sendSdoWriteGeneric(const std::string& indexString, const std::string& subindexString,
476  const std::string& valueTypeString, const std::string& valueString);
477 
478 protected:
487 
488  using RosPublisherPtr = std::shared_ptr<ros::Publisher>;
489 
498 
506 
514 
522 
530 
538 
546  std::atomic<bool> computeMeanWrenchFlag_{ false };
547 
555  std::atomic<uint32_t> wrenchMessageCount_{ 0 };
556 
563  mutable std::recursive_mutex meanWrenchOffsetMutex_;
564 
573 
580  Eigen::Matrix<double, 6, Eigen::Dynamic> resetServiceWrenchSamples_;
581 };
582 
583 template <>
584 bool RokubiminiEthercat::sendSdoRead(const uint16_t index, const uint8_t subindex, const bool completeAccess,
585  int8_t& value);
586 template <>
587 bool RokubiminiEthercat::sendSdoRead(const uint16_t index, const uint8_t subindex, const bool completeAccess,
588  int16_t& value);
589 template <>
590 bool RokubiminiEthercat::sendSdoRead(const uint16_t index, const uint8_t subindex, const bool completeAccess,
591  int32_t& value);
592 template <>
593 bool RokubiminiEthercat::sendSdoRead(const uint16_t index, const uint8_t subindex, const bool completeAccess,
594  int64_t& value);
595 template <>
596 bool RokubiminiEthercat::sendSdoRead(const uint16_t index, const uint8_t subindex, const bool completeAccess,
597  uint8_t& value);
598 template <>
599 bool RokubiminiEthercat::sendSdoRead(const uint16_t index, const uint8_t subindex, const bool completeAccess,
600  uint16_t& value);
601 template <>
602 bool RokubiminiEthercat::sendSdoRead(const uint16_t index, const uint8_t subindex, const bool completeAccess,
603  uint32_t& value);
604 template <>
605 bool RokubiminiEthercat::sendSdoRead(const uint16_t index, const uint8_t subindex, const bool completeAccess,
606  uint64_t& value);
607 template <>
608 bool RokubiminiEthercat::sendSdoRead(const uint16_t index, const uint8_t subindex, const bool completeAccess,
609  float& value);
610 template <>
611 bool RokubiminiEthercat::sendSdoRead(const uint16_t index, const uint8_t subindex, const bool completeAccess,
612  double& value);
613 
614 template <>
615 bool RokubiminiEthercat::sendSdoWrite(const uint16_t index, const uint8_t subindex, const bool completeAccess,
616  const int8_t value);
617 template <>
618 bool RokubiminiEthercat::sendSdoWrite(const uint16_t index, const uint8_t subindex, const bool completeAccess,
619  const int16_t value);
620 template <>
621 bool RokubiminiEthercat::sendSdoWrite(const uint16_t index, const uint8_t subindex, const bool completeAccess,
622  const int32_t value);
623 template <>
624 bool RokubiminiEthercat::sendSdoWrite(const uint16_t index, const uint8_t subindex, const bool completeAccess,
625  const int64_t value);
626 template <>
627 bool RokubiminiEthercat::sendSdoWrite(const uint16_t index, const uint8_t subindex, const bool completeAccess,
628  const uint8_t value);
629 template <>
630 bool RokubiminiEthercat::sendSdoWrite(const uint16_t index, const uint8_t subindex, const bool completeAccess,
631  const uint16_t value);
632 template <>
633 bool RokubiminiEthercat::sendSdoWrite(const uint16_t index, const uint8_t subindex, const bool completeAccess,
634  const uint32_t value);
635 template <>
636 bool RokubiminiEthercat::sendSdoWrite(const uint16_t index, const uint8_t subindex, const bool completeAccess,
637  const uint64_t value);
638 template <>
639 bool RokubiminiEthercat::sendSdoWrite(const uint16_t index, const uint8_t subindex, const bool completeAccess,
640  const float value);
641 template <>
642 bool RokubiminiEthercat::sendSdoWrite(const uint16_t index, const uint8_t subindex, const bool completeAccess,
643  const double value);
644 
645 } // namespace ethercat
646 } // namespace rokubimini
rokubimini::ethercat::RokubiminiEthercat::setAngularRateRange
bool setAngularRateRange(const unsigned int range) override
Sets an angular rate range to the device.
Definition: RokubiminiEthercat.cpp:81
rokubimini::ethercat::RokubiminiEthercat::firmwareUpdateService_
ros::ServiceServer firmwareUpdateService_
The service for firmware updates.
Definition: RokubiminiEthercat.hpp:529
uint8_t
unsigned char uint8_t
int8_t
signed char int8_t
rokubimini::ethercat::RokubiminiEthercat::sendSdoRead
bool sendSdoRead(const uint16_t index, const uint8_t subindex, const bool completeAccess, Value &value)
rokubimini::ethercat::RokubiminiEthercat::shutdownWithCommunication
void shutdownWithCommunication() override
Shuts down a Rokubimini Ethercat device before communication has been closed.
Definition: RokubiminiEthercat.cpp:39
rokubimini::ethercat::RokubiminiEthercat::signalShutdown
void signalShutdown()
Signals shutdown for the ROS node. It's used if a firmware update was successful.
Definition: RokubiminiEthercat.cpp:188
rokubimini::ethercat::RokubiminiEthercat::setForceTorqueOffset
bool setForceTorqueOffset(const Eigen::Matrix< double, 6, 1 > &forceTorqueOffset) override
Sets a force torque offset to the device.
Definition: RokubiminiEthercat.cpp:86
rokubimini::ethercat::RokubiminiEthercat::preSetupConfiguration
void preSetupConfiguration() override
Pre-setup configuration hook.
Definition: RokubiminiEthercat.cpp:15
rokubimini::ethercat::RokubiminiEthercat::resetServiceWrenchSamples_
Eigen::Matrix< double, 6, Eigen::Dynamic > resetServiceWrenchSamples_
The wrench samples used by the "reset service" callback for calculating the mean wrench offset.
Definition: RokubiminiEthercat.hpp:580
uint16_t
unsigned short uint16_t
rokubimini::ethercat::RokubiminiEthercat::setAngularRateFilter
bool setAngularRateFilter(const unsigned int filter) override
Sets an angular rate filter to the device.
Definition: RokubiminiEthercat.cpp:71
rokubimini::ethercat::RokubiminiEthercat::postSetupConfiguration
void postSetupConfiguration() override
Post-setup configuration hook.
Definition: RokubiminiEthercat.cpp:12
rokubimini::ethercat::RokubiminiEthercat::sendSdoReadGeneric
bool sendSdoReadGeneric(const std::string &indexString, const std::string &subindexString, const std::string &valueTypeString, std::string &valueString)
Sends a generic reading SDO to the Ethercat device.
Definition: RokubiminiEthercat.cpp:367
rokubimini::ethercat::RokubiminiEthercat::wrenchMessageCount_
std::atomic< uint32_t > wrenchMessageCount_
The counter that is used for the computation of the mean of the wrench measurements....
Definition: RokubiminiEthercat.hpp:555
rokubimini::ethercat::RokubiminiEthercat::waitForState
bool waitForState(const uint16_t state)
Wait for an EtherCAT state machine state to be reached.
Definition: RokubiminiEthercat.hpp:144
rokubimini::ethercat::RokubiminiEthercat::getForceTorqueSamplingRate
bool getForceTorqueSamplingRate(int &samplingRate) override
Gets the force torque sampling rate of the device.
Definition: RokubiminiEthercat.cpp:56
rokubimini::ethercat::RokubiminiEthercat::publishRosMessages
void publishRosMessages() override
Publishes ROS messages with data from the rokubimini device.
Definition: RokubiminiEthercat.cpp:151
RokubiminiEthercatSlave.hpp
rokubimini::ethercat::RokubiminiEthercat::getSerialNumber
bool getSerialNumber(unsigned int &samplingRate) override
Gets the serial number of the device.
Definition: RokubiminiEthercat.cpp:51
rokubimini::Rokubimini
rokubimini::ethercat::RokubiminiEthercat::publishDataFlagsDiagnostics
void publishDataFlagsDiagnostics(const ros::TimerEvent &event)
Publishes the Data Flags Diagnostics to the "/diagnostics" topic.
Definition: RokubiminiEthercat.cpp:222
rokubimini::ethercat::RokubiminiEthercat::saveConfigParameter
bool saveConfigParameter() override
Saves the current configuration to the device.
Definition: RokubiminiEthercat.cpp:121
rokubimini::ethercat::RokubiminiEthercat::RokubiminiEthercat
RokubiminiEthercat(const std::string &name, NodeHandlePtr nh)
Definition: RokubiminiEthercat.hpp:44
rokubimini::ethercat::RokubiminiEthercat::setForceTorqueFilter
bool setForceTorqueFilter(const configuration::ForceTorqueFilter &filter) override
Sets a force torque filter to the device.
Definition: RokubiminiEthercat.cpp:61
rokubimini::ethercat::RokubiminiEthercat::temperaturePublisher_
RosPublisherPtr temperaturePublisher_
The sensor_msgs::Temperature publisher.
Definition: RokubiminiEthercat.hpp:521
rokubimini::ethercat::RokubiminiEthercat::setRunMode
bool setRunMode()
Sets the device in run mode.
Definition: RokubiminiEthercat.cpp:116
rokubimini::ethercat::RokubiminiEthercat::sendSdoWrite
bool sendSdoWrite(const uint16_t index, const uint8_t subindex, const bool completeAccess, const Value value)
int16_t
signed short int16_t
rokubimini::ethercat::RokubiminiEthercat::updateConnectionStatus
void updateConnectionStatus(diagnostic_updater::DiagnosticStatusWrapper &stat)
Shows the Device Status of the rokubimini.
Definition: RokubiminiEthercat.cpp:195
rokubimini::ethercat::RokubiminiEthercat::firmwareUpdateCallback
bool firmwareUpdateCallback(rokubimini_msgs::FirmwareUpdateEthercat::Request &request, rokubimini_msgs::FirmwareUpdateEthercat::Response &response)
The callback for the firmware update ROS service.
Definition: RokubiminiEthercat.cpp:243
ros::ServiceServer
uint32_t
unsigned int uint32_t
rokubimini::ethercat::RokubiminiEthercat::setConfigMode
bool setConfigMode()
Sets the device in config mode.
Definition: RokubiminiEthercat.cpp:111
rokubimini::configuration::ForceTorqueFilter
rokubimini::ethercat::RokubiminiEthercat::readingPublisher_
RosPublisherPtr readingPublisher_
The rokubimini_msgs::Reading publisher.
Definition: RokubiminiEthercat.hpp:497
rokubimini::ethercat::RokubiminiEthercat::setSensorCalibration
bool setSensorCalibration(const calibration::SensorCalibration &sensorCalibration) override
Sets a sensor calibration to the device.
Definition: RokubiminiEthercat.cpp:101
uint64_t
unsigned __int64 uint64_t
rokubimini::ethercat::RokubiminiEthercat::setSensorConfiguration
bool setSensorConfiguration(const configuration::SensorConfiguration &sensorConfiguration) override
Sets a sensor configuration to the device.
Definition: RokubiminiEthercat.cpp:91
rokubimini::ethercat::RokubiminiEthercat::TOTAL_NUMBER_OF_WRENCH_MESSAGES
const static uint32_t TOTAL_NUMBER_OF_WRENCH_MESSAGES
Definition: RokubiminiEthercat.hpp:572
rokubimini::ethercat::RokubiminiEthercat::setAccelerationFilter
bool setAccelerationFilter(const unsigned int filter) override
Sets an acceleration filter to the device.
Definition: RokubiminiEthercat.cpp:66
rokubimini::ethercat::RokubiminiEthercat::updateProcessReading
void updateProcessReading() override
Updates the RokubiminiEthercat object with new measurements.
Definition: RokubiminiEthercat.cpp:20
rokubimini
rokubimini::ethercat::RokubiminiEthercat::setState
void setState(const uint16_t state)
Sets the desired EtherCAT state machine state of the device in the bus.
Definition: RokubiminiEthercat.hpp:129
rokubimini::ethercat::RokubiminiEthercat::meanWrenchOffsetMutex_
std::recursive_mutex meanWrenchOffsetMutex_
The mutex for accessing the mean of the wrench measurements. Used for the "reset service" callback.
Definition: RokubiminiEthercat.hpp:563
rokubimini::ethercat::RokubiminiEthercat::resetWrenchCallback
bool resetWrenchCallback(rokubimini_msgs::ResetWrench::Request &request, rokubimini_msgs::ResetWrench::Response &response)
The callback for the reset wrench ROS service.
Definition: RokubiminiEthercat.cpp:256
rokubimini::ethercat::RokubiminiEthercat::setSlavePointer
void setSlavePointer(const RokubiminiEthercatSlavePtr &slavePtr)
Sets a pointer to the implementation.
Definition: RokubiminiEthercat.hpp:114
ros::TimerEvent
rokubimini::ethercat::RokubiminiEthercat::RokubiminiEthercat
RokubiminiEthercat()=default
Default constructor.
rokubimini::ethercat::RokubiminiEthercat::publishRosDiagnostics
void publishRosDiagnostics() override
Publish ROS diagnostics related to the operation of rokubimini.
Definition: RokubiminiEthercat.cpp:212
Rokubimini.hpp
rokubimini::Rokubimini::RosPublisherPtr
std::shared_ptr< ros::Publisher > RosPublisherPtr
rokubimini::ethercat::RokubiminiEthercat::imuPublisher_
RosPublisherPtr imuPublisher_
The sensor_msgs::Imu publisher.
Definition: RokubiminiEthercat.hpp:513
rokubimini::ethercat::RokubiminiEthercat::publishConnectionStatusDiagnostics
void publishConnectionStatusDiagnostics()
Publishes the Connection Status Diagnostics to the "/diagnostics" topic.
Definition: RokubiminiEthercat.cpp:217
int64_t
signed __int64 int64_t
rokubimini::ethercat::RokubiminiEthercat::resetWrenchService_
ros::ServiceServer resetWrenchService_
The service for resetting the sensor wrench measurements.
Definition: RokubiminiEthercat.hpp:537
rokubimini::ethercat::RokubiminiEthercat::computeMeanWrenchFlag_
std::atomic< bool > computeMeanWrenchFlag_
The flag for enabling the computation of the mean of the wrench measurements. Used withing the "reset...
Definition: RokubiminiEthercat.hpp:546
rokubimini::ethercat::RokubiminiEthercatSlavePtr
std::shared_ptr< RokubiminiEthercatSlave > RokubiminiEthercatSlavePtr
Definition: RokubiminiEthercatSlave.hpp:615
rokubimini::ethercat::RokubiminiEthercat::wrenchPublisher_
RosPublisherPtr wrenchPublisher_
The sensor_msgs::Wrench publisher.
Definition: RokubiminiEthercat.hpp:505
int32_t
signed int int32_t
std
rokubimini::ethercat::RokubiminiEthercat::deviceIsMissing
bool deviceIsMissing() const override
Checks if the device is missing.
Definition: RokubiminiEthercat.cpp:46
rokubimini::ethercat::RokubiminiEthercat::createRosPublishers
void createRosPublishers() override
Adds ROS publishers related to the device.
Definition: RokubiminiEthercat.cpp:130
diagnostic_updater::DiagnosticStatusWrapper
rokubimini::ethercat::RokubiminiEthercat::createRosServices
void createRosServices() override
Adds ROS services related to the device.
Definition: RokubiminiEthercat.cpp:360
rokubimini::ethercat::RokubiminiEthercat::slavePtr_
RokubiminiEthercatSlavePtr slavePtr_
The pointer to implementation.
Definition: RokubiminiEthercat.hpp:486
rokubimini::configuration::SensorConfiguration
rokubimini::calibration::SensorCalibration
rokubimini::ethercat::RokubiminiEthercat::sendSdoWriteGeneric
bool sendSdoWriteGeneric(const std::string &indexString, const std::string &subindexString, const std::string &valueTypeString, const std::string &valueString)
Sends a generic write SDO to the Ethercat device.
Definition: RokubiminiEthercat.cpp:373
rokubimini::ethercat::RokubiminiEthercat
The Rokubimini Ethercat class.
Definition: RokubiminiEthercat.hpp:25
rokubimini::ethercat::RokubiminiEthercat::setRunsAsync
void setRunsAsync(bool runsAsync)
Definition: RokubiminiEthercat.cpp:147
rokubimini::ethercat::RokubiminiEthercat::~RokubiminiEthercat
~RokubiminiEthercat() override=default
rokubimini::ethercat::RokubiminiEthercat::createRosDiagnostics
void createRosDiagnostics() override
Adds ROS diagnostics related to the operation of rokubimini.
Definition: RokubiminiEthercat.cpp:200
rokubimini::Rokubimini::NodeHandlePtr
std::shared_ptr< ros::NodeHandle > NodeHandlePtr
rokubimini::ethercat::RokubiminiEthercat::setAccelerationRange
bool setAccelerationRange(const unsigned int range) override
Sets an acceleration range to the device.
Definition: RokubiminiEthercat.cpp:76


rokubimini_ethercat
Author(s):
autogenerated on Sat Apr 15 2023 02:53:56