ROS 日志消息(C++)

1.日志级别node

日志消息分为五个不一样的严重级别宏,与Android的Log定义的严重级别相似,以下基础宏:spa

ROS_DEBUG_STREAM、ROS_INFO_STREAM、ROS_WARN_STREAM、ROS_ERROR_STREAM、ROS_FATAL_STREAM(按照严重程序级别排序,低到高)
C++代码: #include <ros/ros.h>

    int main(int argc, char** argv){ ros::init(argc, argv, "hello_ros"); ros::NodeHandle nh; ROS_DEBUG_STREAM("Log DEBUG"); ROS_INFO_STREAM("Log INFO"); ROS_WARN_STREAM("Log WARN"); ROS_ERROR_STREAM("Log ERROR"); ROS_FATAL_STREAM("Log FATAL"); }

从运行结果来看,你会发现DEBUG没有打印出来,Why?淡定,4会解答日志

2.循环单第二天志code

基础宏后面添加_ONCE,表明日志在循环迭代中只有第一次才会打印日志:blog

C++代码: #include <ros/ros.h>

    int main(int argc, char** argv){ ros::init(argc, argv, "hello_ros"); ros::NodeHandle nh; for(int i = 0; i < 10; i++){ ROS_INFO_STREAM_ONCE("Log info i = " << i); if(i >= 2){ ROS_INFO_STREAM_ONCE("Log info i = " << i); } } }

3.频率日志
排序

基础宏后面添加_THROTTLE就变为了频率日志,入ROS_INFO_STREAM_THROTTLE(interval, message),第一个参数interval表明以秒为单位的时间量,时间量指的是两个日志出现的最小时间间隔it


 

4.打开、关闭日志class

1中提到DEBUG日志信息没有输出,缘由是C++程序默认的日志级别为INFO,全部DEBUG日志被忽略掉了,那问题来了,如何打开DEBUG级别日志呢?基础

rosservice call /node-name/set_logger_level ros.package-name level
C
++代码: #include <ros/ros.h> int main(int argc, char** argv){     ros::init(argc, argv, "hello_ros");     ros::NodeHandle nh;     while(ros::ok()){         ROS_DEBUG_STREAM("Log DEBUG");         ROS_INFO_STREAM("Log INFO");         ROS_WARN_STREAM("Log WARN");         ROS_ERROR_STREAM("Log ERROR");         ROS_FATAL_STREAM("Log FATAL");     } } 启动上面节点,而后终端运行rosservice call /hello_ros/set_logger_level ros.hello DEBUG

转自:https://www.jianshu.com/p/b360728ad6d1循环

相关文章
相关标签/搜索