ROS 中的日志 (log) 消息

引言

ROS 日志 (log) 系統(tǒng)的功能是讓程序生成一些日志消息,顯示在屏幕上、發(fā)送到特定 topic 或者儲存在特定 log 文件中,以方便調(diào)試、記錄、報警等。

ROS 中的日志消息按照嚴(yán)重性由低到高可以分為 5 級:DEBUG、INFO、WARN、ERROR、FATAL。DEBUG 程度最輕,只要程序可以運行就不需要注意,但 ERROR 和 FATAL 出現(xiàn)就表示程序存在著嚴(yán)重問題導(dǎo)致無法運行。

下面簡單介紹如何生成和查看日志消息。

生成基本的日志消息

由五個 C++ 宏來產(chǎn)生日志消息,每個宏對應(yīng)一個級別:

ROS_DEBUG_STREAM(message);  
ROS_INFO_STREAM(message);  
ROS_WARN_STREAM(message);  
ROS_ERROR_STREAM(message);  
ROS_FATAL_STREAM(message);

例如編寫如下 C++ 程序

source_code.png

編譯、執(zhí)行之后結(jié)果如下:


log.png

生成一次性日志消息

ROS 提供了可以僅僅生成一次日志消息的宏:

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

將上述 C++ 程序中的 log 命令替換一下,得到如下的執(zhí)行結(jié)果:

一次性日志消息.png

可以看到每個日志只生成了一次。

生成頻率受控的日志消息

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

參數(shù) interval 是 double 型,表示相鄰日志消息出現(xiàn)的最小時間間隔,以秒為單位。

pinlv.png

查看日志消息

日志消息有三個不同的輸出目的地,包括屏幕、rosout topic、log 文件。其中發(fā)布到 rosout topic 的 msg 類型是 rosgraph_msgs/Log。除了 topic echo,還可以通過 rqt_console 查看日志消息:

rosout.png

啟用和禁用日志消息

ROS 默認(rèn)只處理 INFO 或者更高級別消息,DEBUG 級別的消息會被忽略。

可以通過命令行設(shè)置顯示的日志級別

rosservice call /node-name/set_logger_level rospackage-name level

其中

  • set_logger_level服務(wù)由各個節(jié)點自動提供;
  • node-name 期望設(shè)置日志級別的節(jié)點名稱;
  • package-name 擁有這個節(jié)點的 package 名稱;
  • level 是五個級別中的一個。

另外也可以通過圖形界面設(shè)置日志級別

rqt_logger_level

打開如下界面:

圖形化界面設(shè)置.png

圖中列出了節(jié)點列表、日志記錄器列表、日志級別列表。在圖中操作與 rosservice 命令的效果一致。

另外,也可以在 C++ 程序中設(shè)置日志級別。ROS node 改變自身日志級別最直接的方式是使用 log4cxx 提供的接口:

#include <log4cxx/logger.h>
log4cxx::Logger::getLogger(ROSCONSOLE_DEFAULT_NAME)->setLevel(
ros::console::g_level_lookup[ros::console::levels::Debug]);
ros::console::notifyLoggerLevelsChanged();

其中 Debug 可以替換為 Info、Warn、Error、Fatal。

written by YY
Revised by QP

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容