日志宏
在 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 日志输出特点
自动包含时间戳与节点名。其输出格式类似:
LessCss | |
---|---|
日志除了在节点运行过程中会输出到控制台以外,还会自动输出到 ~/.ros/log
目录下。
ROS 日志级别控制
日志级别:DEBUG < INFO < WARN < ERROR < FATAL。
每个日志宏会检查当前“最低级别”设置,未达级别的日志不输出。默认是 INFO
,则只有 INFO
、WARN
、ERROR
、FATAL
会显示;DEBUG
被抑制。可以通过以下两种方式修改最低级别:
方法一:在 ROS 包的 config/ 目录下创建 console_config.yaml 文件,其内容如下(以 DEBUG 级别为例)
YAML | |
---|---|
再通过以下方式运行 ROS 节点:
Bash | |
---|---|
方法二:在运行时通过参数设置
Bash | |
---|---|
其它类型的宏
宏 | 含义 |
---|---|
ROS_INFO_COND(cond, ...) |
仅当 cond 为 true 时输出 |
ROS_WARN_ONCE(...) |
只打印一次 |
ROS_ERROR_THROTTLE(rate, ...) |
每 rate 秒最多打印一次 |
ROS_DEBUG_STREAM(...) |
使用流式语法输出 |
ROS_INFO_STREAM("abc" << 1.0 << "m") |
更适合组合复杂字符串 |