ROS2中的日志,rosbag和其他工具

日志

1
2
3
4
5
RCLCPP_DEBUG(get_logger(), "我是DEBUG级别的日志,我被打印出来了!");
RCLCPP_INFO(get_logger(), "我是INFO级别的日志,我被打印出来了!");
RCLCPP_WARN(get_logger(), "我是WARN级别的日志,我被打印出来了!");
RCLCPP_ERROR(get_logger(), "我是ERROR级别的日志,我被打印出来了!");
RCLCPP_FATAL(get_logger(), "我是FATAL级别的日志,我被打印出来了!");

运行节点时,可以指定日志的最低等级: ros2 run lpackage_name executable_name --ros-args --log-level info。 可选等级: debug, warn, fatal

日志默认都没有颜色,要加颜色需要 export RCUTILS_COLORIZED_OUTPUT=1


设置日志的格式: export RCUTILS_CONSOLE_OUTPUT_FORMAT="[{severity} {date_time_with_ms}] [{name}]: {message}"

RCUTILS_CONSOLE_OUTPUT_FORMAT - 控制每条日志消息输出的字段。可用字段有:

  • {severity} - 严重级别。

  • {name} - 日志记录器的名称(可能为空)。

  • {message} - 日志消息(可能为空)。

  • {function_name} - 调用此函数的函数名称(可能为空)。

  • {file_name} - 调用此函数的文件名(可能为空)。

  • {time} - 自纪元以来的秒数。

  • {time_as_nanoseconds} - 自纪元以来的纳秒数。

  • {line_number} - 调用此函数的行号(可能为空)。

如果未提供格式,则使用默认格式 [{severity}] [{time}] [{name}]: {message}

参考:ROS2 日志


  • ros2 bag record -o bag_name topic_1 topic_2

  • ros2 bag info subset

结果类似这样

1
2
3
4
5
6
7
8
9
10
11
Files:             test_0.db3
Bag size: 424.5 KiB
Storage id: sqlite3
ROS Distro: unknown
Duration: 11.497778868s
Start: Sep 16 2025 18:03:07.911158571 (1758016987.911158571)
End: Sep 16 2025 18:03:19.408937439 (1758016999.408937439)
Messages: 57
Topic information: Topic: /global_path | Type: nav_msgs/msg/Path | Count: 57 | Serialization Format: cdr
Service: 0
Service information:

  • ros2 bag play subset

-r可以指定播放速度,-l是无限循环播放

  • ros2 bag play —start-offset 450 bag_file

这个命令很有用,从 450 秒处开始播放

ros2的bag直到25年5月的Kilted版本才能使用--progress-bar命令显示播放进度,而这个版本不是一个LTS版本,所以想用这个功能,只能从rosbag2的源码编译


ros2doctor可以检测大概的ros2整体配置,ros2doctor并不是一个调错的工具,对你的代码调试没有帮助. 它一般查找你系统中警告部分,只有UserWarning: ERROR:开头的可能是错误。另外可以检查发布者没有订阅者的问题。

运行 ros2 doctor 或者 ros2 doctor --report