一.ROS的定義html
ROS是一個適用於機器人的開源的元操做系統。它提供相似操做系統所提供的功能,包括硬件抽象、底層設備控制、經常使用函數的實現、進程間消息傳遞以及包管理。它也提供用於獲取、編譯、編寫、跨計算機運行代碼所需的工具和庫函數。它主要採用的是鬆耦合點對點進程網絡。node
我的理解:ROS不是一個真正的操做系統,是類操做系統,是屬於中間層的。ROS主要的目的是將硬件層抽象出來,留出接口方便開發。ROS能夠分爲框架、工具、功能和社區四大部分,其中框架主要是指分佈式管理和進程管理,工具備仿真軟件Gazebo、可視化工具Rviz和Rqt,功能有控制、規劃、定位和建圖等功能,社區指的是軟件包管理,能夠調用別人的軟件包進行項目開發,通常能夠在wiki或者github上找到資源。git
ROS有四大優勢:1、鬆散耦合的機制方便機器人軟件框架的組織;2、很是便利的數據記錄、分析、仿真工具,方便調試;3、最豐富的機器人功能庫,方便快速搭建原型;4、學界和產業界的標準,方便學習和交流。 使用一句話總結,使用ROS,可以方便迅速地搭建好機器人原型。其實,ROS這四大優勢恰好一一對應框架、工具、功能和社區這四大部分。github
二.ROS安裝(從底層的架構來分析爲何這樣安裝,有待理解)編程
注:apt-get install 安裝二進制,沒法修改;緩存
從github下載的軟件包或者本身編寫的須要編譯才能安裝。服務器
三.ROS名詞解釋網絡
1.package(功能包):功能包是ROS中組織軟件的主要形式,一個功能包包含多個可執行文件。架構
2.metapackage(功能包集):功能包集是實現某種功能的多個功能包的集合。框架
3.node(節點):節點是一個可執行文件,程序文件只有轉成成可執行文件才能夠運行。
4.topic(主題):節點通訊方式的一種,經過publish-subscribe來實現,異步和單向的通訊。
5.message(消息):topic通訊的數據類型,能夠理解爲二者通訊的協議。
6.service(服務):節點通訊方式的一種,經過client-server來實現,同步和雙向的通訊。
四.ROS工程結構(文件系統級)
ROS工程結構直觀上是指圖形化界面上的文件夾以及裏面的內容,本質上是講ROS的框架。
首先是建立一個新的Catkin工做空間(之前叫Rubuild),也叫Catkin Workspace,這個文件夾裏面有三個文件夾,分別是src、bulid和devel,這三個文件夾分別存放pkg軟件包、中間緩存文件以及目標文件,其中src裏面的package文件是最重要的,也是最基本的組織形式,一個package裏面包含兩個必備的文件,分別是CMakeList.txt和package.xml。CMakeList.txt文件定義了編譯的規則,直接規定了這個package要依賴哪些package,要編譯生成哪些目標,如何編譯等等流程;package.xml裏面是package的自我屬性描述,在之前的Rubuild裏面叫manifest.xml,其實二者是同樣的。除此以外,還有scripts(*.py、*.cpp)、include(*.h)、src文件夾,這三個文件夾是與C++和Python有關的。有些狀況下還會有config(param)、launch文件夾和一些自定義的通訊格式(msg、srv、action)。這就是一個完整的ROS工程結構,其中是src、build和devel是必須有的,而src裏面的CMakeList.txt和package.xml也是必須有的,其餘的文件是看項目的須要而創建的。
總體的文件說明參考下圖4-1所示:
圖4-1 文件的說明
關於ROS的編譯過程參考下圖4-2所示:
圖4-2 編譯的過程
那麼對工程結構有了一個總體的認識後,咱們須要如何建立和管理這些文件,這就須要用到咱們的一些經常使用的指令來進行管理,這些指令跟LINUX裏面的指令有點相似,大部分是在LINUX指令前面加上ros。
其中有六個指令比較經常使用,具體的使用格式能夠查,大概有關印象。以下所示:
1.catkin_creat_pkg:建立一個package
2.roscd:跳到某個pkg 的路徑下
3.rosed:編輯某個pkg下的某個file文件
4.rosls:羅列當前包的信息
5.rosdep:安裝某個pkg的依賴包
6.rospack:rospack find package_name是尋找某個包
rospack list 顯示全部的包
對於ROS來講,package是最基本的組織形式,那麼這些package這麼多,應該怎麼來組織呢,這個時候就有了一個功能包集的概念,之前叫Stack,如今叫Metapackage,其實說白了就是把功能類似的功能包組織起來放在一塊兒,而後起個名字就成了Metapackage。
五.ROS通訊架構(計算圖級)
ROS的通訊架構有一個總的管家,名叫Master(節點管理器),全部節點之間的通訊都要
經過向它註冊才能進行,因此要先啓動Master。啓動Master須要用roscore命令,執行這個命令同時也啓動rosout和parameter server。
在通訊架構裏面固然是通訊最重要,那麼就涉及到兩個概念,一個是通訊的對象——節點(node),另外一個是通訊的方式——4中方式(Topic、Service、Actionlib和Parameter Service)。
才能進行通訊。
Topic和Service的區別以下圖5-1:
圖5-1 Topic和Service的對比
Parameter Service也是通訊方式的一種,可是比較特殊,主要是由於參數服務器是節點存儲參數的地方、用於配置參數,全局共享參數。參數服務器使用互聯網傳輸,在節點管理器中運行,實現整個通訊過程。它更加靜態,有點相似字典的形式。對於參數服務器的維護有三種方法:1.命令行維護;2.launch文件維護;3.node源碼。我的理解:參數服務器是方便開發者在後續調參的時候用到的,這樣就不須要每次都要改代碼,能夠提升開發的效率。
Actionlib是ROS中一個很重要的庫,相似service通訊機制,actionlib也是一種請求響應機制的通訊方式,actionlib主要彌補了service通訊的一個不足,就是當機器人執行一個長時間的任務時,假如利用service通訊方式,那麼publisher會很長時間接受不到反饋的reply,導致通訊受阻。當service通訊不能很好的完成任務時候,actionlib則能夠比較適合實現長時間的通訊過程,actionlib通訊過程能夠隨時被查看過程進度,也能夠終止請求,這樣的一個特性,使得它在一些特別的機制中擁有很高的效率。我的理解:action相比service主要是在於有一個實時的回饋過程,即feedback。這個在代碼中的體現也是多了一段feedback的代碼,其餘的跟service相似,可對比來學習。
六.ROS工具
七.ROS編程庫——roscpp、rospy
八.TF、URDF
九.參考連接