rqt_bag 源码详细分析

rqt_bag 源码详细分析

工作区路径:/home/cp/work2/ros2Learn/ros2_humble/src/ros-visualization/rqt_bag
版本:1.1.6rqt_bag + rqt_bag_plugins)。

rqt_bag 提供 ROS bag 文件 GUI:浏览、回放、录制;rqt_bag_plugins 提供消息视图插件(图像、曲线)。ROS 2 端口使用 rosbag2 API。


1. 子包结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
rqt_bag/
├── rqt_bag/ # 主 GUI 插件
│ ├── src/rqt_bag/
│ │ ├── bag.py # rqt 插件入口
│ │ ├── bag_widget.py # 主界面
│ │ ├── player.py # 回放控制
│ │ ├── recorder.py # 录制
│ │ ├── rosbag2.py # rosbag2 封装
│ │ ├── bag_timeline.py # 时间轴
│ │ ├── timeline_cache.py
│ │ ├── message_loader_thread.py
│ │ └── plugins/ # 内置消息视图插件框架
│ └── plugin.xml
└── rqt_bag_plugins/ # 扩展视图
├── image_plugin.py / image_view.py
└── plot_plugin.py / plot_view.py

2. 架构

flowchart TB
  subgraph ui [UI 层]
    BAG["bag.Bag Plugin"]
    BW["BagWidget"]
    TL["BagTimeline"]
  end

  subgraph engine [引擎]
    PLAYER["Player"]
    REC["Recorder"]
    RB2["rosbag2.py"]
  end

  subgraph views [视图插件]
    RAW["RawView"]
    IMG["ImagePlugin"]
    PLOT["PlotPlugin"]
  end

  BAG --> BW --> TL
  BW --> PLAYER & REC --> RB2
  TL --> views

3. 主插件 bag.py

  • 继承 rqt_gui_py.plugin.Plugin
  • plugin.xmlrqt_bag.bag.Bag
  • 创建 BagWidget,嵌入 dock

4. 回放 player.py

  • 按时间轴读取 rosbag2 消息
  • 通过 rclpy 重发布到对应 topic
  • Player 时钟、/clock(sim time)协调

5. 录制 recorder.py

  • 选择 topic 写入 bag
  • QoS 映射见 qos.py

6. rosbag2 封装 rosbag2.py

rosbag2_py / storage 的 Python 封装:打开 bag、迭代消息、查 metadata。


7. 时间轴与缓存

模块 作用
bag_timeline.py 时间刻度、播放头
timeline_cache.py 消息索引缓存
index_cache_thread.py 后台建索引
message_loader_thread.py 异步加载消息体

8. 视图插件体系

8.1 内置框架 plugins/plugin.py

1
2
3
class Plugin:
def get_timeline_renderer(self): ...
def get_message_view(self): ...

8.2 rqt_bag_plugins

插件 功能
ImagePlugin 显示 sensor_msgs/Image
PlotPlugin 数值字段绘图

各自 plugin.xml 注册为 base_class_type="rqt_bag::Plugin"


9. 依赖

1
2
3
4
5
rqt_bag
├── rqt_gui_py, qt_gui
├── rclpy
├── rosbag2_py / rosbag2
└── python_qt_binding

10. 启动

1
2
ros2 run rqt_bag rqt_bag
# 或在 rqt 菜单 Plugins → Logging → Bag

11. 小结

rqt_bag 是 ROS 2 bag 可视化的主工具:时间轴 + 多线程 IO + 可扩展消息视图;与 CLI ros2 bag play 互补,适合调试与 inspection。

文章互动

阅读 --

留言

0 条留言

正在加载留言…