--- title: 實驗記錄-34 tags: 實驗記錄 --- # 實驗記錄-34 > ROS 學習 ## 系統架構 ROS 1 與 ROS 2 在使用上的最大差異性,在於各個節點之間的連接方式,我們將以下圖說明 ROS 1 與 ROS 2 的系統架構差異性: ![](https://i.imgur.com/7YXrhQy.png) - 系統層(Operating System Layer) - ROS 1 僅支援 Linux 系統,不過在 2018 年時,微軟宣布在 Windows 10 上也能夠以實驗性質的方式安裝 ROS 1。 - ROS 2 則能夠支援較多的作業系統,如:Linux、Windows、Mac、RTOS。 - 中介軟體層(Middleware Layer) - ROS 1 採用 TCPROS/UDPROS 為通訊標準。 - ROS 2 則是使用 DDS 為通訊標準。 - 應用層(Application Layer) - ROS 1 需要使用主節點(Master Node)連接其餘節點,因此若是主節點失去作用,則整個 ROS 1 系統將會無法使用。 - ROS 2 使用分布式發現機制(distributed discovery process)連結節點,若是其中一個節點失去作用,並不至於讓整個 ROS 2 系統停擺。 ## 用戶端的程式語言 ROS 的目的是為了提高程式碼的使用率,因此不論是 ROS 1 或 ROS 2,皆能夠支援多種程式語言讓開發者進行使用。下面我們將以開發者最常使用的兩種程式語言進行差異性的比較: - C++ - ROS 1 中, 主要是以 C++ 03 作為核心, 並且無法使用 C++ 11 的 API(Application Programming Interface)特性。 - ROS 2 廣泛地使用C++ 11 的特性,並且在最新的長期支援版本 Foxy 中使用了 C++ 14,預計之後的版本將會使用 C++ 17 做為主要的平台使用。 - Python - ROS 1 中,以 Python 2 作為核心,不過在最新的 ROS 1 -Noetic 版本中則是以 Python 3 作為核心。 - ROS 2 則是使用 Python 3.5 以上作為核心。 ## 使用現有的中介軟體層 - ROS 1 使用自訂義的序列化格式、傳輸協定與中心探索機制。 - ROS 2 擁有抽象化中介軟體介面支援序列化、傳輸與探索機制,並且基於 DDS 標準上實現功能,這也讓 ROS 2 能夠提供 QOS 以改善位於各種不同網路上的通訊品質。 ## 編譯系統 - ROS 1 在 groovy 版本之後採用 catkin 編譯系統,這是以 Cmake 為中心的編譯系統,因此就算使用者的 ROS 1 功能套件包完全以 Python 撰寫,也必須由 Cmake 進行處理,然而 Cmake 並不支援 Python setuptools 中的所有功能。除此之外,在 Windows 系統上也較不容易移植 Cmake 專案。 - ROS 2 在最新的長期支援版本 Foxy 中,使用了 colcon 編譯系統,可搭配 ament_tools 對使用 Python 的功能套件包進行編譯。 ## ROS 1 與 ROS 2 差異比較表 ![](https://i.imgur.com/oGnbyx3.png) ![](https://i.imgur.com/OCH4QLE.png)