---
# System prepended metadata

title: ROS 通訊篇

---

## Node
- 在ROS的世界裡，最小的進程單元就是節點（node）。一個軟體包裡可以有多個可執行文件，可執行文件在運行之後就成了一個進程(process)，這個進程在ROS中就叫做節點。
- 從程式角度來說，node就是一個可執行檔（通常為C++編譯產生的可執行檔、Python腳本）被執行，載入到了記憶體之中；
- 從功能角度來說，通常一個node負責者機器人的某一個單獨的功能。由於機器人的功能模組非常複雜，我們往往不會把所有功能都集中到一個node上，而會採取分散式的方式，把雞蛋放到不同的籃子裡。
- 例如有一個node來控制底盤輪子的運動，有一個node驅動攝像頭獲取圖像，有一個node驅動激光雷達，有一個node根據傳感器信息進行路徑規劃……這樣做可以降低程序發生崩潰的可能性，試想一下如果把所有功能都寫到一個程式中，模組間的通訊、異常處理將會很麻煩。

## Master
- 由於機器人的元件很多，功能龐大，實際運作時往往會運作眾多的node，負責感知世界、控制運動、決策和運算等功能。那麼如何合理的進行調配、管理這些node？這就要利用ROS提供給我們的節點管理器master, master在整個網路通訊架構裡相當於管理中心，管理各個node。node首先在master處註冊，之後master會將該node納入整個ROS程式中。node之間的通訊也是先由master進行“牽線”，才能兩兩的進行點對點通訊。當ROS程式啟動時，第一步先啟動master，由節點管理器處理依序啟動node。