rosconsole 設定

dma_dma發表於2020-12-16

verbose 介紹

這是一個rospackage,可以用來控制console output方式, log的詳盡程度。它有8種logging statement,5種verbosity level,2種formatting style。

ItemOptions
Logging statementBase, Named, Conditional, Conditional Named, Once, Throttle, Delayed throttle, Filter
Verbosity levelDEBUG, INFO, WARN, ERROR, FATAL
Formatting stylePrintf, stream

這裡主要介紹2種常用的形式。

Base

Logger 會儲存到ros.<package_name>

// printf style: ROS_DEBUG(...)
// stream style: ROS_DEBUG_STREAM(args)

#include <ros/console.h>
ROS_DEBUG("Hello %s", "World");
ROS_DEBUG_STREAM("Hello " << "World");

Named

Logger 會儲存到ros.<package_name>.test_only

// printf style: ROS_DEBUG_NAMED(name, ...)
// stream style: ROS_DEBUG_STREAM_NAMED(name, args)

#include <ros/console.h>
ROS_DEBUG_NAMED("test_only", "Hello %s", "World");
ROS_DEBUG_STREAM_NAMED("test_only", "Hello " << "World");

verbose設定改變

方式1: 通過configuration檔案

關於default logger的設定檔案位於 $ROS_ROOT/config/rosconsole.config。若希望可以定義自己的config, 則可以使用ROSCONSOLE_CONFIG_FILE引數,通過這個引數定義的內容,會overwrite default config file.

具體的做法是:

  1. 在package 下建立/config/rosconsole.conf檔案, 設定logger如下
# 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
  1. 把這個設定放在launch 檔案中
<launch>
  <env name="ROSCONSOLE_CONFIG_FILE"
       value="$(find mypackage)/custom_rosconsole.conf"/>
  <node pkg="mypackage" type="mynode" name="mynode" output="screen"/>
</launch>

方式2: 通過 rqt_logger_level / rqt_console tool

該方法可以在node執行的時候使用。

rosrun rqt_logger_level rqt_logger_level
rosrun rqt_console rqt_console

方式3: 直接在code中設定

#include <ros/console.h>
if( ros::console::set_logger_level(ROSCONSOLE_DEFAULT_NAME,
ros::console::levels::Debug) ) {
   ros::console::notifyLoggerLevelsChanged();
}