SyncDiagnostic.h
Go to the documentation of this file.
1 #ifndef INCLUDE_RTABMAP_SYNC_SYNCDIAGNOSTIC_H_
2 #define INCLUDE_RTABMAP_SYNC_SYNCDIAGNOSTIC_H_
3 
4 #include "rtabmap/utilite/UStl.h"
5 
8 
10 
11 namespace rtabmap_sync {
12 
14  public:
15  SyncDiagnostic(ros::NodeHandle h = ros::NodeHandle(), ros::NodeHandle ph = ros::NodeHandle("~"), std::string nodeName = ros::this_node::getName(), double tolerance = 0.1, int windowSize = 5) :
16  diagnosticUpdater_(h, ph, nodeName),
17  frequencyStatus_(diagnostic_updater::FrequencyStatusParam(&targetFrequency_, &targetFrequency_, tolerance)),
18  timeStampStatus_(diagnostic_updater::TimeStampStatusParam()),
19  compositeTask_("Sync status"),
20  lastCallbackCalledStamp_(ros::Time::now().toSec()-1),
21  targetFrequency_(0.0),
22  windowSize_(windowSize)
23  {
24  UASSERT(windowSize_ >= 1);
25  }
26 
27  void init(
28  const std::string & topic,
29  const std::string & topicsNotReceivedWarningMsg,
30  std::vector<diagnostic_updater::DiagnosticTask*> otherTasks = std::vector<diagnostic_updater::DiagnosticTask*>())
31  {
32  topicsNotReceivedWarningMsg_ = topicsNotReceivedWarningMsg;
33 
34  std::list<std::string> strList = uSplit(topic, '/');
35  for(int i=0; i<2 && strList.size()>1; ++i)
36  {
37  // Assuming format is /back_camera/left/image, we want "back_camera"
38  strList.pop_back();
39  }
43  for(size_t i=0; i<otherTasks.size(); ++i)
44  {
45  diagnosticUpdater_.add(*otherTasks[i]);
46  }
47  diagnosticUpdater_.setHardwareID(strList.empty()?"none":uJoin(strList, "/"));
50  }
51 
52  void tick(const ros::Time & stamp, double targetFrequency = 0)
53  {
55  timeStampStatus_.tick(stamp);
56  double singlePeriod = stamp.toSec() - lastCallbackCalledStamp_;
57 
58  window_.push_back(singlePeriod);
59  if(window_.size() > windowSize_)
60  {
61  window_.pop_front();
62  }
63  double period = 0.0;
64  if(window_.size() == windowSize_)
65  {
66  for(size_t i=0; i<window_.size(); ++i)
67  {
68  period += window_[i];
69  }
70  period /= windowSize_;
71  }
72 
73  if(period>0.0 && targetFrequency == 0 && (targetFrequency_ == 0.0 || period < 1.0/targetFrequency_))
74  {
75  targetFrequency_ = 1.0/period;
76  }
77  else if(targetFrequency>0)
78  {
79  targetFrequency_ = targetFrequency;
80  }
82  }
83 
84 private:
86  {
88 
90  {
92  }
93  }
94 
95  private:
105  std::deque<double> window_;
106 
107 };
108 
109 }
110 
111 #endif /* INCLUDE_RTABMAP_SYNC_SYNCDIAGNOSTIC_H_ */
diagnostic_updater::CompositeDiagnosticTask::addTask
void addTask(DiagnosticTask *t)
diagnostic_updater::FrequencyStatus
rtabmap_sync::SyncDiagnostic::topicsNotReceivedWarningMsg_
std::string topicsNotReceivedWarningMsg_
Definition: SyncDiagnostic.h:96
diagnostic_updater::Updater::force_update
void force_update()
rtabmap_sync
Definition: CommonDataSubscriber.h:59
ros
ROS_WARN_THROTTLE
#define ROS_WARN_THROTTLE(period,...)
uJoin
std::string uJoin(const std::list< std::string > &strings, const std::string &separator="")
diagnostic_updater::TimeStampStatus
rtabmap_sync::SyncDiagnostic
Definition: SyncDiagnostic.h:13
diagnostic_updater::Updater
UStl.h
TimeBase< Time, Duration >::toSec
double toSec() const
h
const double h
rtabmap_sync::SyncDiagnostic::targetFrequency_
double targetFrequency_
Definition: SyncDiagnostic.h:103
publisher.h
diagnostic_updater.h
rtabmap_sync::SyncDiagnostic::diagnosticTimerCallback
void diagnosticTimerCallback(const ros::TimerEvent &event)
Definition: SyncDiagnostic.h:85
rtabmap_sync::SyncDiagnostic::window_
std::deque< double > window_
Definition: SyncDiagnostic.h:105
diagnostic_updater::FrequencyStatus::tick
void tick()
rtabmap_sync::SyncDiagnostic::SyncDiagnostic
SyncDiagnostic(ros::NodeHandle h=ros::NodeHandle(), ros::NodeHandle ph=ros::NodeHandle("~"), std::string nodeName=ros::this_node::getName(), double tolerance=0.1, int windowSize=5)
Definition: SyncDiagnostic.h:15
rtabmap_sync::SyncDiagnostic::init
void init(const std::string &topic, const std::string &topicsNotReceivedWarningMsg, std::vector< diagnostic_updater::DiagnosticTask * > otherTasks=std::vector< diagnostic_updater::DiagnosticTask * >())
Definition: SyncDiagnostic.h:27
diagnostic_updater::TimeStampStatus::tick
void tick(const ros::Time t)
diagnostic_updater
rtabmap_sync::SyncDiagnostic::windowSize_
int windowSize_
Definition: SyncDiagnostic.h:104
UASSERT
#define UASSERT(condition)
ros::TimerEvent
rtabmap_sync::SyncDiagnostic::diagnosticTimer_
ros::Timer diagnosticTimer_
Definition: SyncDiagnostic.h:101
diagnostic_updater::CompositeDiagnosticTask
rtabmap_sync::SyncDiagnostic::timeStampStatus_
diagnostic_updater::TimeStampStatus timeStampStatus_
Definition: SyncDiagnostic.h:99
diagnostic_updater::Updater::setHardwareID
void setHardwareID(const std::string &hwid)
rtabmap_sync::SyncDiagnostic::tick
void tick(const ros::Time &stamp, double targetFrequency=0)
Definition: SyncDiagnostic.h:52
ros::this_node::getName
const ROSCPP_DECL std::string & getName()
diagnostic_updater::Updater::update
void update()
rtabmap_sync::SyncDiagnostic::frequencyStatus_
diagnostic_updater::FrequencyStatus frequencyStatus_
Definition: SyncDiagnostic.h:98
uSplit
std::list< std::string > uSplit(const std::string &str, char separator=' ')
rtabmap_sync::SyncDiagnostic::lastCallbackCalledStamp_
double lastCallbackCalledStamp_
Definition: SyncDiagnostic.h:102
ros::Time
rtabmap_sync::SyncDiagnostic::compositeTask_
diagnostic_updater::CompositeDiagnosticTask compositeTask_
Definition: SyncDiagnostic.h:100
ULogger.h
diagnostic_updater::DiagnosticTaskVector::add
void add(const std::string &name, TaskFunction f)
rtabmap_sync::SyncDiagnostic::diagnosticUpdater_
diagnostic_updater::Updater diagnosticUpdater_
Definition: SyncDiagnostic.h:97
ros::Duration
ros::Timer
i
int i
ros::NodeHandle
ros::Time::now
static Time now()


rtabmap_sync
Author(s): Mathieu Labbe
autogenerated on Mon Apr 28 2025 02:39:12