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

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

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的消息也不絕於耳。node

​ 終於在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的綜合性能。python

1.4 ROS 2的版本進化

1.5 ROS 2 VS ROS 1(重點)

一、架構的顛覆編程

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

二、API的從新設計windows

  • ROS1中的大部分代碼都基於2009年2月設計的API
  • ROS2從新設計了用戶API,但使用方法相似

三、編譯系統的升級api

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

2 什麼是ROS2

2.1 ROS 2的架構

2.2 DDS(ROS 2.0 的優點)

DDS,Data Distribution Service,即數據分發服務bash

  • 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的編譯系統簡介

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

二、組成網絡

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

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

2.5.1 ROS2的編譯系統的特色

一、CMake centric catkin

系統以CMake爲中心,因此只包含python代碼的功能包也須要由CMake進行處理,可是CMake並不支持Python setuptools中的全部功能,並且也很難在Window上進行移植。

二、Devel space

在catkin系統構建完成後,會在工做目錄下生成一個devel文件夾,裏邊是編譯好的功能包,以及環境變量的設置等等,基本上等同於ROS安裝完成後的目錄結構和做用。可是相信不少初學者由於devel中的環境變量而苦惱過,這確實爲用戶帶來了一些沒必要要的麻煩。

三、catkin_simple catkin_simple

是一個用於改善用戶catkin體驗的工具包,能夠減小複雜的CMake代碼,可是會存在不穩定的狀況。ament也是實現了相似的功能,可是可靠性更強。

四、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工做空間的建立

一、建立工做空間

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

二、建立功能包

手動建立:my_package/

CMakeLists.txt
package.xml

三、編譯(以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視頻和書籍資料等你領取!!!

相關文章
相關標籤/搜索