rosbag2 記錄帶時間戳的 ROS 2 訊息,並透過 ROS 介面重放。完成的包目錄並不能證明所有必需主題都連線了,訊息保持了物理時間,也不能證明儲存能持續感測器突發。資料接受必須針對每個主題進行。
QoS 相容性會影響記錄器是否接收到資料以及回放資料能否到達訂閱端。訊息頭中的源時間戳可能與記錄器接收時間不同。壓縮、快取大小、儲存外掛和檔案拆分會在資源占用與恢復行為之間取捨。請保留這些選擇。
將本指南與 ROS 2 QoS 指南 及 機器人學習資料質量審計結合使用。在重放命令前隔離致動器。
將一個包視為定時訊息資料集
rosbag 的價值來自訊息有效負載、主題身份、類型定義、源時間戳、記錄時間戳以及相關係統設定。一個大檔案仍然可能遺漏一個解釋高速流中每個命令的低速率模式主題。
在記錄前定義分析或重現目標。培訓、事件重建、校正和視覺化需要不同的主題和時間精度。記錄機器可讀的清單,包含必需和可選的流。

凍結主題、類型及預期利率
列出主題名稱、類型、預期釋出者、名義速率、最大間隙、 QoS 和保留優先順序。在需要解釋感測器和動作資料時,包含 /tf、/tf_static、時鐘、校正、參數或模式變更。
自動發現可以捕獲新主題,但不能保證短暫的主題會在發現輪詢前出現,或不相容的端點交換資料。每次執行後將最終 rosbag 後設資料與清單進行比較。
| 合約專案 | 錄製前 | 錄製後 | 故障訊號 |
|---|---|---|---|
| 主題與類型 | 凍結清單 | 比較後設資料 | 缺失的流 |
| 速率與計數 | 估計持續時間計數 | 測量差距 | 爆發損失 |
| QoS | 檢查釋出端 | 確認連線 | 無聲零計數 |
| 時鐘 | 宣告時間源 | 檢測步數和零時間 | 破碎的年表 |
| 設定 | 版本軟體與校正 | 與包一起存放 | 不可解釋的資料 |
QoS 可以製造一個沉默的空話題
記錄器為訂閱制,必須與釋出者相容。可靠性和耐久性不匹配可能阻礙通訊。可能需要覆蓋,但應從檢測端點推匯出,而非全域應用。
在任務開始前執行端點檢查和簡短試用。 目前的 rosbag2 倉庫和檔案 按分支追蹤功能,因此請歸檔所使用的確切 ROS 發行版和軟體包版本。
將原始碼與接收時間分開
訊息頭可以表示暴露、取樣、驅動處理或其他源定義事件。 rosbag2 還記錄記錄器接收序列訊息的時間。網路延遲和致動器延遲可以區分這些時間,而有些訊息沒有標準頭部。
為每個主題記錄時間戳語意。比較源時間和記錄時間分佈,並標記不可能排序。單調記錄時間的包仍可能包含來自未同步裝置的感測器印記。

突發次數的大小,而非平均吞吐量
計算平均每秒位元組數,然後測試同時執行的攝影機、光達和點雲突發。序列化、快取複製、壓縮和儲存重新整理會產生短峰值。使用一個順序檔案進行磁碟基準測試並不能再現完整的流水線。
監控錄影機快取佔用情況、丟棄訊息指示器、 CPU、記憶體、磁碟延遲和熱狀態。在所有生產者啟用的情況下,執行任務持續時間。為後設資料、分割和故障恢復留出空間,而不是將檔案系統填滿到極限。
| 瓶頸 | 度規 | 應力條件 | 測試緩解措施 |
|---|---|---|---|
| 發現還是 QoS | 相關主題計數 | 已故出版人 | 靜態列表或覆蓋 |
| 記錄快取 | 佔用率與下落 | 感測器爆發 | 快取與寫入調優 |
| 中央處理器 | 利用率與回呼延遲 | 壓縮 | 執行緒與編解碼器的選擇 |
| 儲存 | 寫延遲與佇列 | 沖洗或熱限 | 更快的媒體或分割 |
| 播放消費者 | 樣本年齡與佇列 | 高回放率 | 費率與 QoS 計劃 |
選擇儲存和分層進行恢復
儲存外掛在格式和行為上有所不同。檔案拆分限制了中斷後需要複製、索引或恢復的單元。根據操作處理按大小或時長劃分,但確認每個段中消費者獲得了所需的瞬時-本地上下文。
測試代表性介質上的突然斷電、過程終止以及重新索引或恢復流程。最大化一個大檔案的設計可能會增加事故丟失並延遲現場上傳。
壓縮以儲存換取計算和延遲
壓縮會減少磁碟頻寬和容量,同時消耗 CPU 並增加延遲。訊息和檔案壓縮具有不同的粒度和恢復特性。高度壓縮的攝像主題可能收穫有限,同時仍承擔處理開銷。
在錄製電腦上對準確的主題混合和編解碼器進行基準測試。測量總掉落次數、 CPU 尾部、寫入延遲和最終大小。在未確認記錄器始終領先於最壞情況輸入的情況下,不要啟用策略壓縮。
使用快照錄音作為事件前證據
迴圈或快照工作流將最新資料儲存在記憶體中,並在事件發生時寫入。這樣在間歇性故障前保持上下文,而無需儲存整個班次的資料。但當斷電或觸發過晚時,它也有可能丟失緩衝區。
定義緩衝區持續時間、記憶體上限、觸發源和事件後間隔。測試多個觸發器、分割行為和併發複製。記錄觸發事件本身,以便分析師對齊原因和捕獲。
明確處理模擬時間和時鐘跳躍
在使用模擬時間錄製時,記錄器依賴於/clock。目前的 rosbag2 檔案警告說,在第一個有效時鐘之前錄製可能會引發零時間問題;播放行為還取決於時鐘釋出和使用者的 use_sim_time 設定。
測試暫停、重置、倒跳和重啟。儲存世界、種子和模擬器版本。除非下游工具明確支援,否則將時間跳躍視為回合邊界。
回放重新建立新的端點契約
播放過程中, rosbag2 成為釋出者。消費者的 QoS、期望速率、時鐘模式和啟動順序可能與錄製不同。當延遲啟動的訂閱端開始執行時,必須具備瞬態和靜態變換。
檢查播放 QoS 覆蓋,並以受控順序啟動消費者。使用沙盒名稱空間並禁用硬體輸出。錄製的速度或致動器命令絕不應僅僅因為主題名稱匹配而傳送到正在執行的真實機器人。
根據計數、空隙和語意接受每個主題
對於每個所需流,將實際計數與時長和預期速率進行比較,計算訊息間隙,檢查時間戳單調性和樣本有效負載。交叉核對相關主題,如影像和相機資訊、狀態與指令,或變換與點雲。
然後透過參考消費者重放,驗證有用的輸出。僅靠檔案大小無法揭示缺失的低頻寬主題、校正損壞或時域不匹配。
將錄製視為受控程式
錄製前,檢查儲存空間、時鐘、主題清單、 QoS 連線和軟體設定。錄製後,乾淨地停止,執行完整性檢查,計算雜湊值,並移動帶有清單和權利資訊的資料。
在資料進入培訓或事件分析之前,使用釋出清單。
評估“rosbag2 錄製與回放:QoS、時間戳與安全重放”時,還應儲存模型版本、機器人設定、校正檔案、測試日期和全部試驗記錄。
只有把這些持續投入與單位成功任務的價值比較,才能判斷方案是否適合擴大。
上線後仍要持續檢查分佈變化、感測器漂移、機械磨損和人工接管原因。
實際專案還應指定資料、模型、控制器和安全流程的負責人,並預先定義回復條件。責任邊界、審批記錄與變更紀錄越清楚,故障發生後越容易停止擴散、定位原因並安全恢復。
- 凍結必修主題、類型、門 QoS 和價格。
- 測試任務持續時間內的爆發吞吐量。
- 比較原始碼和記錄時間戳。
- 按計數、空檔和回放來接受每個主題。
- 保持 rosbag 與線上致動器話題隔離。
常見問題
rosbag2 執行時會記錄所有話題嗎?
只記錄選定或發現的相容主題;短命、不相容或超載的流可能缺失。
可靠 QoS 能消除錄音丟失嗎?
不會。相容性、快取、 CPU、儲存和釋出者行為仍可能導致空檔或延遲。
壓縮功能應該一直開啟嗎?
不是。是針對實際話題組合的基準測試體積節省,涉及 CPU 的延遲和訊息丟失。
預計的檔案大小足夠接受一個包嗎?
不需要。驗證每個主題的計數、間隔、時間戳、有效負載和回放結果。
一個 rosbag 能直接重播給真實的機器人嗎?
預設情況下不安全。先隔離名稱空間和硬體,檢查命令主題並驗證播放環境。
記錄資料證據邊界
rosbag 是 ROS 訊息的記錄資料,不是物理真實性或完整覆蓋的證明。在依賴它們之前,請驗證時鐘、QoS、內容和設定。