ROS
簡介
- ROS(Robot Operating System)是一個適用於機器人的開源的元操作系統,是用於編寫機器人軟件程序的一種具有高度靈活性的軟件架構,提供了操作系統應有的服務,包括硬件抽象,底層設備控制,常用函數的實現,進程間消傳遞,以及包管理
一套標准
- ROS中有一個稱為“計算圖”的概念,即由一個master管理一堆節點。通過這個東西,我們可以非常方便且安全地通過編寫多個節點實現多進程編程(注意不是多線程)。這種編程方式是ROS標准的一部分
- 計算圖(Computation Graph)是一個由ROS進程組成的點對點網絡,它們能夠共同處理數據。ROS的基本計算圖概念有節點(Nodes)、主節點(Master)、參數服務器(Parameter Server)、消息(Messages)、服務(Services)、話題(Topics)和袋(Bags),它們都以不同的方式向圖(Graph)提供數據
一堆工具
- ROS提供了大量的工具。比如許多命令行工具,可以檢測每個節點的發布頻率,信息類型,又比如超級好用的可視化工具Rviz,用來數據可視化的rqt_plot,用來仿真的gazebo,用來標定相機內參的工具等等
節點與管理器
節點(Node) --執行單元
- 執行具體任務的進程、獨立運行的可執行文件
- 不同節點可使用不同的編程語言,可分布式運行在不同的主機
- 節點在系統中的名稱必須是唯一的
節點管理器(ROS Master) --控制中心
- 為節點提供命名和注冊服務
- 跟蹤和記錄話題/服務通信,輔助節點互相查找、建立連接
- 提供參數服務器,節點使用此服務器存儲和檢索運行時的參數

話題通信
話題(Topic) --異步通信機制
- 節點間用來傳輸數據的重要總線
- 使用發布/訂閱模型,數據由發布者傳輸到訂閱者,同一個話題的訂閱者或發布者可以不唯一
消息(Message) --話題數據
- 具有一定的類型和數據結構,包括ROS提供的標准類型和用戶自定義類型
- 使用與編程語言無關的.msg文件定義,編譯過程中生成對應的代碼文件
注意,Topic一般擁有很強的類型定義:一種類型的Topic只能接受/發送特定數據類型(message type)的Message


服務通信
服務(Service) --同步通信機制
- 使用客戶端/服務器(C/S)模型,客戶端發送請求數據,服務器完成處理后返回應答數據
- 使用與編程語言無關的.srv文件定義請求和應答數據結構,編譯過程中生成對應的代碼文件


參數
參數(Parameter) --全局共享字典
- 可通過網絡訪問的共享、多變量字典
- 節點使用此服務器來存儲和檢索運行時的參數
- 適合存儲靜態、非二進制的配置參數,不適合存儲動態配置的數據

文件系統
功能包(Package)
- ROS軟件中的基本單元,包含節點源碼、可執行文件、腳本、配置文件、數據定義等
功能包清單(Package manifest)
- 清單(Manifest)是對軟件包的描述。它用於定義軟件包之間的依賴關系,並記錄有關軟件包的元信息,如版本、維護者、許可證等
元功能包(Meta Packages)
- 組織多個用於同一目的的功能包

