1. 程式人生 > 實用技巧 >ROS中階筆記(十一):ROS 2.0

ROS中階筆記(十一):ROS 2.0

ROS中階筆記(十一):ROS 2.0

目錄

1 為什要有ROS 2

1.1 ROS 1的特點

  • 獨立的機器人(PR2)
  • 工作站級別的計算資源
  • 沒有實時性的需求
  • 良好的網路連線
  • 主要應用於研究

1.2 ROS 1的困境

  • [ ] 多機器人系統——沒有構建多機器人系統的標準方法
  • [ ] 跨平臺——無法適用於windows、RTOS等系統
  • [ ] 實時性——缺少實時性方面的設計
  • [ ] 網路連線——需要良好的網路環境保證資料的完整性
  • [ ] 產品化——從科學研究到消費產品的過渡欠佳
  • [ ] 專案管理——無法勝任完整生命週期下專案管理

1.3 ROS 2的曙光

​ ROS已經走過十個年頭,伴隨著機器人技術的大發展,ROS也得到了極大的推廣和應用。儘管ROS還存在不少侷限性,但無法掩蓋ROS的鋒芒,社群內的功能包還是呈指數級逐年上漲,為機器人開發帶來了巨大的便利。不少開發者和研究機構還針對ROS的侷限性進行了改良,但這些區域性功能的改善往往很難帶來整體效能的提升,機器人開發者對新一-代ROS的呼聲越來越大,ROS2.0的訊息也不絕於耳。

​ 終於在ROSCon 2014上,正式公佈了新一代ROS的設計架構(Next-generation ROS:Building on DDS),2015年8月 第一個ROS2.0的alpha版本落地,2016年12月19日,ROS2.0的beta版本正式釋出,2017年12月8日,萬眾矚目的ROS2.0終於釋出了第一個正式版——Ardent Apalone。眾多新技術和新概念應用到了新一代的ROS之中,不僅帶來了整體架構的顛覆,更是增強了ROS2.0的綜合性能。

1.4 ROS 2的版本進化

1.5 ROS 2 VS ROS 1(重點)

1、架構的顛覆

  • ROS1的架構下,所有節點需要使用Master進行管理
  • ROS2使用基於DDS的Discovery機制,和Master說拜拜

2、API的重新設計

  • ROS1中的大部分程式碼都基於2009年2月設計的API
  • ROS2重新設計了使用者API,但使用方法類似

3、編譯系統的升級

  • ROS 1使用rosbuild、catkin管理項 目
  • ROS2使用升級版的ament

2 什麼是ROS2

2.1 ROS 2的架構

2.2 DDS(ROS 2.0 的優勢)

DDS,Data Distribution Service,即資料分發服務

  • 2004年由物件管理組織0MG(Object Management Group)釋出
  • 專門為實時系統設計的資料分發/訂閱標準
  • 最早應用於美國海軍,解決艦船複雜網路環境中大量軟體升級的相容性問題,目前已經成為美國國防部的強制標準,同時廣泛應用於國防、民航、工業控制等領域,成為分散式實時系統中資料釋出/訂閱的標準解決方案。
  • 技術核心是以資料為核心的釋出訂閱模型(Data-Centric Publish-Subscribe,DCPS),這種DCPS模型建立了一個“全域性資料空間”(global data space)的概念,所有獨立的應用都可以去訪問。
  • 在DDS中,每一個釋出者或者訂閱者都稱為參與者(participant),類似於ROS中節點的概念。每一個參與者都可以使用某種定義好的資料型別來讀寫全域性資料空間。

2.3 ROS2的通訊模型

2.4 ROS2的質量服務原則QoS

2.4.1 QoS的工作模型

2.4.2 QoS的資料結構

typedef struct RMW_PUBLIC_TYPE rmw_qos_profile_t 
{
enum rmw_qos_history_policy_t history; 
size_t depth; 
enum rmw_qos_reliability_policy_t reliability; 
enum rmw_qos_durability_policy_t durability;
}rmw_qos_profile_t;
  • 每個原則都有對應的系統預設值
  • 可以使用DDS廠商提供的配置工具修改QoS的設定
  • 多商家的DDS可以並存

2.5 ROS2的編譯系統(重點)

2.5.1 ROS2的編譯系統簡介

1、功能
ament是一種元編譯系統,用來構建組成應用程式的多個獨立功能包,catkin編譯系統進一步演化的版本。

2、組成

  • 編譯系統:配置、編譯、安裝獨立的功能包
  • 構建工具:將多個獨立的功能包按照一定的拓撲結構進行連結

ament還處於開發中,目前並不穩定,也不提供並行構建的能力,將來應該會加入

2.5.1 ROS2的編譯系統的特點

1、CMake centric catkin

系統以CMake為中心,所以只包含python程式碼的功能包也需要由CMake進行處理,但是CMake並不支援Python setuptools中的所有功能,而且也很難在Window上進行移植。

2、Devel space

在catkin系統構建完成後,會在工作目錄下生成一個devel資料夾,裡邊是編譯好的功能包,以及環境變數的設定等等,基本上等同於ROS安裝完成後的目錄結構和作用。但是相信很多初學者因為devel中的環境變數而苦惱過,這確實為使用者帶來了一些不必要的麻煩。

3、catkin_simple catkin_simple

是一個用於改善使用者catkin體驗的工具包,可以減少複雜的CMake程式碼,但是會存在不穩定的情況。ament也是實現了類似的功能,但是可靠性更強。

4、Building within a single CMake context

使用catkin_make命令可以一次性編譯工作空間中的所有功能包,雖然方便,但如果存在相同命名的功能包時,會編譯失敗,ament在這方面也進行了改善。

3 安裝ROS2

ROS2只支援Ubuntu 16.04以上的系統

因為ROS2更新迭代快,根據時效性,看官網安裝。另外對於ROS的實時性沒有特別要求,建議用ROS1。

官網:https://index.ros.org/doc/ros2/Installation/Crystal/Linux-Install-Binary/#system-requirements

分別開啟兩個終端執行以下命令:

$ ros2 run demo_nodes_cpp talker
$ ros2 run demo_nodes_cpp listener

4 話題與服務程式設計

4.1 ament工作空間的建立

1、建立工作空間

$ mkdir-p ~/ros2_ ws/src
$ cd ~/ros2_ ws/src

2、建立功能包

手動建立:my_package/

CMakeLists.txt
package.xml

3、編譯(以ament為例)

$ ament build

4.2 兩代ROS的程式碼對比

  • ROS2中的API相比ROS1中發生了較大的變化,ROS2並不是在ROS1的基礎上查漏補缺,而是完全從新設計。
    關於ROS2的API說明,可以參考API文件:http://docs.ros2.org/ardent/api/rclcpp/index.html
  • 使用了更多C++的特性,比如auto、make_shared等。
  • 加入了QoS配置,從上邊的程式碼中,我們可以看到QoS有預設的配置rmw_qos_profile_default,而且talker將QoS的depth配置設定為“7”。
  • 程式碼的總體架構還是與ROS1極為相似的。

5 ROS2與ROS1的整合

5.1 ROS1與ROS2之間的橋樑

微信公眾號:喵哥解說
公眾號介紹:主要研究機器學習、計算機視覺、深度學習、ROS等相關內容,分享學習過程中的學習筆記和心得!期待您的關注,歡迎一起學習交流進步!同時還有1200G的Python視訊和書籍資料等你領取!!!