42 #define NSEC_PER_SEC    1000000000L    45 int main(
int argc, 
char** argv)
    47   ros::init(argc, argv, 
"seed_r7_ros_controller");
    53   if (!hw.
init(nh, robot_nh)) {
    54     ROS_ERROR(
"Failed to initialize hardware");
    68   ROS_INFO(
"ControllerManager start with %f Hz", 1.0/period);
    72   long main_thread_period_ns = period*1000*1000*1000;
    73   double max_interval = 0.0;
    74   double ave_interval = 0.0;
    76   clock_gettime(CLOCK_MONOTONIC, &m_t);
    82       tm.tv_nsec = m_t.tv_nsec;
    83       tm.tv_sec  = m_t.tv_sec;
    84       tm.tv_nsec += main_thread_period_ns;
    89       clock_nanosleep(CLOCK_MONOTONIC, TIMER_ABSTIME, &tm, NULL);
    92         ROS_INFO(
"max: %f [ms], ave: %f [ms]", max_interval/1000, ave_interval/1000);
    97       clock_gettime(CLOCK_MONOTONIC, &n_t);
    98       const double measured_interval
    99         = ((n_t.tv_sec - m_t.tv_sec)*
NSEC_PER_SEC + (n_t.tv_nsec - m_t.tv_nsec))/1000.0;  
   100       if (measured_interval > max_interval) max_interval = measured_interval;
   101       if (ave_interval == 0.0) {
   102         ave_interval = measured_interval;
   104         ave_interval = (measured_interval + (100 - 1)*ave_interval)/100.0;
   106       m_t.tv_sec  = n_t.tv_sec;
   107       m_t.tv_nsec = n_t.tv_nsec;
   113     hw.
read  (now, d_period);
   115     hw.
write (now, d_period);
 int main(int argc, char **argv)
ROSCPP_DECL void init(int &argc, char **argv, const std::string &name, uint32_t options=0)
void update(const ros::Time &time, const ros::Duration &period, bool reset_controllers=false)
virtual void read(const ros::Time &time, const ros::Duration &period)
virtual void write(const ros::Time &time, const ros::Duration &period)
virtual bool init(ros::NodeHandle &root_nh, ros::NodeHandle &robot_hw_nh)