ROS 학습 노트 83(roscpp 이해 타이머)

3425 단어 ROS 학습 노트
원본 링크:http://wiki.ros.org/roscpp_tutorials/Tutorials/Timers
1 타이머 란 무엇 인가
타 이 머 는 일정한 속도 로 시간 을 정 해 리 셋 함 수 를 호출 합 니 다.They are a more flexible and useful form of the ros::Rate used in the Writing a Simple Publisher and Subscriber tutorial.
Note that Timers are not a realtime thread/kernel replacement, and make no guarantees about how accurate they are, which can vary wildly because of system load/capabilities.
2 타이머 사용
타 이 머 를 만 드 는 작업 원 리 는 구독 자 를 만 드 는 것 과 매우 유사 합 니 다.
ros::Timer timer = n.createTimer(ros::Duration(0.1), timerCallback);

리 셋 함수 의 형식 은 다음 과 같 습 니 다.
void timerCallback(const ros::TimerEvent& e);

세 가지 완전한 예
ow that you've seen the basics, let's go through a larger example, with multiple Timers.
#include "ros/ros.h"

/**
 * This tutorial demonstrates the use of timer callbacks.
 */

void callback1(const ros::TimerEvent&)
{
  ROS_INFO("Callback 1 triggered");
}

void callback2(const ros::TimerEvent&)
{
  ROS_INFO("Callback 2 triggered");
}

int main(int argc, char **argv)
{
  ros::init(argc, argv, "talker");
  ros::NodeHandle n;

  /**
   * Timers allow you to get a callback at a specified rate.  Here we create
   * two timers at different rates as a demonstration.
   */
  ros::Timer timer1 = n.createTimer(ros::Duration(0.1), callback1);
  ros::Timer timer2 = n.createTimer(ros::Duration(1.0), callback2);

  ros::spin();

  return 0;
}


3.2 프로그램 해석
앞의 튜 토리 얼 을 무시 하고 두 줄 의 설명 부분 만 남 깁 니 다.
ros::Timer timer1 = n.createTimer(ros::Duration(0.1), callback1);
ros::Timer timer2 = n.createTimer(ros::Duration(1.0), callback2);

 여기 서 우 리 는 두 개의 타 이 머 를 만 듭 니 다.그 중 하 나 는 트리거 간격 이 100 밀리초 이 고 그 중 하 나 는 트리거 매 초 입 니 다.이 프로그램 을 실행 하려 면 다음 과 같이 출력 해 야 합 니 다.
[ INFO] 1251854032.362376000: Callback 1 triggered
[ INFO] 1251854032.462840000: Callback 1 triggered
[ INFO] 1251854032.562464000: Callback 1 triggered
[ INFO] 1251854032.662169000: Callback 1 triggered
[ INFO] 1251854032.762649000: Callback 1 triggered
[ INFO] 1251854032.862853000: Callback 1 triggered
[ INFO] 1251854032.962642000: Callback 1 triggered
[ INFO] 1251854033.063118000: Callback 1 triggered
[ INFO] 1251854033.162221000: Callback 1 triggered
[ INFO] 1251854033.262749000: Callback 1 triggered
[ INFO] 1251854033.262864000: Callback 2 triggered
[ INFO] 1251854033.362643000: Callback 1 triggered
[ INFO] 1251854033.463158000: Callback 1 triggered
...

4 The TimerEvent Structure
The ros::TimerEvent structure provides you information about the timing of the current timer. Here is its definition:
struct TimerEvent
{
  Time last_expected;                     ///< In a perfect world, this is when the last callback should have happened
  Time last_real;                         ///< When the last callback actually happened

  Time current_expected;                  ///< In a perfect world, this is when the current callback should be happening
  Time current_real;                      ///< This is when the current callback was actually called (Time::now() as of the beginning of the callback)

  struct
  {
    WallDuration last_duration;           ///< How long the last callback ran for, always in wall-clock time
  } profile;
};

 

좋은 웹페이지 즐겨찾기