11 static const double BILLION = 1000000000.0;
13 int main(
int argc,
char **argv)
17 double cycle_time_error_threshold_ = 0.02;
23 struct timespec last_time_;
24 struct timespec current_time_;
25 struct timespec read_time_, write_time_, update_time_;
26 ros::Duration elapsed_time_read_, elapsed_time_write_, elapsed_time_update_;
45 clock_gettime(CLOCK_MONOTONIC, &last_time_);
50 clock_gettime(CLOCK_MONOTONIC, ¤t_time_);
52 ros::Duration(current_time_.tv_sec - last_time_.tv_sec + (current_time_.tv_nsec - last_time_.tv_nsec) /
BILLION);
54 elapsed_time_read_ =
ros::Duration(read_time_.tv_sec - last_time_.tv_sec + (read_time_.tv_nsec - last_time_.tv_nsec) /
BILLION);
55 elapsed_time_write_ =
ros::Duration(write_time_.tv_sec - last_time_.tv_sec + (write_time_.tv_nsec - last_time_.tv_nsec) /
BILLION);
56 elapsed_time_update_ =
ros::Duration(update_time_.tv_sec - last_time_.tv_sec + (update_time_.tv_nsec - last_time_.tv_nsec) /
BILLION);
58 last_time_ = current_time_;
59 const double cycle_time_error = (elapsed_time_ - desired_update_freq_).toSec();
60 if (cycle_time_error > cycle_time_error_threshold_)
63 << cycle_time_error <<
", cycle time: " << elapsed_time_
64 <<
", threshold: " << cycle_time_error_threshold_ <<
", read time: " << elapsed_time_read_
65 <<
", update time: " << elapsed_time_update_
66 <<
", write time: " << elapsed_time_write_);
70 clock_gettime(CLOCK_MONOTONIC, &read_time_);
80 clock_gettime(CLOCK_MONOTONIC, &update_time_);
82 clock_gettime(CLOCK_MONOTONIC, &write_time_);
static const double BILLION
ROSCPP_DECL void init(int &argc, char **argv, const std::string &name, uint32_t options=0)
boost::chrono::steady_clock time_source
#define ROS_WARN_STREAM(args)
void update(const ros::Time &time, const ros::Duration &period, bool reset_controllers=false)
int main(int argc, char **argv)