ROS1 vs ROS2:從通訊架構到即時性,技術本質到底差在哪
2026-08-30
表面上是同一套框架,底層是完全不同的通訊哲學
ROS2 常被介紹成「ROS1 的升級版」,但如果只看成 API 名稱換了一些寫法、多了幾個新功能,會低估兩者之間真正的差異——ROS2 的核心通訊架構是徹底重新設計的,這個差異不是表面的版本迭代,而是解決了 ROS1 在設計之初就沒有考慮到的一整類問題:多機器人協作、不穩定網路環境下的可靠通訊、以及工業與商用部署對即時性與安全性的要求。理解這個底層差異,比記住 API 名稱怎麼從 rospy 換成 rclpy 更能幫助判斷什麼場景該用哪一個版本。
通訊架構:中心化 Master vs 去中心化 DDS
ROS1 的通訊建立在一個中心化的 ROS Master 節點上——所有節點啟動時都要先跟 Master 註冊自己發布或訂閱的主題,節點之間要通訊,必須先透過 Master 完成「配對」(node discovery),配對完成後才會建立點對點的直接連線做實際資料傳輸。這個架構簡單直觀、容易除錯(rosnode list、rostopic list 這類指令都是直接問 Master),但也帶來一個結構性弱點:Master 是單點故障——一旦 Master 行程當掉,即使既有的點對點連線可能還能運作一小段時間,任何新節點都無法加入系統,也無法建立任何新的訂閱配對關係。
ROS2 放棄了中心化 Master,改用 DDS(Data Distribution Service,工業界既有的即時發布訂閱通訊標準)作為底層通訊層。DDS 本身就是去中心化設計——節點透過網路上的探索協定(discovery protocol)互相廣播自己的存在與可提供/需要的資料介面,不需要依賴任何單一中心節點居中協調。這個改變直接消除了 ROS1 架構裡的單點故障風險,也是 ROS2 能原生支援多機器人系統(每台機器人各自運行自己的節點群,彼此透過 DDS 探索協定自動互聯,不需要指定某一台機器人的 Master 當作全網路的協調中樞)的架構基礎,這跟本站在多機器人系統一文中討論的協作場景直接相關。
QoS:ROS1 完全沒有原生方案的可靠度分級
ROS1 的主題通訊,本質上只有一套固定的傳輸行為——所有訊息都盡力傳送,沒有內建機制讓開發者針對不同資料類型調整可靠度與延遲的取捨。實務上這造成一個現實問題:像雷射雷達掃描資料這種高頻率、可以容忍偶爾漏收(反正下一次掃描很快又來)的資料,跟像緊急停止指令這種絕對不能漏收的資料,在 ROS1 裡走的是同一套沒有差異化的傳輸機制,如果要做可靠度分級,只能在應用層自己額外加上重傳確認邏輯,等於是重新發明 DDS 本來就內建的功能。
ROS2 直接把 DDS 的 QoS(Quality of Service) 策略體系搬進了通訊層——同一個系統裡,不同的主題可以各自設定不同的可靠度(Reliable 保證送達、Best Effort 允許漏失換取更低延遲)、歷史保留策略(只保留最新一筆、還是保留一段佇列深度)、以及存活時間等參數。這讓一套系統可以同時滿足「感測器串流要低延遲、允許偶爾漏收」跟「控制指令必須保證送達」這兩種互相衝突的需求,不需要為了遷就其中一種需求犧牲另一種,這也是本站在 QoS 完整解析 詞條中詳細討論的機制,是 ROS2 相對 ROS1 在通訊層最直接可感受到的實務差異。
即時性與工業部署:生命週期節點的意義
ROS1 的節點沒有標準化的狀態管理機制——一個節點啟動之後就直接進入運行狀態,沒有內建的「已配置但尚未啟動」「已啟動但暫停」這類中介狀態,這對單一實驗室的研究原型不成問題,但對工業產線這種需要嚴謹啟動順序、且必須能在特定條件下優雅暫停或重啟個別模組而不中斷整個系統的場景,就是明顯的限制。
ROS2 引入的 生命週期節點(Lifecycle Node,詳見生命週期節點)提供了一套標準化的狀態機(unconfigured、inactive、active、finalized),讓系統可以精確控制每個節點的啟動時序與運行狀態轉換,這對本站在 micro-ROS 即時系統 與 ROS2 安全機制 SROS2 文章中討論過的工業與嵌入式部署場景尤其關鍵——工廠產線的機器人系統往往需要協調數十個節點依特定順序啟動、且要能在異常發生時安全地暫停個別模組而不影響其他仍在運行的子系統,這種精細的生命週期管理需求,在 ROS1 裡完全沒有標準化方案,只能靠開發者各自土法煉鋼。
該怎麼看待這個技術世代交替
ROS1 到 ROS2 的轉變,本質上是機器人軟體從「服務單一實驗室原型驗證」的工具,演進成「服務多機協作、工業部署、需要安全與即時性保證」的通訊基礎設施的必然結果——這些需求在 ROS1 設計之初的機器人研究場景裡並不突出,但隨著機器人技術從實驗室走向真實商業部署(本站報導過的大量倉儲機器人車隊、工廠 AMR 部署案例都是多機協作場景),ROS1 的架構限制逐漸從「無傷大雅的簡化」變成「結構性瓶頸」,這也是為什麼即使遷移成本不低,整個機器人產業與研究社群仍然全面轉向 ROS2 作為新專案的預設起點。
常見問題
- ROS1 已經停止官方支援了,為什麼還有工廠或研究團隊在用?
- 主要是既有系統的遷移成本問題。很多產線或研究平台的控制邏輯、驅動程式、甚至整個軟體堆疊是在 ROS1 全盛時期建立的,重寫成 ROS2 不只是 API 語法轉換,還牽涉到中心化 Master 架構換成 DDS 分散式架構後,整個系統的啟動順序、除錯方式、網路組態都要重新設計與驗證,對已經穩定運行多年、修改風險必須降到最低的產線系統而言,「能動就先別動」往往是比追求新技術更務實的決策,這也是為什麼即使官方支援已經終止,仍有相當比例的既有部署選擇留在 ROS1,只在新專案上採用 ROS2。
- DDS 聽起來比 ROS1 的 Master 架構複雜很多,這種複雜度真的有必要嗎?
- 對單機、單一實驗室環境的專案而言,DDS 的複雜度確實常常顯得「殺雞用牛刀」——一台機器人、幾個節點,用 ROS1 的中心化架構反而更直觀好除錯。但 DDS 真正要解決的是 ROS1 架構在特定場景下的結構性限制:多機器人系統裡沒有單一 Master 意味著沒有單點故障,任何一台機器人的節點掛掉都不會癱瘓整個網路的通訊;QoS 策略讓同一套系統可以針對不同資料類型(感測器串流 vs 控制指令)套用不同的可靠度與延遲取捨,這在多機協作、或者跨越不穩定網路環境(例如 Wi-Fi 訊號時強時弱的戶外機器人)的應用場景裡,是 ROS1 完全沒有原生解法、只能靠應用層自行想辦法補強的問題。複雜度的必要性取決於你的部署規模與環境穩定性,不是放諸四海皆準的優劣判斷。
- 如果現在要開始一個全新專案,還有理由選 ROS1 而不是 ROS2 嗎?
- 幾乎沒有,除非有非常特殊的既有相依性限制(例如某個關鍵驅動程式或第三方套件至今仍只有 ROS1 版本、且沒有社群維護的 ROS2 移植版)。ROS1 官方已經停止長期支援版本的更新,新的安全修補與功能開發資源幾乎全部投入 ROS2,本站整套 ROS 課程規劃(從節點通訊、Nav2 導航、MoveIt2 機械手臂控制到 sim-to-real 部署)也是完全以 ROS2 為基礎設計。對全新專案而言,選 ROS1 幾乎沒有前瞻性的技術理由,唯一的例外是評估既有生態系相依性後,發現遷移到 ROS2 的成本在專案時程內確實無法承受,才會考慮暫時沿用 ROS1,但這應該被視為過渡性妥協,而不是長期策略。
相關術語
- ros2
- ros1
- dds
- qos
- real-time
訂閱 RoboTech Lab 電子報
每週一封,整理新的教學、論文導讀與機器人業界動態。隨時可以取消訂閱。