天天看點

ROS中階筆記(十一):ROS 2.01 為什要有ROS 22 什麼是ROS23 安裝ROS24 話題與服務程式設計5 ROS2與ROS1的內建

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

文章目錄

  • 1 為什要有ROS 2
    • 1.1 ROS 1的特點
    • 1.2 ROS 1的困境
    • 1.3 ROS 2的曙光
    • 1.4 ROS 2的版本進化
    • 1.5 ROS 2 VS ROS 1(重點)
  • 2 什麼是ROS2
    • 2.1 ROS 2的架構
    • 2.2 DDS(ROS 2.0 的優勢)
    • 2.3 ROS2的通信模型
    • 2.4 ROS2的品質服務原則QoS
      • 2.4.1 QoS的工作模型
      • 2.4.2 QoS的資料結構
    • 2.5 ROS2的編譯系統(重點)
      • 2.5.1 ROS2的編譯系統簡介
      • 2.5.1 ROS2的編譯系統的特點
  • 3 安裝ROS2
  • 4 話題與服務程式設計
    • 4.1 ament工作空間的建立
    • 4.2 兩代ROS的代碼對比
  • 5 ROS2與ROS1的內建
    • 5.1 ROS1與ROS2之間的橋梁

1 為什要有ROS 2

1.1 ROS 1的特點

ROS中階筆記(十一):ROS 2.01 為什要有ROS 22 什麼是ROS23 安裝ROS24 話題與服務程式設計5 ROS2與ROS1的內建
  • 獨立的機器人(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的版本進化

ROS中階筆記(十一):ROS 2.01 為什要有ROS 22 什麼是ROS23 安裝ROS24 話題與服務程式設計5 ROS2與ROS1的內建

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的架構

ROS中階筆記(十一):ROS 2.01 為什要有ROS 22 什麼是ROS23 安裝ROS24 話題與服務程式設計5 ROS2與ROS1的內建
ROS中階筆記(十一):ROS 2.01 為什要有ROS 22 什麼是ROS23 安裝ROS24 話題與服務程式設計5 ROS2與ROS1的內建

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的通信模型

ROS中階筆記(十一):ROS 2.01 為什要有ROS 22 什麼是ROS23 安裝ROS24 話題與服務程式設計5 ROS2與ROS1的內建

2.4 ROS2的品質服務原則QoS

2.4.1 QoS的工作模型

ROS中階筆記(十一):ROS 2.01 為什要有ROS 22 什麼是ROS23 安裝ROS24 話題與服務程式設計5 ROS2與ROS1的內建

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
           
ROS中階筆記(十一):ROS 2.01 為什要有ROS 22 什麼是ROS23 安裝ROS24 話題與服務程式設計5 ROS2與ROS1的內建

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極為相似的。
ROS中階筆記(十一):ROS 2.01 為什要有ROS 22 什麼是ROS23 安裝ROS24 話題與服務程式設計5 ROS2與ROS1的內建

5 ROS2與ROS1的內建

5.1 ROS1與ROS2之間的橋梁

ROS中階筆記(十一):ROS 2.01 為什要有ROS 22 什麼是ROS23 安裝ROS24 話題與服務程式設計5 ROS2與ROS1的內建
ROS中階筆記(十一):ROS 2.01 為什要有ROS 22 什麼是ROS23 安裝ROS24 話題與服務程式設計5 ROS2與ROS1的內建

繼續閱讀