RCLCPP_WARN_THROTTLE的官方说明在此,即
1 2 3 4 5
| #define RCLCPP_WARN_THROTTLE (logger, clock, duration, ... )
|
此声明是用于控制告警信息的一个时间间隔,duration的时间为毫秒,如果在duration时间之内已经发送过一次警告了,则不再执行本次警告。clock则记录本次打出警告的时间
使用示例
1 2
| rclcpp::Clock steady_clock(RCL_STEADY_TIME); RCLCPP_WARN_THROTTLE(this->get_logger(), steady_clock, 1000, "RCLCPP_WARN_THROTTLE was called");
|
这句话的意思就表示,打印warn的时间间隔不得小于1000ms。
Clock中可以传入多种时间,分别为系统时间RCL_SYSTEM_TIME
,ROS时间RCL_ROS_TIME
,和稳定的时间RCL_STEADY_TIME
。有什么区别暂时不知道,打印出来是一样的。。。
输出结果示例
我把此warn写入一个topic callback,每100ms接受到一个message,但是warn要1000ms一次
1 2 3 4 5 6 7 8 9 10 11 12 13
| [WARN] [1634871226.715184170] [minimal_subscriber]: RCLCPP_WARN_THROTTLE was called [INFO] [1634871226.814115514] [minimal_subscriber]: I heard: 'Hello, world! 48' [INFO] [1634871226.913323879] [minimal_subscriber]: I heard: 'Hello, world! 49' [INFO] [1634871227.012755620] [minimal_subscriber]: I heard: 'Hello, world! 50' [INFO] [1634871227.111737842] [minimal_subscriber]: I heard: 'Hello, world! 51' [INFO] [1634871227.210964278] [minimal_subscriber]: I heard: 'Hello, world! 52' [INFO] [1634871227.310321142] [minimal_subscriber]: I heard: 'Hello, world! 53' [INFO] [1634871227.409564982] [minimal_subscriber]: I heard: 'Hello, world! 54' [INFO] [1634871227.508874625] [minimal_subscriber]: I heard: 'Hello, world! 55' [INFO] [1634871227.608132403] [minimal_subscriber]: I heard: 'Hello, world! 56' [INFO] [1634871227.707389626] [minimal_subscriber]: I heard: 'Hello, world! 57' [INFO] [1634871227.806639776] [minimal_subscriber]: I heard: 'Hello, world! 58' [WARN] [1634871227.806787053] [minimal_subscriber]: RCLCPP_WARN_THROTTLE was called
|
注意
dashing 版本还没有此功能,可以使用其他的进行替换