# ROS簡單介紹
ROS 1.0(簡稱: ROS)歷經10年的發展,已經積累了非常非常豐富且穩定的功能包集、各類工具和完備的教程。在未來即便是ROS2.0大行其道,仍會有機制保證ROS 2.0代碼與現有ROS代碼共存。例如,ROS仍然還可以通過message bridges等方式與ROS2.0一起工作。
<br>
ROS 2.0未來將成為機器人應用程序開發的終極SDK。相比于ROS1.0,它使用更先進的分布式架構,更高的可靠性,以及對實時性和嵌入式設備的支持。最大的不同在于采用了數據分發服務(DDS)技術,DDS適用于實時分布式嵌入式系統。2016年有一篇會議論文。Exploring the performance of ROS2。 分析了ROS2.0的性能。但是目前,網上的教程大多數是ROS的,ROS2的教程很少,而且程序包也沒有ROS豐富。
<br>
## 為什么會出現ROS 2.0 ?
歸結起來,分為三個原因:1.歷史原因;2. 出現了新的需求;3.出現了新的技術。
<br>
#### 1.歷史原因
ROS始于2007年11月,最早是“柳樹車庫”用于PR2機器人的開發。同時希望ROS能用于其他機器人。為了便于多研究所合作,避免重復造輪子,所以柳樹車庫花費大量精力定義了抽象級別(通常是通過消息的接口),允許軟件重用。
其解決思路是:
1、 讓多個程序分別完成特定任務, 能夠相互通信, 并且定義好常用的格式讓大家使用基于面向服務 Service-oriented;
2、 ROS 提供構建環境,讓大家能夠較容易的使用他人的工作, 容易交換代碼 ;
按照當時以及能夠想到的機器人現狀,ROS主要設計指向是:
1. 單個機器人;
2. 板載工作站級別的計算資源;
3. 沒有實時性需求;
4. 理想的網絡連接;
5. 應用于學術研究;
6. 強調最大的靈活性,沒有過多的約定或者禁止。
然而,ROS設計初衷是用于家用服務機器人,出乎意料的是:ROS被應用于各式各樣的機器人:輪式機器人、腿式機器人、工業手臂、室外無人車輛、自動駕駛汽車、飛行器、無人艇……。 而且ROS設計初衷是用于學術研究,然而出乎意料的是:大量基于ROS的產品進入市場,包括制造業機器人、農業機器人、商業清潔機器人,甚至NASA將運行ROS的Robonaut 2部署到國際空間站。
隨著應用場景的擴大,導致產生了一系列新的需求。
<br>
### 2.出現了新的需求
以下是ROS目前感覺不足的領域,也是ROS2.0意圖解決的問題。
1. 多個機器人組成的集群; ROS的單master結構就蛋疼了。
2. 小型嵌入式平臺,甚至“裸奔”的微控制器;依賴于Ubuntu的ROS太重了。
3. 實時系統:包括進程間和跨機器通信,ROS做不到。
4. 非理想的網絡;ROS延遲很大,甚至斷網再連接時會掛。
5. 生產制造等環境:ROS可靠性還不夠。
6. 為一些新特性,如部署的生命周期管理和靜態配置,提供清晰的模式和支持工具。
<br>
### 3.出現了新的技術
ROS的核心是匿名發布-訂閱中間件系統,從2007年開始,在ROS這些相關領域產生了一些更新、更好、值得借鑒使用的技術,如:
1. Zeroconf;
2. Protocol Buffers;
3. ZeroMQ (and the other MQs);
4. Redis;
5. WebSockets; and
6. DDS (Data Distribution Service)

<br>
## ROS與ROS2的差異性
### 通信模型
ROS:
1. talker 注冊
2. listener 注冊
3. ROS Master 進行信息匹配
4. listener 發送鏈接請求
5. talker 確認請求
6. 建立連接
7. talker 給 listener 發數據
<br>
ROS2:
1. 參與者(Domain Participant):一個參與者Participant就是一個容器,對應于一個使用DDS的用戶,任何DDS的用戶都必須通過Participant來訪問全局數據空間。
2. 發布者(Publisher):數據發布的執行者,支持多種數據類型的發布,可以與多個數據寫入器(DataWriter)相聯,發布一種或多種主題(Topic)的消息。
3. 訂閱者(Subscriber):數據訂閱的執行者,支持多種數據類型的訂閱,可以與多個數據讀取器(DataReader)相聯,訂閱一種或多種主題(Topic)的消息。
4. 數據寫入器(DataWriter):應用向發布者更新數據的對象,每個數據寫入器對應一個特定的Topic,類似于ROS1中的一個消息發布者。
5. 數據讀取器(DataReader):應用從訂閱者讀取數據的對象,每個數據讀取器對應一個特定的Topic,類似于ROS1中的一個消息訂閱者。
6. 主題(Topic):這個和ROS1中的Topic概念一致,一個Topic包含一個名稱和一種數據結構。
7. QoS Policy:Quality of Service,質量服務原則,這個模塊在ROS1中可從沒見過,看名稱就猜測應該是負責數據質量的。QoS是DDS中非常重要的一環,控制了各方面與底層的通訊機制,主要從時間限制、可靠性、持續性、歷史記錄幾個方面,滿足用戶針對不同場景的數據應用需求
<br>
### ROS/ROS2 架構圖

## 總結
在學習方面,如果是剛剛入門的同學,可以先拿ROS來入門,因為現在有很多ROS的入門學習資料方便快速入門;再對ROS有了一定的了解后再來學習ROS2.0更加深入、優秀的知識。
<br>
Enjoy it.
[機器人實驗室 https://roboticslab.cn](https://roboticslab.cn)