• ROS学习之日志消息


    转:https://www.cnblogs.com/flyingjun/p/8831455.html

    1、ros调试信息,输出不同颜色字体

    ROS学习之日志消息

    ROS日志系统的核心思想,就是使程序生成一些简短的文本字符流,这些字符流便是日志消息。

    0.1严重级别

           ROS中,日志消息分为五个不同的严重级别,也可简称为严重性或者级别。按照严重性程度递增,这些级别有
           DEBUG
           INFO
           WARN
           ERROR
           FATAL

    0.2生成日志消息

    0.2.1简单日志消息

         生成简单的日志消息,总共有五个基本的 C++宏用来产生日志消息,其中每个宏对应一个严重级别:
         ROS_DEBUG_STREAM(message);
         ROS_INFO_STREAM(message);
         ROS_WARN_STREAM(message);
         ROS_ERROR_STREAM(message);
         ROS_FATAL_STREAM(message);

         其实这个宏的定义就把格式输出包含到里面,其中各个宏的参数 message 可以处理 C++中标准输出流(ostream)中的各种表达式,比如 std::cout。这包括在 int 或者 double 这种基本数据类型上使用插入操作符(<<),以及已经重载这个操作符的 复 合 数 据 类 型 

    #include <ros/ros.h>
    #include <ros/console.h>
    
    int main( int argc, char **argv )
    {
      ros::init( argc, argv, "rosdebug" );
      ros::NodeHandle n;
      ros::Rate rate( 1 );
    
      while( ros::ok() ) {
        ROS_INFO_STREAM_ONCE("loop start");
        ROS_DEBUG_STREAM( "DEBUG message." );
        ROS_INFO_STREAM ( "INFO message."  );
        ROS_WARN_STREAM ( "WARN message."  );
        ROS_ERROR_STREAM( "ERROR message." );
        ROS_FATAL_STREAM( "FATAL message." );
        ROS_INFO_STREAM_NAMED( "named_msg", "INFO named message." );
        ROS_INFO_STREAM_THROTTLE( 2, "INFO throttle message." );
        ros::spinOnce();
        rate.sleep();
      }
      return 1;
    }

    0.2.2生成单次日志消息

         生成单次消息,其实就是在程序中加入了一个静态局部变量来检测,进入一次后就把变量改为false则下次检测到后则不输出该信息。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    // Don't do this directly. Use ROS_..._STREAM_ONCE instead.
    {
    static bool first_time = true ;
    if (first_time) {
    ROS_INFO_STREAM( "Here's some important information"
    <<" that will only appear once.");
    first_time = false;
    }
    }

         ROS_DEBUG_STREAM_ONCE(message);
         ROS_INFO_STREAM_ONCE (message);
         ROS_WARN_STREAM_ONCE (message);
         ROS_ERROR_STREAM_ONCE (message);
         ROS_FATAL_STREAM_ONCE (message); 

    0.2.3生成频率受控日志消息

         参数 interval 是 double 类型的,它表示以秒为单位的时间量,这是相邻日志消息出现的最小时间间隔。 ROS_..._STREAM_THROTTLE宏的每一个实例在第一次执行时都会生成日志消息(与不带_THROTTLE 后缀版本宏的日志消息相同),随后的执行都会被忽略,直到经过了指定的时间间隔。每个宏的实例的时间被单独跟踪,方法是使用一个局部静态变量来存储上一次生成日志的时间。

         ROS_DEBUG_STREAM_THROTTLE(interval, message);
         ROS_INFO_STREAM_THROTTLE(interval, message);
         ROS_WARN_STREAM_THROTTLE(interval, message);
         ROS_ERROR_STREAM_THROTTLE(interval, messge);
         ROS_FATAL_STREAM_THROTTLE(interval, message);

    0.3查看日志消息

    0.3.1控制台输出日志

    0.3.2rosout输出日志

        除了在控制台上显示,每一个日志消息都被发布到话题/rosout 上。该话题的消息类型是 rosgraph_msgs/Log

        我们可以通过rostopic echo /rosout 来查看消息,也可以通过一个节点来订阅日志话题还可以通过指令rqt_console来通过图形界面来显示日志消息。

    0.3.3日志文件

       日志消息的第三个,也是最后一个目的地,是由 rosout 节点生成的日志文件。作为/rosout 话题回调函数的一部分,该节点可以将日志消息作为一行写入到一个日志文件,文件名类似于:~/.ros/log/run_id/rosout.log

            有时日志过多时需要我们清除系统日志,利用指令rosclean check如果日志正在消耗过多的硬盘空间,可以通过下面的命令删除所有已经存在的日志:rosclean purge

    0.4日志启用和禁用

    0.4.1通过命令行设置日志级别

            设置一个节点的日志级别,可以使用与以下类似的命令:rosservice call /node-name/set_logger_level     ros.package-name     level条命令调用 set_logger_level 服务,该服务由各个节点自动提供。
            node-name 是你期望设置日志级别的节点名称
            package-name 正如你猜测的一样,是拥有这个节点的功能包的名称

            level 参数是 DEBUG、INFO、WARN、ERROR、FATAL 中的一个89字符串,即为节点设置的日志级别。
           例如,为了在示例程序中启用 DEBUG 级别的消息,我们可以使用下面这条命令:
           rosservice call /count_and_log/set_logger_level ros.agitr DEBUG
           注意,由于这条命令直接与节点进行交互,我们不能在节点启动之前使用它。如果一切正常,这个对 rosservice 的调用将输出一个空行。

    0.4.2通过图形界面设置日志级别
           可以尝试以下命令:rqt_logger_level来通过图形界面进行配置

  • 相关阅读:
    Java之JDK的下载与安装,java环境变量的配置,Editplus的下载与使用
    JAVA基础语法
    数据库设计
    数据库练习题
    连接查询,子查询,联合查询
    Java内存管理-掌握虚拟机类加载器(五)
    Java内存管理-掌握虚拟机类加载机制(四)
    Java内存管理-JVM内存模型以及JDK7和JDK8内存模型对比总结(三)
    Java内存管理-初始JVM和JVM启动流程(二)
    Java内存管理-程序运行过程(一)
  • 原文地址:https://www.cnblogs.com/Glucklichste/p/11147471.html
Copyright © 2020-2023  润新知