RokubiminiSerial.cpp
Go to the documentation of this file.
2 #include <rokubimini_msgs/Reading.h>
3 #include <csignal>
4 #include <thread>
6 #include <diagnostic_msgs/DiagnosticArray.h>
7 
8 namespace rokubimini
9 {
10 namespace serial
11 {
13 {
14  /*
15  ** Print configurations of the sensor
16  */
17  // configuration_.printConfiguration();
18  ROS_DEBUG_STREAM("[" << name_.c_str() << "] Calibration Matrix of the sensor: "
20 
21  if (implPtr_->runsAsync())
22  {
23  // start publishing thread
24  if (!publishingThread_.joinable())
25  {
26  ROS_INFO("[%s] Launching publishing thread.", name_.c_str());
27  publishingThread_ = std::thread{ &RokubiminiSerial::update, this };
28  }
29  }
30  implPtr_->startup();
31 }
32 
34 {
36 }
37 
39 {
40  if (!implPtr_->parseCommunicationMsgs())
41  {
42  ROS_ERROR("[%s] Failed to parse communication messages", name_.c_str());
43  }
44  if (productName_ != implPtr_->getProductName())
45  {
46  ROS_WARN("[%s] Invalid product name '%s' given, didn't match the actual product name of the device: '%s'",
47  name_.c_str(), productName_.c_str(), implPtr_->getProductName().c_str());
48  productName_ = implPtr_->getProductName();
49  }
50 }
51 
52 bool RokubiminiSerial::setPublishMode(double timeStep)
53 {
54  // if the timeStep variable is 0, we set the flag 'runsAsync' to true. By default the 'runsAsync' flag is false.
55 
56  if (timeStep == 0)
57  {
58  implPtr_->setRunsAsync(true);
59  }
60  else
61  {
62  ROS_WARN_STREAM("[" << name_.c_str() << "] Starting publishing worker at " << 1.0 / timeStep
63  << " Hz, based on time step.");
64  }
65  return true;
66 }
67 
69 {
70  return implPtr_->init();
71 }
72 
74 {
75  while (implPtr_->isRunning())
76  {
79  {
82  }
83  }
84 }
86 {
87  // if the polling is async and the thread reaching this method is from application, return immediately.
88  {
89  std::lock_guard<std::recursive_mutex> lock(readingMutex_);
90  implPtr_->getReading(reading_);
91 
92  // Update statusword.
93  auto statusword(reading_.getStatusword());
94  setStatusword(statusword);
95  statuswordRequested_ = false;
96  }
97 
98  if (deviceIsMissing())
99  {
100  Statusword statusword;
101  setStatusword(statusword);
102  }
103 }
104 
106 {
107  implPtr_->shutdown();
108  // publish the last diagnostics before shutdown
109  connectionStatusUpdater_->force_update();
110  if (implPtr_->runsAsync())
111  {
112  // Shutdown the publishing thread if running
113  if (publishingThread_.joinable())
114  {
115  publishingThread_.join();
116  }
117  }
118 }
119 
121 {
122  return false;
123 }
124 
125 bool RokubiminiSerial::getSerialNumber(unsigned int& serialNumber)
126 {
127  return implPtr_->getSerialNumber(serialNumber);
128 }
129 
131 {
132  return implPtr_->getForceTorqueSamplingRate(samplingRate);
133 }
134 
136 {
137  return implPtr_->setForceTorqueFilter(filter);
138 }
139 
140 bool RokubiminiSerial::setAccelerationFilter(const unsigned int filter)
141 {
142  return implPtr_->setAccelerationFilter(filter);
143 }
144 
145 bool RokubiminiSerial::setAngularRateFilter(const unsigned int filter)
146 {
147  return implPtr_->setAngularRateFilter(filter);
148 }
149 
150 bool RokubiminiSerial::setAccelerationRange(const unsigned int range)
151 {
152  return implPtr_->setAccelerationRange(range);
153 }
154 
155 bool RokubiminiSerial::setAngularRateRange(const unsigned int range)
156 {
157  return implPtr_->setAngularRateRange(range);
158 }
159 
160 bool RokubiminiSerial::setForceTorqueOffset(const Eigen::Matrix<double, 6, 1>& forceTorqueOffset)
161 {
162  return implPtr_->setForceTorqueOffset(forceTorqueOffset);
163 }
164 
166 {
167  if (!implPtr_->setSensorConfiguration(sensorConfiguration))
168  {
169  return false;
170  }
171  getConfiguration().setSensorConfiguration(sensorConfiguration);
172  return true;
173 }
174 
176 {
177  if (!implPtr_->setSensorCalibration(sensorCalibration))
178  {
179  return false;
180  }
181  getConfiguration().setSensorCalibration(sensorCalibration);
182  return true;
183 }
184 
186 {
187  return implPtr_->setConfigMode();
188 }
189 
191 {
192  return implPtr_->setRunMode();
193 }
194 
196 {
197  return implPtr_->saveConfigParameter();
198 }
199 
201 {
202  return implPtr_->loadConfig();
203 }
204 
206 {
207  return implPtr_->printUserConfig();
208 }
209 
211 {
212  return implPtr_->setHardwareReset();
213 }
214 
216 {
217  return implPtr_->setInitMode();
218 }
219 
220 using RokubiminiReadingRos = rokubimini_msgs::Reading;
221 using RokubiminiWrenchRos = geometry_msgs::WrenchStamped;
222 using RokubiminiTemperatureRos = sensor_msgs::Temperature;
224 {
225  readingPublisher_ = std::make_shared<ros::Publisher>(nh_->advertise<RokubiminiReadingRos>(
226  nh_->getNamespace() + "/" + getName() + "/ft_sensor_readings/reading", 10, false));
227 
228  wrenchPublisher_ = std::make_shared<ros::Publisher>(nh_->advertise<RokubiminiWrenchRos>(
229  nh_->getNamespace() + "/" + getName() + "/ft_sensor_readings/wrench", 10, false));
230 
231  temperaturePublisher_ = std::make_shared<ros::Publisher>(nh_->advertise<RokubiminiTemperatureRos>(
232  nh_->getNamespace() + "/" + getName() + "/ft_sensor_readings/temperature", 10, false));
234  std::make_shared<ros::Publisher>(nh_->advertise<diagnostic_msgs::DiagnosticArray>("/diagnostics", 10, false));
235  publishersSet_ = true;
236 }
237 
239 {
240  if (implPtr_->hasFrameSync() && implPtr_->isRunning())
241  {
242  auto reading = getReading();
243  rokubimini_msgs::Reading reading_msg;
244  reading_msg.header.stamp = reading.getWrench().header.stamp;
245  reading_msg.header.frame_id = reading.getWrench().header.frame_id;
246  reading_msg.statusword = reading.getStatusword().getData();
247  reading_msg.wrench = reading.getWrench();
248  reading_msg.isForceTorqueSaturated = reading.isForceTorqueSaturated();
249  reading_msg.temperature = reading.getTemperature();
250 
251  // if reset wrench is triggered take the mean of the measurements
253  {
254  std::lock_guard<std::recursive_mutex> lock(meanWrenchOffsetMutex_);
255  std::uint32_t lpos = wrenchMessageCount_;
257  // increase the rows of the dynamic array
258  resetServiceWrenchSamples_.conservativeResize(6, wrenchMessageCount_);
259  // assign new values to the array
260  resetServiceWrenchSamples_(0, lpos) = reading.getWrench().wrench.force.x;
261  resetServiceWrenchSamples_(1, lpos) = reading.getWrench().wrench.force.y;
262  resetServiceWrenchSamples_(2, lpos) = reading.getWrench().wrench.force.z;
263  resetServiceWrenchSamples_(3, lpos) = reading.getWrench().wrench.torque.x;
264  resetServiceWrenchSamples_(4, lpos) = reading.getWrench().wrench.torque.y;
265  resetServiceWrenchSamples_(5, lpos) = reading.getWrench().wrench.torque.z;
266  }
267  readingPublisher_->publish(reading_msg);
268  wrenchPublisher_->publish(reading.getWrench());
269  temperaturePublisher_->publish(reading.getTemperature());
270  // update the data flags to be used by diagnostics
271  implPtr_->updateDataFlags();
272  // reset the "no-frame" counter
274  }
275  else
276  {
278  }
279  // check if there is no synced frame over 100 times
280  if (noFrameSyncCounter_ > 100)
281  {
282  ROS_ERROR_THROTTLE(3, "[%s] Driver failed to synchronize with the device", name_.c_str());
283  }
284 }
285 
287 {
288  // wait a small amount of time so that the callback can return the result to the user.
289  std::this_thread::sleep_for(std::chrono::microseconds(500));
290  kill(getpid(), SIGINT);
291 }
292 
293 bool RokubiminiSerial::firmwareUpdateCallback(rokubimini_msgs::FirmwareUpdateSerial::Request& request,
294  rokubimini_msgs::FirmwareUpdateSerial::Response& response)
295 {
296  response.result = implPtr_->firmwareUpdate(request.file_path);
297  if (!implPtr_->isRunning())
298  {
299  // time to shut down the ROS node.
300  std::thread shutdown_thread(&RokubiminiSerial::signalShutdown, this);
301  shutdown_thread.detach();
302  }
303  return true;
304 }
305 
306 bool RokubiminiSerial::resetWrenchCallback(rokubimini_msgs::ResetWrench::Request& request,
307  rokubimini_msgs::ResetWrench::Response& response)
308 {
309  ROS_INFO("[%s] Reseting sensor measurements...", name_.c_str());
310 
311  bool success = false;
312  unsigned int count = 0;
313  Eigen::Matrix<double, 6, 1> new_offset;
314 
315  while (!success and count < 8)
316  {
317  // initialize all variables to zero
319  // enable the computation of the mean wrench
320  computeMeanWrenchFlag_ = true;
321  // wait for computing the mean of wrench measurements
323  ;
324  // disable the computation of the mean wrench
325  computeMeanWrenchFlag_ = false;
326 
327  if (!setConfigMode())
328  {
329  ROS_ERROR("[%s] Device could not switch to config mode", name_.c_str());
330  response.success = false;
331  return true;
332  }
333  geometry_msgs::Wrench wrench;
334  Eigen::Matrix<double, 6, 1> mean_wrench;
335  // lock to get the mean wrench offset value
336  {
337  std::lock_guard<std::recursive_mutex> lock(meanWrenchOffsetMutex_);
338  mean_wrench = resetServiceWrenchSamples_.rowwise().mean();
339  wrench.force.x = mean_wrench(0, 0);
340  wrench.force.y = mean_wrench(1, 0);
341  wrench.force.z = mean_wrench(2, 0);
342  wrench.torque.x = mean_wrench(3, 0);
343  wrench.torque.y = mean_wrench(4, 0);
344  wrench.torque.z = mean_wrench(5, 0);
345  }
346 
347  geometry_msgs::Wrench desired_wrench = request.desired_wrench;
348  auto current_offset = configuration_.getForceTorqueOffset();
349  // new offset = current offset + desired offset - current wrench measurements
350  new_offset(0, 0) = desired_wrench.force.x - wrench.force.x + current_offset(0, 0);
351  new_offset(1, 0) = desired_wrench.force.y - wrench.force.y + current_offset(1, 0);
352  new_offset(2, 0) = desired_wrench.force.z - wrench.force.z + current_offset(2, 0);
353  new_offset(3, 0) = desired_wrench.torque.x - wrench.torque.x + current_offset(3, 0);
354  new_offset(4, 0) = desired_wrench.torque.y - wrench.torque.y + current_offset(4, 0);
355  new_offset(5, 0) = desired_wrench.torque.z - wrench.torque.z + current_offset(5, 0);
356  ROS_DEBUG_STREAM("[" << getName() << "] "
357  << "New offset is: " << new_offset);
358  if (!setForceTorqueOffset(new_offset))
359  {
360  ROS_ERROR("[%s] Could not write new offset to device", name_.c_str());
361  response.success = false;
362  return true;
363  }
364  if (!setRunMode())
365  {
366  ROS_ERROR("[%s] Device could not switch to run mode", name_.c_str());
367  response.success = false;
368  return true;
369  }
371 
372  // initialize all variables to zero
374  // enable the computation of the mean wrench
375  computeMeanWrenchFlag_ = true;
376  // wait for computing the mean of wrench measurements
378  ;
379  // disable the computation of the mean wrench
380  computeMeanWrenchFlag_ = false;
381 
382  // lock to get the mean wrench offset value
383  {
384  std::lock_guard<std::recursive_mutex> lock(meanWrenchOffsetMutex_);
385  mean_wrench = resetServiceWrenchSamples_.rowwise().mean();
386  }
387  success = true;
388  Eigen::Vector3d forceError;
389  forceError << mean_wrench(0, 0) - desired_wrench.force.x, mean_wrench(1, 0) - desired_wrench.force.y,
390  mean_wrench(2, 0) - desired_wrench.force.z;
391  if (forceError.norm() > 0.2)
392  {
393  ROS_DEBUG_STREAM("Could not reset wrench. Force error" << forceError);
394  success = false;
395  }
396 
397  Eigen::Vector3d torqueError;
398  torqueError << mean_wrench(3, 0) - desired_wrench.torque.x, mean_wrench(4, 0) - desired_wrench.torque.y,
399  mean_wrench(5, 0) - desired_wrench.torque.z;
400  if (torqueError.norm() > 0.01)
401  {
402  ROS_DEBUG_STREAM("Could not reset wrench. Torque error" << torqueError);
403  success = false;
404  }
405  count++;
406  }
407 
408  response.success = success;
409  ROS_INFO("[%s] Sensor measurements are reset successfully", name_.c_str());
410  return true;
411 }
413 {
414  firmwareUpdateService_ = nh_->advertiseService(nh_->getNamespace() + "/" + getName() + "/firmware_update",
416  resetWrenchService_ = nh_->advertiseService(nh_->getNamespace() + "/" + getName() + "/reset_wrench",
418 }
420 {
421  implPtr_->updateConnectionStatus(stat);
422 }
423 
425 {
426  connectionStatusUpdater_ = std::make_shared<diagnostic_updater::Updater>();
427  unsigned int serial_number;
428  implPtr_->getSerialNumber(serial_number);
429  connectionStatusUpdater_->setHardwareID(std::to_string(serial_number));
430  connectionStatusUpdater_->add(getName() + ": Device Connection Status", this,
432  // create the timer for the data flags diagnostics
433  dataFlagsDiagnosticsTimer_ = std::make_shared<ros::Timer>(
435  rosDiagnosticsSet_ = true;
436 }
438 {
440 }
441 
443 {
444  connectionStatusUpdater_->update();
445 }
446 
448 {
449  // publish the Data Flags Diagnostics
451  implPtr_->createDataFlagsDiagnostics(stat);
452  // reset the data flags
453  implPtr_->resetDataFlags();
454  // set the namespace of the diagnostics status
455  stat.name = nh_->getNamespace().substr(1) + ": " + getName() + ": Data Flags";
456  // set the hardware ID
457  unsigned int serial_number;
458  getSerialNumber(serial_number);
459  stat.hardware_id = std::to_string(serial_number);
460  // create the diagnostics array and fill it with the Diagnostics Status message
461  diagnostic_msgs::DiagnosticArray diagnostics_array;
462  diagnostics_array.status.emplace_back(stat);
463  // fill the Header
464  diagnostics_array.header.stamp = ros::Time::now();
465  dataFlagsDiagnosticsPublisher_->publish(diagnostics_array);
466 }
467 } // namespace serial
468 } // namespace rokubimini
response
const std::string response
ROS_ERROR_THROTTLE
#define ROS_ERROR_THROTTLE(period,...)
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::Rokubimini::statuswordRequested_
std::atomic< bool > statuswordRequested_
rokubimini::Rokubimini::dataFlagsDiagnosticsPublisher_
RosPublisherPtr dataFlagsDiagnosticsPublisher_
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::Rokubimini::getConfiguration
configuration::Configuration & getConfiguration()
rokubimini::serial::RokubiminiSerial::publishRosDiagnostics
void publishRosDiagnostics() override
Publish ROS diagnostics related to the operation of rokubimini.
Definition: RokubiminiSerial.cpp:437
rokubimini::Rokubimini::reading_
Reading reading_
rokubimini::serial::RokubiminiSerial::implPtr_
RokubiminiSerialImplPtr implPtr_
The pointer to implementation.
Definition: RokubiminiSerial.hpp:469
rokubimini::serial::RokubiminiWrenchRos
geometry_msgs::WrenchStamped RokubiminiWrenchRos
Definition: RokubiminiSerial.cpp:221
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::serial::RokubiminiSerial::wrenchPublisher_
RosPublisherPtr wrenchPublisher_
The sensor_msgs::Wrench publisher.
Definition: RokubiminiSerial.hpp:487
rokubimini::calibration::SensorCalibration::getCalibrationMatrix
Eigen::Matrix< double, 6, 6 > & getCalibrationMatrix()
rokubimini::Rokubimini::getName
std::string getName() const
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::Rokubimini::dataFlagsDiagnosticsTimer_
TimerPtr dataFlagsDiagnosticsTimer_
rokubimini::Rokubimini::getReading
Reading getReading() const
rokubimini::serial::RokubiminiReadingRos
rokubimini_msgs::Reading RokubiminiReadingRos
Definition: RokubiminiSerial.cpp:220
rokubimini::configuration::Configuration::setSensorConfiguration
void setSensorConfiguration(const SensorConfiguration &sensorConfiguration)
rokubimini::Reading::getStatusword
const Statusword & getStatusword() const
ROS_DEBUG_STREAM
#define ROS_DEBUG_STREAM(args)
rokubimini::Rokubimini::productName_
std::string productName_
rokubimini::serial::RokubiminiSerial::publishersSet_
bool publishersSet_
Flag to check whether publishers are ready.
Definition: RokubiminiSerial.hpp:578
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
ROS_WARN_STREAM
#define ROS_WARN_STREAM(args)
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::Rokubimini::name_
std::string name_
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::resetWrenchService_
ros::ServiceServer resetWrenchService_
The service for resetting the sensor wrench measurements.
Definition: RokubiminiSerial.hpp:511
rokubimini::configuration::Configuration::getForceTorqueOffset
const Eigen::Matrix< double, 6, 1 > & getForceTorqueOffset() const
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::configuration::Configuration::setSensorCalibration
void setSensorCalibration(const calibration::SensorCalibration &sensorCalibration)
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
DiagnosticStatusWrapper.h
RokubiminiSerial.hpp
ROS_WARN
#define ROS_WARN(...)
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::Rokubimini::connectionStatusUpdater_
DiagnosticsUpdaterPtr connectionStatusUpdater_
rokubimini::Rokubimini::nh_
NodeHandlePtr nh_
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::noFrameSyncCounter_
uint64_t noFrameSyncCounter_
The counter for measuring failed frame synchronizations.
Definition: RokubiminiSerial.hpp:519
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
rokubimini::Rokubimini::setStatusword
void setStatusword(Statusword &statusword)
rokubimini::configuration::Configuration::getSensorCalibration
const calibration::SensorCalibration & getSensorCalibration() const
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
ROS_ERROR
#define ROS_ERROR(...)
rokubimini::serial::RokubiminiSerial::createRosServices
void createRosServices() override
Adds ROS services related to the device.
Definition: RokubiminiSerial.cpp:412
rokubimini::serial::RokubiminiTemperatureRos
sensor_msgs::Temperature RokubiminiTemperatureRos
Definition: RokubiminiSerial.cpp:222
diagnostic_updater::DiagnosticStatusWrapper
rokubimini::configuration::SensorConfiguration
rokubimini::Rokubimini::configuration_
configuration::Configuration configuration_
rokubimini::calibration::SensorCalibration
rokubimini::Rokubimini::readingMutex_
std::recursive_mutex readingMutex_
rokubimini::serial::RokubiminiSerial::publishDataFlagsDiagnostics
void publishDataFlagsDiagnostics(const ros::TimerEvent &event)
Publishes the Data Flags Diagnostics to the "/diagnostics" topic.
Definition: RokubiminiSerial.cpp:447
rokubimini::configuration::Configuration::setForceTorqueOffset
void setForceTorqueOffset(const Eigen::Matrix< double, 6, 1 > &forceTorqueOffset)
ROS_INFO
#define ROS_INFO(...)
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
ros::Duration
rokubimini::Statusword
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
ros::Time::now
static Time now()


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