跳转至

日志宏

在 ROS 中,日志打印系统是一套完整的、用于调试、监控和运行时信息输出的机制。ROS 提供了一套宏,如 ROS_INFO()ROS_WARN()ROS_ERROR() 等,这些是写 C++ ROS 节点时打印日志的主要方式。

ROS 宏分类与功能

ROS C++ 日志宏定义在 ros/console.h 中(默认通过 ros/ros.h 引入)。

含义 等价级别 用途示例
ROS_DEBUG(...) 调试信息 DEBUG 不默认输出,仅调试时开启
ROS_INFO(...) 常规运行信息 INFO 程序状态更新,启动成功等
ROS_WARN(...) 警告信息 WARN 异常但可继续运行,如接收到无效数据
ROS_ERROR(...) 错误信息 ERROR 严重错误,但节点继续运行
ROS_FATAL(...) 致命错误 FATAL 关键故障,节点可能终止

ROS 宏使用方法

类似于 printf() ,可使用格式化字符串,例如

C++
ROS_INFO("Landing point updated to (%.6f, %.6f, %.2f)", land_wp.x_lat, land_wp.y_long, land_wp.z_alt);

ROS 日志输出特点

自动包含时间戳与节点名。其输出格式类似:

LessCss
[INFO] [1623345678.123456]: [node_name] 电量过低仅剩 18%

日志除了在节点运行过程中会输出到控制台以外,还会自动输出到 ~/.ros/log 目录下。

ROS 日志级别控制

日志级别:DEBUG < INFO < WARN < ERROR < FATAL。

每个日志宏会检查当前“最低级别”设置,未达级别的日志不输出。默认是 INFO,则只有 INFOWARNERRORFATAL 会显示;DEBUG 被抑制。可以通过以下两种方式修改最低级别:

方法一:在 ROS 包的 config/ 目录下创建 console_config.yaml 文件,其内容如下(以 DEBUG 级别为例)

YAML
log4j.logger.ros=DEBUG

再通过以下方式运行 ROS 节点:

Bash
ROSCONSOLE_CONFIG_FILE=config/console_config.yaml rosrun your_pkg your_node

方法二:在运行时通过参数设置

Bash
rosconsole set /your_node ros DEBUG

其它类型的宏

含义
ROS_INFO_COND(cond, ...) 仅当 cond 为 true 时输出
ROS_WARN_ONCE(...) 只打印一次
ROS_ERROR_THROTTLE(rate, ...) rate 秒最多打印一次
ROS_DEBUG_STREAM(...) 使用流式语法输出
ROS_INFO_STREAM("abc" << 1.0 << "m") 更适合组合复杂字符串