ROS 2 即時控制:截止日期、抖動與 ros2_control

即時機器人控制意味著所需的計算和輸入輸出在指定截止時間內完成,且抖動有界。這不僅僅是高平均影格率的意思。一個偶爾停頓幾毫秒的 1 kHz 環路,可能比一個最壞時序仍符合被控物件要求的較慢控制環更難使用。

ROS 2 可以是即時系統的一部分,但確定性依賴於作業系統、核心、排程、 CPU 和中斷的設定、記憶體行為、驅動程式、中介軟體路徑、控制器程式碼和硬體介面。非即時感知、紀錄和服務應穿越有界介面,而非在關鍵環路中執行。

請使用本指南,配合 機器人關節網路比較馬達-驅動架構。即時理賠需要在最可信負載和明確故障反應下進行測量。

從截止日期和漏掉的後果開始

定義控制週期、允許的啟動抖動、最差執行時間、 I/O 時序和資料年齡限制。然後定義錯過一次截止日期意味著什麼:保留有界命令、降低效能、停止控制器或進入更安全狀態。答案取決於被控物件的速度和危險程度。

軟即時、強即時和硬即時描述了截止日期錯過如何影響其實用性或可接受性;它們不是效能徽章。大多數通用機器人計算機需要系統特定的證據。保持與控制器設定的定時合約,這樣後續的軟體變更不會悄然使其失效。

TurtleBot3 漢堡展示機載電腦感測器、馬達控制器及佈線
一台機器人可以在更嚴格的運動控制任務之外執行感知和網路,但它們的排程和資料交換需要明確隔離。來源:Kuscu0,維基共享資源。許可:CC BY-SA 4.0

硬體環路遵循讀、更新和寫入

ros2_control 控制器管理器檔案描述了管理控制器和硬體介面的元件,並討論確定性。一個常見的迴圈讀取硬體狀態,更新控制器並以設定速率寫入命令。

物理取樣和命令應用實際發生的時間戳。軟體功能錄入不總是感測器捕獲時間。將狀態年齡跟蹤到控制器,命令年齡在驅動器上。迴圈可以在消耗過時的網路資料的同時定期執行。

迴圈階段截止日期證據隱藏延遲檢查
硬體讀取捕獲到可用時間裝置或匯流排佇列物理時間戳
控制器更新最差處決時間分配或鎖定痕跡時長
硬體寫入命令應用時間網路排程驅動器時間戳
資料交換生產者-消費者年齡回呼積壓序列計數器
故障路徑檢測到安全狀態服務或生命週期工作注入未中

排程策略需要 CPU 和中斷設計

即時執行緒可以使用固定優先順序排程策略並獲得適當權限,但僅靠優先順序並不等同於隔離。在考慮整個系統的情況下分配 CPU 親和力和中斷處理。高優先順序執行緒如果等待低優先順序鎖,仍然可能錯過截止日期。

測量來自網路、儲存、 GPU、攝影機和後台服務的干擾。避免導致核心或安全任務枯竭。檔案排程器、優先順序、親和力、電源狀態和韌體,確保測試和部署機器相當。

記憶體故障和分配會產生時序尾部

動態分配、頁錯誤、記憶體回收和無界容器增長可能引入可變延遲。預設定緩衝區,適當鎖定記憶體,預熱相關程式碼和資料路徑,保持訊息大小有界。未經驗證行為,勿在緊環中分配或釋放記憶體。

記憶體準備無法解決快取爭用或裝置 DMA 干擾。應對整個應用進行壓力,並檢查尾延遲。確認錯誤路徑、參數變更和控制器轉換在環路活躍時不會意外分配或阻塞。

阻塞式 I/O 和紀錄記錄應放在控制環之外

檔案寫入、控制檯輸出、同步服務、 DNS、動態發現和等待一般回呼在硬邊界更新路徑內不合適,除非有特定實現證明了邊界。透過即時安全機制向低優先順序消費者傳送簡潔診斷。

限制佇列長度,並決定是丟棄新資料還是舊資料。無界紀錄可以將時序問題轉移到記憶體增長。保留對丟失診斷的計數器,避免僅僅因為證據被丟棄而讓系統顯得健康。

以五個步驟整理ROS 2 即時控制:截止日期、抖動與 ros2_control的判讀重點
依正文與一手資料整理的繁體中文實務卡。來源:Physical AI Lab。

即時安全緩衝區分隔時序域

非即時規劃器可以將命令或軌跡釋出到無鎖或有界的切換中,控制器讀取最新的完整物件而無需等待生產者。狀態可以透過另一個有界快照向外移動。所有權和生命週期必須明確。

驗證命令序列、時間戳和超時。如果生產器熄火,內環不應無限重複舊轉矩。參數更新和模式開關也需要原子或分級應用,以確保部分更新的設定無法到達致動器。

營運處於臨界迴圈?首選圖案失效策略
閱讀關節狀態是的有界硬體介面檢測陳舊樣本
更新控制定律是的固定功與記憶截止日期監控
寫致動器命令是的有界介面本地暫停
儲存紀錄有界佇列到工作者掉落計數
服務或參數工作階段再換拒絕無效轉移

DDS 有用,但預設馬達電流環路並不適用

DDS 和 ROS 2 通訊可以支援可設定的服務質量和分散式應用,但內部的電流環路通常執行在驅動器或專用控制器內部。網路和執行路徑必須在進入嚴格的關節控制截止時間內進行測量。

在時間證據合適的位置使用 ROS 2 進行編排、軌跡、狀態及更高層。保持破壞性過流和快速保護本地化。中介軟體選擇不能取代驅動器級確定性控制或硬體安全電路。

追蹤暴露了罕見的排程和回呼延遲

ROS 2 檔案包括用於分析執行的 追蹤指導。儀器控制器週期、回呼、輸入輸出和截止日期監控,開銷低且具特徵性。將走線與驅動器和網路紀錄對齊。

收集長跑的直方圖和最大值,而非短期平均值。重現 CPU、網路、儲存、熱限速和圖形負載。辨識每個尾部之前發生的事件。單個最大值且無痕跡上下文難以修復,而一個沒有最大值的百分位數可能隱藏危險的失誤。

在某些系統中,即時核心是必要的,但不夠

可搶佔式即時核心可以降低排程延遲,但應用鎖、驅動、韌體、電源管理和無界程式碼依然存在。相反,一個動態較慢的被控物件可能在經過精心測量的非即時設定下達成截止日期。需求和證據決定。

驗證 BIOS、 CPU 電源狀態、散熱行為和驅動版本。核心、中介軟體、控制器或硬體更新後重新測試。生產映象和部署設定應與時序報告一起納入版本管理。

壓力測試必須包括漏擊和恢復

執行最大控制器數量、完整網路流量、感測器流、紀錄記錄和真實應用負載。新增熱浸、儲存活動和錯誤處理。測量週期、執行時間、捕獲到控制年齡、命令-應用年齡及連續未命中。

在支援的情況下注入過時狀態、控制器錯誤、硬體超時和時鐘變化。驗證預期的停用、停止或降級模式。即時環路只有在其故障行為也有限制時才具有操作價值。

評估“ROS 2 即時控制:截止日期、抖動與 ros2_control”時,還應儲存模型版本、機器人設定、校正檔案、測試日期和全部試驗記錄。

只有把這些持續投入與單位成功任務的價值比較,才能判斷方案是否適合擴大。

上線後仍要持續檢查分佈變化、感測器漂移、機械磨損和人工接管原因。

實際專案還應指定資料、模型、控制器和安全流程的負責人,並預先定義回復條件。責任邊界、審批記錄與變更紀錄越清楚,故障發生後越容易停止擴散、定位原因並安全恢復。

  • 寫週期、抖動和資料時代合約。
  • 保持讀-更新-寫路徑有邊界。
  • 預先設定記憶,移動,在戶外工作。
  • 在滿載生產負載下追蹤尾部延遲。
  • 定義並測試過時資料和漏掉週期的行為。

常見問題

ROS 2 本身是一個即時作業系統嗎?

不是。 ROS 2 是可以在作業系統、排程、程式碼、驅動和硬體經過相應設計和測量時,能夠參與即時系統的中介軟體和庫。

DDS 能讓關節控制環具備確定性嗎?

不是自動的。服務質量有助於通訊語意,但端對端延遲、致動器排程和硬體應用時間仍需證據。

更高的控制頻率總是更好嗎?

不行。被控物件、感測器、致動器和計算資源必須留有足夠裕量。更快且錯過截止日期的迴圈表現可能更差。

Python 能執行硬即時馬達迴圈嗎?

典型的 Python 執行存在非確定性來源,通常保持在最緊密的迴圈之外;僅在可測需求和架構允許的情況下使用。

應該先測量什麼時機?

測量從捕獲到命令的完整鏈,包括週期、最差執行、抖動、狀態年齡、命令-應用延遲和漏接週期恢復。

即時控制邊界說明

ROS 2 和即時核心本身並不能保證確定性。在最壞情況下的負載和所有相關故障轉移下,驗證排程、記憶體、驅動程式、通訊、控制器程式碼和硬體輸入輸出。

相關主題:倉儲揀選機器人如何運作?架構、指標與導入判斷