ROS_INFO与ROS_INFO_STREAM

1.输出调试信息
ROS自带了大量的能够输出调试信息的函数和宏,包括错误,警告等.它提供了如信息级别,条件触发消息和STL的流接口等方式.
直接上例子,新建catkin工程,工程名为rosdebugtest

#include 
#include 

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;
}

(1)调试级别c和c++用法
其中 ROS_INFO(“INFO message %d”,k),相当于c中的printf;
ROS_INFO_STREAM ( "INFO message." <;相当于c++中的cout;
而调试的显示级别有5种
DEBUG
INFO
WARN
ERROR
FATAL
(2)为调试信息命名
ROS_INFO_STREAM_NAMED( “named_msg”, “INFO named message.” );
表示为这段信息命名,为了更容易知道这段信息来自那段代码.

(3)设置显示频率

ROS_INFO_STREAM_THROTTLE( 2, "INFO throttle message." );

THROTTLE表示节流的意思,以上代码运行两次输出一次INFO throttle message.
(4)单次显示
ros中可以在循环中让信息只输出一次
使用ROS_[_STREAM]_ONCE[_NAMED]

ROS_INFO_STREAM_ONCE("loop start")

2.使用rosconsole和设置显示级别
ROS的调试信息可以用rosconsole查看和设置,用法如下
(1)查看节点
rosnode list
(2)查看节点的log(节点名rosdebugtest)
rosconsole list rosdebugtest
输出如下
ros
ros.roscpp
ros.roscpp.roscpp_internal
ros.roscpp.superdebug
ros.rosdebugtest
ros.rosdebugtest.named_msg
(3)查看log显示级别
Usage: rosconsole get
rosconsole get rosdebugtest ros.rosdebugtest.named_msg

(4)动态设置log的显示级别

Usage:rosconsole set <node> <logger> <level>

rosconsole set rosdebugtest ros.rosdebugtest debug

或者用图形化界面设置
启动rqt_logger_level

rosrun rqt_logger_level rqt_logger_level

(5)在编译时设置源代码的调试级别
由于编译时默认显示的是INFO级别,因此调试时为了看到Debug信息,需要在编译是设置调试级别。
在 ros::init( argc, argv, “rosdebugtest” );后加入这一句就行了

ros::console::set_logger_level(ROSCONSOLE_DEFAULT_NAME,ros::console::levels::Debug);

(6)设置ros默认输出级别
更改文件
$ROS_ROOT/config/rosconsole.config
文件内容如下

# Set the default ros output to warning and higher
log4j.logger.ros=WARN
# Override my package to output everything
log4j.logger.ros.my_package_name=DEBUG

http://wiki.ros.org/rosconsole

你可能感兴趣的:(ROS_INFO与ROS_INFO_STREAM)