19 #ifndef FF_UTIL_PERF_TIMER_H_
20 #define FF_UTIL_PERF_TIMER_H_
24 #include <ff_msgs/Performance.h>
34 ros::NodeHandle nh(
"/performance");
35 pub_ = nh.advertise<ff_msgs::Performance>(
name, 5);
40 msg_.count = msg_.mean = msg_.var = msg_.stddev = 0.0;
41 msg_.last = msg_.max = msg_.min = -1.0;
45 start_ = std::chrono::system_clock::now();
49 std::chrono::time_point<std::chrono::system_clock> end;
50 end = std::chrono::system_clock::now();
51 std::chrono::duration<double> dt = end - start_;
53 msg_.stamp = ros::Time::now();
55 msg_.last = dt.count();
56 if (msg_.last > msg_.max || msg_.min < 0.0) msg_.max = msg_.last;
57 if (msg_.last < msg_.min || msg_.min < 0.0) msg_.min = msg_.last;
60 msg_.var = (msg_.count - 2.0) / (msg_.count - 1.0) * msg_.var
61 + (msg_.last - msg_.mean) * (msg_.last - msg_.mean) / msg_.count;
62 msg_.mean = ((msg_.count - 1.0) * msg_.mean + msg_.last) / msg_.count;
64 msg_.mean = msg_.last;
67 msg_.stddev = sqrt(msg_.var);
75 std::chrono::time_point<std::chrono::system_clock> start_;
76 ff_msgs::Performance msg_;
83 #endif // FF_UTIL_PERF_TIMER_H_