ROS 機器人技術 - rosbag 詳細使用教程!

在 ROS 系統中,可以使用 bag 文件來保存和恢復系統的運行狀態,比如錄製雷達和相機話題的 bag 包,然後回放用來進行聯合外參標定。

這裏記錄下我學習官方的 rosbag 教程的筆記:ROS rosbag

我常用的幾個操作

雖然命令很多,但是我目前在工作中常用的命令就如下幾個:

1. 錄包

錄製所有話題:

rosbag record -a

錄製指定話題,設置 bag 包名:

rosbag record -O bag_name.bag /topic1_name /topic2_name /xxx

有時候我錄製包不設置名稱,默認按照錄制結束時間命名:

rosbag record /topic1_name /topic2_name /xxx

2. 回放

我常用的是以暫停的方式啓動,防止跑掉數據:

rosbag play --pause record.bag

你也可以直接回放:

rosbag play record.bag

我建圖過程中有時會設置以 0.5 倍速回放,也就是以錄製頻率的一半回放:

rosbag play -r 0.5 record.bag

回放完後,我一般會用 rostopic list 查看下發布的主題,確保是我需要的:

rostopic list

3. 修復

之前在我們小車的 Intel NUC 上錄包拷到臺式機上回放會報錯,提示需要 reindex,執行一下即可,不過數據好像會少一些:

rosbag reindex xxx.bag

下面是完整的 rosbag 用法,需要的可以查找下。

一、rosbag 基本作用

rosbag 工具可以錄製一個包、從一個或多個包中重新發布消息、查看一個包的基本信息、檢查一個包的消息定義,基於 Python 表達式過濾一個包的消息,壓縮和解壓縮一個包以及重建一個包的索引。

rosbag 目前常用的命令如下(fix 和 filter 暫時沒有用到):

  • record:用指定的話題錄製一個 bag 包
  • info:顯示一個 bag 包的基本信息,比如包含哪些話題
  • play:回放一個或者多個 bag 包
  • check:檢查一個 bag 包在當前的系統中是否可以回放和遷移
  • compress:壓縮一個或多個 bag 包
  • decompress:解壓縮一個或多個 bag 包
  • reindex:重新索引一個或多個損壞 bag 包

我在目前項目的使用中,用的最多的就是 record、info 以及 play 功能,先錄製想要的話題包,錄製完畢檢查下包的信息,最後再回放作爲算法的輸入,下面就詳細學習下上面命令的用法。

二、rosbag record

使用 record 訂閱指定主題並生成一個 bag 文件,其中包含有關這些主題的所有消息,常見用法如下。

用指定的話題 topic_names 來錄製 bag 包:

rosbag record <topic_names>

比如錄製 rosouttfcmd_vel 3 個話題,錄製的 bag 包以時間命名:

rosbag recoed rosout tf cmd_vel

錄製完保存 bag 包名稱爲 session1 + 時間戳.bag 格式:

rosbag record -o session1 /chatter

錄製完保存爲指定文件名 session2_090210.bag

rosbag record -O session2_090210.bag /chatter

錄製系統中所有的話題:

rosbag record -a

使用 -h 查看 record 使用方法,很多命令都可以用這個:

rosbag record -h

三、rosbag info

rosbag info 顯示包文件內容的可讀摘要,包括開始和結束時間,主題及其類型,消息計數、頻率以及壓縮統計信息,常見用法如下:

顯示一個 bag 包的信息:

rosbag info name.bag
$ rosbag info foo.bag
path:        foo.bag
version:     2.0
duration:    1.2s
start:       Jun 17 2010 14:24:58.83 (1276809898.83)
end:         Jun 17 2010 14:25:00.01 (1276809900.01)
size:        14.2 KB
messages:    119
compression: none [1/1 chunks]
types:       geometry_msgs/Point [4a842b65f413084dc2b10fb484ea7f17]
topics:      /points   119 msgs @ 100.0 Hz : geometry_msgs/Point

查看常用命令:

rosbag info -h

輸出 YAML 格式的信息:

rosbag info -y name.bag

輸出 bag 中指定域的信息,比如只顯示持續時間:

rosbag info -y -k duration name.bag

四、rosbag play

rosbag play 讀取一個或多個 bag 文件的內容,並以時間同步的方式回放,時間同步基於接收消息的全局時間。回放開始後,會根據相對偏移時間發佈消息。

如果同時回放兩個單獨的 bag 文件,則根據時間戳的間隔來播放。比如我先錄製一個 bag1 包,等待一個小時,然後錄製另一個 bag2 包,那我在一起回放 bag1 和 bag2 時,在回放的中間會有 1 個小時的停滯期,也就是先回放 bag1,然後需要等待 1 個小時才能回放 bag2。

在回放過程中按空格暫停,常見用法如下,回放單個 bag:

rosbag play record.bag

回放多個 bag,基於全局時間間隔播放:

rosbag play record1.bag record2.bag

開始播放立刻暫停,按空格繼續:

rosbag play --pause record.bag

以錄製的一半頻率回放:

rosbag play -r 0.5 --pause record.bag

指定回放頻率,默認 100HZ:

rosbag play --clock --hz=200 record.bag

循環播放:

rosbag play -l record.bag

五、rosbag check

檢查一個 bag 在當前系統中是否可以回放:

rosbag check xxx.bag

六、rosbag compress

如果錄製的 bag 很大,我們可以壓縮它,默認的壓縮格式是 bz2:

rosbag compress xxx.bag

你也可以添加 -j 手動指定壓縮格式爲 bz2:

rosbag compress -j xxx.bag

也可以使用 LZ4 來壓縮數據:

rosbag compress --lz4 xxx.bag

七、rosbag decompress

壓縮完後,使用需要解壓縮:

rosbag decompress xxx.bag

八、rosbag reindex

如果回放遇到問題,提示 reindex 的話,直接執行即可,這個會自動生成一個原 bag 的備份:

rosbag reindex xxx.bag

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章